next up previous contents index
Next: Implementation in C++ Up: Primitive Operations Previous: Synchronize

Sample Flowchart of Operations

The following is a sample code for the primitive operations. Error handlings are omitted from the sample for simplicity.

    // Declarations
    PersistentStorage *ps; // the persistent storage 
    PersistentPointer pp;  // the persistent pointer
    PersistentObject *obj; // the reference pointer
    pp = ps->allocate(sizeof(PersistentObject)); // Allocate
      // Grab and Instantiate
      obj = new(pp.grab()) PersistentObject(parameters, ...); 
        obj->manipulate(parameters, ...); // Manipulate
      pp.release(); // Release 
      obj = 0; // Invalidate the reference pointer

      obj = pp.grabReadOnly(); // Read-only-Grab
        obj->reference(parameters, ...); // Reference
      pp.releaseReadOnly(); // Read-only-Release
      obj = 0; // Invalidate the reference pointer

      obj = pp.grab(); // Grab
      obj->~PersistentObject(); // Destruct
    ps->destroy(pp); // Destroy (also Release)
    ps->synchronize(); // Synchronize

The persistent pointer and the reference pointer are declared at first. Each operation is almost self-explanatory. Comparison with the Figure 2.2 would be helpful.

An explanation should be needed for the destroying operation. The storage block must be grabbed when destroyed. Otherwise, any object would be destroyed arbitrarily.



Mori Tetsuya / t2y3141592@gmail.com