00001 #ifndef CKPTOBJECT_H_ 00002 #define CKPTOBJECT_H_ 00003 00004 #include <memory> 00005 #include "CkptDAO.h" 00006 #include "CkptTypeRegistry.h" 00007 #include "CkptObjectKey.h" 00008 #include "CkptByteArray.h" 00009 00010 enum CkptRC { CkptSuccess, CkptFailure}; 00011 enum CkptObjectState { CKPT_OBJ_UNMANAGED, 00012 CKPT_OBJ_MANAGED }; 00013 00014 class CkptContainer; 00015 00022 class CkptObject : public DAOSerializable { 00023 public: 00024 CkptObject() { 00025 _key = NULL; 00026 _container = NULL; 00027 _state = CKPT_OBJ_UNMANAGED; 00028 } 00029 00030 virtual ~CkptObject() { 00031 if (_key != NULL) { 00032 delete _key; 00033 } 00034 } 00035 00039 //virtual CkptObject* clone() const = 0; 00040 00047 virtual void serialize(DAOInterface &dao)=0; 00048 00052 CkptObjectState getState() { return _state; } 00056 void setState(CkptObjectState state) { _state = state; } 00057 00058 CkptContainer* getContainer() { return _container; } 00059 00063 void setContainer(CkptContainer* container) { 00064 _container = container; 00065 if (container == NULL) setState(CKPT_OBJ_UNMANAGED); 00066 else setState(CKPT_OBJ_MANAGED); 00067 } 00068 00078 virtual CkptObjectKey* getKey() { return _key; } 00079 00086 virtual void setKey(CkptObjectKey *key) { 00087 if (_key != NULL) delete _key; 00088 _key = key; 00089 } 00090 00096 virtual void setKey(CkptObjectKey const &key) { 00097 setKey(new CkptObjectKey(key)); 00098 } 00099 00105 virtual void setKey(std::string s) { 00106 setKey(new CkptObjectKey(s)); 00107 } 00108 00118 //virtual unsigned long getSerialVersion()=0; 00119 00128 CkptRC commit(); 00129 00130 private: 00131 CkptContainer* _container; 00132 CkptObjectState _state; 00133 CkptObjectKey* _key; 00134 unsigned long _serialVersion; 00135 }; 00136 00137 00145 #define CkptSimpleStructWrapper(_Tp, WrapperName) \ 00146 class WrapperName : public CkptObject { \ 00147 public: \ 00148 void serialize(DAOInterface &dao) { \ 00149 char* dataPtr = (char*)&data; \ 00150 dao.byteCopy(dataPtr, sizeof(_Tp)); } \ 00151 _Tp* getStruct() { return &data; } \ 00152 _Tp* operator->() { return &data; } \ 00153 COAL_DECLARE_CLASSNAME(#WrapperName) \ 00154 private: _Tp data; \ 00155 }; \ 00156 COAL_REGISTER_TYPE(WrapperName) 00157 00158 #endif /*CKPTOBJECT_H_*/ 00159