These methods must be used by a derived class. They are responsible for
packing and unpacking an object's state to/from a state buffer.
StateManager calls them at appropriate times during the lifetime of the
object, and may then pass the buffer to a persistent object store for
saving.

These methods must be provided by a derived class. They are responsible
for packing and unpacking an object's state to/from a state buffer.
StateManager calls them at appropriate times during the lifetime of the
object, and may then pass the buffer to a persistent object store for
saving.

This operation activates an object. Activation of an object may entail
loading its passive state from the object store and unpacking it into the
memory resident form, or it may simply be a no-op. Full activation is
only necessary if the object is currently marked as being PASSIVE (that
is, the object was constructed as being of type ANDPERSISTENT with an
existing uid and has not already been activated). Objects that are not of
type ANDPERSISTENT or are persistent but have not yet been saved in an
object store (so-called new persistent objects) are unaffected by this
function. Returns false if PASSIVE object cannot be loaded from object
store, true otherwise. The root of the object store is taken as
null.

This operation activates an object. Activation of an object may entail
loading its passive state from the object store and unpacking it into the
memory resident form, or it may simply be a no-op. Full activation is
only necessary if the object is currently marked as being PASSIVE (that
is, the object was constructed as being of type ANDPERSISTENT with an
existing uid and has not already been activated). Objects that are not of
type ANDPERSISTENT or are persistent but have not yet been saved in an
object store (so-called new persistent objects) are unaffected by this
function. Returns false if PASSIVE object cannot be loaded from object
store, true otherwise.

This operation deactivates a persistent object. It behaves in a similar
manner to the activate operation, but has an extra argument which defines
whether the object's state should be committed or written as a shadow.
The root of the object store is null. It is assumed that
this is being called during a transaction commit.

This operation deactivates a persistent object. It behaves in a similar
manner to the activate operation, but has an extra argument which defines
whether the object's state should be commited now or not. It is assumed
that this is being called during a transaction commit.

This operation deactivates a persistent object. It behaves in a similar
manner to the activate operation, but has an extra argument which defines
whether the object's state should be commited now or not.

The following function disables recovery for an object by setting the
ObjectType to NEITHER (RECOVERABLE or ANDPERSISTENT). The value of this
variable is checked in the modified operation so that no recovery
information is created if myType is set to NEITHER.

The object's type. Derived classes should override this to reflect their
type structure. Typically this string is used for locating the object
state in an object store, and reflects the hierarchy structure of the
object.

Create object with specific uid. This constructor is primarily used when
recreating an existing object. The object type is set to 'ANDPERSISTENT'
this is equivalent to invoking persist in the object constructor.

The persist function changes the type of the object from RECOVERABLE to
ANDPERSISTENT. No changes are made unless the status of the object is
ACTIVE, so it is not possible to change the type of the object if it has
been modified.