44#ifndef CCXX_PERSIST_H_
45#define CCXX_PERSIST_H_
51#ifndef CCXX_EXCEPTIONS_H_
55#ifndef CCXX_MISSING_H_
79#define NS_PREFIX ost::
85#ifdef COMMON_STD_EXCEPTION
87class __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();
111typedef class BaseObject* (*NewBaseObjectFunction) (void);
141 static void add(
const char* name, NewBaseObjectFunction construction);
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) {
555template<
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;
569template<
class Key,
class Value>
575 for(
uint32 i=0; i < siz; ++i) {
587template<
class x,
class y>
590 ar << ob.first << ob.second;
598template<
class x,
class y>
601 ar >> ob.first >> ob.second;
605#ifdef CCXX_NAMESPACES
BaseObject.
Definition persist.h:207
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...
BaseObject()
This constructor is used in serialisation processes.
virtual bool read(Engine &archive)
This method is used to read from a Persistence::Engine It is not equivalent to the >> operator as it ...
virtual const char * getPersistenceID() const
This returns the ID of the persistent object (Its type)
virtual ~BaseObject()
Default destructor.
Engine.
Definition persist.h:253
void write(const BaseObject *object) THROWS(PersistException)
writes a BaseObject from a pointer.
void read(String &str) THROWS(PersistException)
void write(float i) THROWS(PersistException)
Definition persist.h:311
void read(std::string &str) THROWS(PersistException)
void read(double &i) THROWS(PersistException)
Definition persist.h:348
void writeBinary(const uint8 *data, const uint32 size) THROWS(PersistException)
void write(uint8 i) THROWS(PersistException)
Definition persist.h:302
Engine(std::iostream &stream, EngineMode mode, bool compress=true) THROWS(PersistException)
Constructs a Persistence::Engine with the specified stream in the given mode.
void read(uint32 &i) THROWS(PersistException)
Definition persist.h:342
void read(uint8 &i) THROWS(PersistException)
Definition persist.h:338
void write(double i) THROWS(PersistException)
Definition persist.h:312
void read(BaseObject *&object) THROWS(PersistException)
reads a BaseObject into a pointer allocating memory for the object if necessary.
void write(int32 i) THROWS(PersistException)
Definition persist.h:305
void readBinary(uint8 *data, uint32 size) THROWS(PersistException)
EngineMode
These are the modes the Persistence::Engine can work in.
Definition persist.h:258
@ modeRead
Definition persist.h:259
void read(BaseObject &object) THROWS(PersistException)
reads a BaseObject into a reference overwriting the object.
void read(uint16 &i) THROWS(PersistException)
Definition persist.h:340
void read(int16 &i) THROWS(PersistException)
Definition persist.h:339
void write(const String &str) THROWS(PersistException)
void write(uint16 i) THROWS(PersistException)
Definition persist.h:304
void read(int8 &i) THROWS(PersistException)
Definition persist.h:337
void write(uint32 i) THROWS(PersistException)
Definition persist.h:306
void write(int16 i) THROWS(PersistException)
Definition persist.h:303
void read(int32 &i) THROWS(PersistException)
Definition persist.h:341
void read(float &i) THROWS(PersistException)
Definition persist.h:347
void write(int8 i) THROWS(PersistException)
Definition persist.h:301
void write(const std::string &str) THROWS(PersistException)
This is a generic and portable string class.
Definition string.h:81
This manages a registration to the typemanager - attempting to remove problems with the optimisers.
Definition persist.h:130
Registration(const char *name, NewBaseObjectFunction func)
This class manages the types for generation of the persistent objects.
Definition persist.h:122
static BaseObject * createInstanceOf(const char *name)
This function creates a new object of the required type and returns a pointer to it.
static void remove(const char *name)
And this one removes a type from the managers lists.
std::map< String, NewBaseObjectFunction > StringFunctionMap
Definition persist.h:155
static void add(const char *name, NewBaseObjectFunction construction)
This adds a new construction function to the type manager.
u_int8_t uint8
Definition config.h:143
int64_t int64
Definition config.h:150
u_int64_t uint64
Definition config.h:151
u_int32_t uint32
Definition config.h:147
#define THROWS(x)
Definition config.h:1010
int16_t int16
Definition config.h:144
int8_t int8
Definition config.h:142
u_int16_t uint16
Definition config.h:145
int32_t int32
Definition config.h:146
#define __EXPORT
Definition config.h:1045
GNU Common C++ exception model base classes.
substitute functions which may be missing in target platform libc.
__EXPORT std::ostream & operator<<(std::ostream &os, const IPV4Address &ia)
#define CCXX_ENGINEWRITE_REF(valref)
Definition persist.h:300
#define CCXX_ENGINEREAD_REF(valref)
Definition persist.h:336
Common C++ generic string class.