A simple CkptObject example

This example uses a user defined class, subclassing CkptObject, and a CkptSimpleContainer templated container. This container can only hold objects of type CkptObjTest. It is defined to contain up to 1024 objects.

The main routine creates the container and an object, sets the object's key, and then performs the typical CRUD (Create, Retrieve, Update, Destroy) operations. This example does not contain proper error checking for the sake of brevity.

#include <string>
#include <CkptObject.h>
#include <CkptContainer.h>

class CkptObjTest : public CkptObject {
 public:
  static const int CHAR_ARRAY_SIZE=32;

  CkptObjTest() : CkptObject() { }
  CkptObjTest(int i, std::string str) : CkptObject() {
    intVar = i;
    str_obj = str;
    memcpy(charArray, "Blahblah\0", 9);
  }
  CkptObjTest(CkptObjTest const &rhs) {
    intVar = rhs.intVar;
    str_obj = rhs.str_obj;
    memcpy(charArray, rhs.charArray, CHAR_ARRAY_SIZE);
  }

  CkptObjTest* clone() const { return new CkptObjTest(*this); }

  virtual void serialize(DAOInterface &dao) {
    dao & intVar;
    dao.byteCopy(charArray, CHAR_ARRAY_SIZE);
  }

   COAL_DECLARE_CLASSNAME("CkptObjTest")

   int intVar;
   std::string str_obj;
   char charArray[CHAR_ARRAY_SIZE];

};

COAL_REGISTER_TYPE(CkptObjTest)

int main() {
    unsigned long MaxKeys = 1024;
    unsigned long MaxObjectSize = sizeof(CkptObjTest);

    // Create a container for objects of type CkptObjTest
    CkptSimpleContainer <CkptObjTest> *otContainer;
    otContainer = new CkptSimpleContainer<CkptObjTest>("MyContainerName", MaxKeys, MaxObjectSize);

    // Create a new object and a key for it
    CkptObjTest obj(42, "Hello world");
    obj.setKey("obj1");

    // Persist the object
    otContainer->persist(&obj);

    // Do other stuff...
    // ...

    // Retrieve an object by key
    CkptObjectKey ptKey("obj1");
    CkptObjTest *objPtr = otContainer->get(ptKey);

    // Change the object's data
    objPtr->intVar = 420;

    // Update (commit) the changed object
    otContainer->commit(objPtr);
    // OR, if you prefer:  objPtr->commit();

    // Remove the object from the container (Destroy the data in the replica)
    otContainer->remove(objPtr);

    // The object isn't in the container, but we still have our snapshot copy
    // from the call to get()
    // Free up the memory associated with our copy of the object
    delete objPtr;

    return 0;
}

 
Generated on Fri Apr 27 17:20:01 2007 for aiscoal by  doxygen 1.5.2