It is usually necessary to allow objects within an object store
to point to objects that are part of the "program", such as
standard class objects (recall that everything is an object, and
every object has a class. Furthermore, the representation is
such that objects that are actually in the heap have actual
pointers to their class objects. Hence, in order to have, for
example, a vector located in the persistent store, it is necessary
to somehow allow that object to point to the (single)
<vector>
class object. Furthermore, since the location in
memory of
built-in class objects may change from process to process, a
different object naming scheme must be employed to resolve
the references to built-in or other application objects.)
The mechanism that this module provides to allow persistent objects to refer to transient objects (but in a persistent way) is called pivots.
The application defines a sequence of pivot objects with well-known names (they are defined in collections on "indirect pages" -- see setup-indirect-page); the system automatically resolves references to such objects when a page is loaded, and recognizes references to them when a page is written out. The next time the application opens an object store, it configures the same sequence of pivot objects -- then, a page that is loaded will correctly resolve to the corresponding application object.
Under normal circumstances, this module provides a
pre-defined collection of pivots for the standard built-in classes
such (for example) as the <vector>
and <pair>
class objects.