Go to the documentation of this file.
44 #ifndef CCXX_PERSIST_H_
45 #define CCXX_PERSIST_H_
47 #ifndef CCXX_CONFIG_H_
51 #ifndef CCXX_EXCEPTIONS_H_
55 #ifndef CCXX_MISSING_H_
59 #ifndef CCXX_STRING_H_
64 #ifndef NO_COMPRESSION
68 #define NO_COMPRESSION
77 #ifdef CCXX_NAMESPACES
79 #define NS_PREFIX ost::
84 #ifdef CCXX_EXCEPTIONS
85 #ifdef COMMON_STD_EXCEPTION
87 class __EXPORT PersistException :
public Exception
90 PersistException(
const String &what) : Exception(what) {};
98 PersistException(
const String& reason);
99 inline const String& getString()
const
100 {
return Exception::getString();};
102 virtual ~PersistException() {}
throw();
111 typedef class BaseObject* (*NewBaseObjectFunction) (void);
164 #define DECLARE_PERSISTENCE(ClassType) \
166 friend NS_PREFIX Engine& operator>>( NS_PREFIX Engine& ar, ClassType *&ob); \
167 friend NS_PREFIX Engine& operator<<( NS_PREFIX Engine& ar, ClassType const &ob); \
168 friend NS_PREFIX BaseObject *createNew##ClassType(); \
169 virtual const char* getPersistenceID() const; \
170 static NS_PREFIX TypeManager::Registration registrationFor##ClassType;
172 #define IMPLEMENT_PERSISTENCE(ClassType, FullyQualifiedName) \
173 NS_PREFIX BaseObject *createNew##ClassType() { return new ClassType; } \
174 const char* ClassType::getPersistenceID() const {return FullyQualifiedName;} \
175 NS_PREFIX Engine& operator>>(NS_PREFIX Engine& ar, ClassType &ob) \
176 { ar >> (NS_PREFIX BaseObject &) ob; return ar; } \
177 NS_PREFIX Engine& operator>>(NS_PREFIX Engine& ar, ClassType *&ob) \
178 { ar >> (NS_PREFIX BaseObject *&) ob; return ar; } \
179 NS_PREFIX Engine& operator<<(NS_PREFIX Engine& ar, ClassType const &ob) \
180 { ar << (NS_PREFIX BaseObject const *)&ob; return ar; } \
181 NS_PREFIX TypeManager::Registration \
182 ClassType::registrationFor##ClassType(FullyQualifiedName, \
183 createNew##ClassType);
300 #define CCXX_ENGINEWRITE_REF(valref) writeBinary((const uint8*)&valref,sizeof(valref))
313 #undef CCXX_ENGINEWRITE_REF
336 #define CCXX_ENGINEREAD_REF(valref) readBinary((uint8*)&valref,sizeof(valref))
349 #undef CCXX_ENGINEREAD_REF
373 std::iostream& myUnderlyingStream;
383 typedef std::vector<
BaseObject*> ArchiveVector;
385 typedef std::vector<
String> ClassVector;
388 ArchiveVector myArchiveVector;
389 ArchiveMap myArchiveMap;
390 ClassVector myClassVector;
394 bool use_compression;
395 #ifndef NO_COMPRESSION
397 uint8* myCompressedDataBuffer;
398 uint8* myUncompressedDataBuffer;
399 uint8* myLastUncompressedDataRead;
493 for(
unsigned int i=0; i < ob.size(); ++i)
510 for(
uint32 i=0; i < siz; ++i)
524 for(
typename std::deque<T>::const_iterator it=ob.begin(); it != ob.end(); ++it)
541 for(
uint32 i=0; i < siz; ++i) {
555 template<
class Key,
class Value>
559 for(
typename std::map<Key,Value>::const_iterator it = ob.begin();it != ob.end();++it)
560 ar << it->first << it->second;
569 template<
class Key,
class Value>
575 for(
uint32 i=0; i < siz; ++i) {
587 template<
class x,
class y>
590 ar << ob.first << ob.second;
598 template<
class x,
class y>
601 ar >> ob.first >> ob.second;
605 #ifdef CCXX_NAMESPACES
u_int32_t uint32
Definition: config.h:147
u_int8_t uint8
Definition: config.h:143
void write(float i) THROWS(PersistException)
Definition: persist.h:311
class BaseObject *(* NewBaseObjectFunction)(void)
Definition: persist.h:111
This manages a registration to the typemanager - attempting to remove problems with the optimisers.
Definition: persist.h:130
void read(BaseObject &object) THROWS(PersistException)
reads a BaseObject into a reference overwriting the object.
void writeBinary(const uint8 *data, const uint32 size) THROWS(PersistException)
void read(uint32 &i) THROWS(PersistException)
Definition: persist.h:342
void write(int16 i) THROWS(PersistException)
Definition: persist.h:303
void write(uint32 i) THROWS(PersistException)
Definition: persist.h:306
Common C++ generic string class.
int16_t int16
Definition: config.h:144
void write(uint8 i) THROWS(PersistException)
Definition: persist.h:302
void write(const BaseObject *object) THROWS(PersistException)
writes a BaseObject from a pointer.
void write(uint16 i) THROWS(PersistException)
Definition: persist.h:304
virtual ~BaseObject()
Default destructor.
std::map< String, NewBaseObjectFunction > StringFunctionMap
Definition: persist.h:155
Engine(std::iostream &stream, EngineMode mode, bool compress=true) THROWS(PersistException)
Constructs a Persistence::Engine with the specified stream in the given mode.
void write(const std::string &str) THROWS(PersistException)
void read(uint8 &i) THROWS(PersistException)
Definition: persist.h:338
virtual bool write(Engine &archive) const
This method is used to write to the Persistence::Engine It is not equivalent to the << operator as it...
void read(std::string &str) THROWS(PersistException)
void read(int16 &i) THROWS(PersistException)
Definition: persist.h:339
int64_t int64
Definition: config.h:150
void readBinary(uint8 *data, uint32 size) THROWS(PersistException)
EngineMode
These are the modes the Persistence::Engine can work in.
Definition: persist.h:258
void read(int32 &i) THROWS(PersistException)
Definition: persist.h:341
#define __EXPORT
Definition: config.h:979
int32_t int32
Definition: config.h:146
void read(uint16 &i) THROWS(PersistException)
Definition: persist.h:340
u_int64_t uint64
Definition: config.h:151
@ modeRead
Definition: persist.h:259
void read(String &str) THROWS(PersistException)
BaseObject()
This constructor is used in serialisation processes.
void read(float &i) THROWS(PersistException)
Definition: persist.h:347
virtual bool read(Engine &archive)
This method is used to read from a Persistence::Engine It is not equivalent to the >> operator as it ...
substitute functions which may be missing in target platform libc.
static void remove(const char *name)
And this one removes a type from the managers lists.
#define CCXX_ENGINEWRITE_REF(valref)
Definition: persist.h:300
BaseObject.
Definition: persist.h:207
int8_t int8
Definition: config.h:142
#define THROWS(x)
Definition: config.h:944
#define CCXX_ENGINEREAD_REF(valref)
Definition: persist.h:336
void write(int32 i) THROWS(PersistException)
Definition: persist.h:305
void read(double &i) THROWS(PersistException)
Definition: persist.h:348
void write(const String &str) THROWS(PersistException)
GNU Common C++ exception model base classes.
static void add(const char *name, NewBaseObjectFunction construction)
This adds a new construction function to the type manager.
static BaseObject * createInstanceOf(const char *name)
This function creates a new object of the required type and returns a pointer to it.
u_int16_t uint16
Definition: config.h:145
virtual const char * getPersistenceID() const
This returns the ID of the persistent object (Its type)
__EXPORT std::ostream & operator<<(std::ostream &os, const IPV4Address &ia)
Registration(const char *name, NewBaseObjectFunction func)
This is a generic and portable string class.
Definition: string.h:81
void write(double i) THROWS(PersistException)
Definition: persist.h:312
Engine.
Definition: persist.h:253
void read(BaseObject *&object) THROWS(PersistException)
reads a BaseObject into a pointer allocating memory for the object if necessary.
This class manages the types for generation of the persistent objects.
Definition: persist.h:122