RIP Data Resource System
The RIP Data Resource (RDR) API is used to share blocks of data and functional interfaces between the skin and core, or in general, between multiple Providers and Consumers.
The RDR system is a thread-safe database for entity publishing and discovery built on the concepts of:
- Registration
- Classification
- Prioritization
- Iteration
The RDR API allows data to be discovered at run time, rather than being statically linked at build time. This allows complete decoupling of skin-supplied, RIP-consumed data, or vice versa; allows the skin to optionally override RIP-embedded data; and even allows data to be selected contextually.
The RDR system also underlies Events.
While using the RDR and Event systems provides a great deal of flexibility for developers, they also require equivalent responsibility to both document the expected protocols and for clients to follow those protocols. Arbitrarily suppressing events or overriding RDRs may cause incorrect functioning of software that relies on them.
What is an RDR?
An RDR is an entity represented by an address and a size. RDRs are identified by Class, Type and ID, or by Namespace, Name and ID. RDRs usually represent a block of data in memory, but the semantic interpretation of the address and size are (with one exception) specific to the Class and Type, or Namespace, of the RDR. The address and/or size could be used to represent, amongst other things:
- A block of ROM
- A block of RAM
- A memory threshold
- A size
- An address of an array and the number of members
- A string and its length
- An API implementation structure pointer
Uses for RDR by the RIP core
The main use for RDR by the Harlequin RIP core code is for discovery of externally provided implementation code for APIs. This allows OEMs to share libraries used by a RIP integration; to upgrade libraries provided by Global Graphics; and to provide custom implementations for some functionality.
The RIP also uses RDR so that optional or additional code, such as device type implementations, CMM and screening modules can use data supplied by the RIP skin without requiring a proprietary skin interface and associated build variance. This allows you to supply your own device type implementations, CMM or screening modules, or to omit them entirely, with no other configuration or build changes.
The RIP core uses RDR registered APIs for a number of libraries that it uses internally. Using RDR allows you to intercept and redirect the API calls, so you can upgrade the version of a library that the RIP core uses, or share the library with your own application code, without needing a new RIP core library.