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();
146 static void remove(
const char* name);
153 static BaseObject* createInstanceOf(
const char* name);
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);
224 virtual const char* getPersistenceID()
const;
231 virtual bool write(
Engine& archive)
const;
238 virtual bool read(
Engine& archive);
269 Engine(std::iostream& stream, EngineMode mode,
bool compress=
true)
THROWS (PersistException);
300 #define CCXX_ENGINEWRITE_REF(valref) writeBinary((const uint8*)&valref,sizeof(valref))
313 #undef CCXX_ENGINEWRITE_REF
315 void write(
const String& str)
THROWS (PersistException);
316 void write(
const std::string& str)
THROWS (PersistException);
319 void writeBinary(
const uint8* data,
const uint32 size)
THROWS (PersistException);
336 #define CCXX_ENGINEREAD_REF(valref) readBinary((uint8*)&valref,sizeof(valref))
349 #undef CCXX_ENGINEREAD_REF
352 void read(std::string& str)
THROWS (PersistException);
373 std::iostream& myUnderlyingStream;
378 EngineMode myOperationalMode;
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;
405 __EXPORT Engine& operator >>( Engine& ar, BaseObject &ob)
THROWS (PersistException);
407 __EXPORT Engine& operator >>( Engine& ar, BaseObject *&ob)
THROWS (PersistException);
456 __EXPORT Engine& operator >>( Engine& ar,
float& ob)
THROWS (PersistException);
461 __EXPORT Engine& operator >>( Engine& ar,
double& ob)
THROWS (PersistException);
466 __EXPORT Engine& operator >>( Engine& ar, String& ob)
THROWS (PersistException);
471 __EXPORT Engine& operator >>( Engine& ar, std::string& ob)
THROWS (PersistException);
476 __EXPORT Engine& operator >>( Engine& ar,
bool& ob)
THROWS (PersistException);
490 Engine& operator <<( Engine& ar, typename std::vector<T>
const& ob)
THROWS (PersistException)
493 for(
unsigned int i=0; i < ob.size(); ++i)
510 for(
uint32 i=0; i < siz; ++i)
521 Engine& operator <<( Engine& ar, typename std::deque<T>
const& ob)
THROWS (PersistException)
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>
556 Engine& operator <<( Engine& ar, typename std::map<Key,Value>
const & ob)
THROWS (PersistException)
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>
588 Engine& operator <<( Engine& ar, std::pair<x,y> &ob)
THROWS (PersistException)
590 ar << ob.first << ob.second;
598 template<
class x,
class y>
601 ar >> ob.first >> ob.second;
605 #ifdef CCXX_NAMESPACES
Engine.
Definition: persist.h:252
void read(uint32 &i) THROWS(PersistException)
Definition: persist.h:342
This is a generic and portable string class.
Definition: string.h:77
Common C++ generic string class.
void write(double i) THROWS(PersistException)
Definition: persist.h:312
Definition: persist.h:259
void read(uint16 &i) THROWS(PersistException)
Definition: persist.h:340
This manages a registration to the typemanager - attempting to remove problems with the optimisers...
Definition: persist.h:129
This class manages the types for generation of the persistent objects.
Definition: persist.h:121
#define __EXPORT
Definition: config.h:980
substitute functions which may be missing in target platform libc.
void read(uint8 &i) THROWS(PersistException)
Definition: persist.h:338
void read(int8 &i) THROWS(PersistException)
Definition: persist.h:337
u_int8_t uint8
Definition: config.h:143
void write(uint32 i) THROWS(PersistException)
Definition: persist.h:306
GNU Common C++ exception model base classes.
void write(uint8 i) THROWS(PersistException)
Definition: persist.h:302
BaseObject.
Definition: persist.h:206
#define THROWS(x)
Definition: config.h:945
void read(int32 &i) THROWS(PersistException)
Definition: persist.h:341
int8_t int8
Definition: config.h:142
void write(int16 i) THROWS(PersistException)
Definition: persist.h:303
std::map< String, NewBaseObjectFunction > StringFunctionMap
Definition: persist.h:155
void write(uint16 i) THROWS(PersistException)
Definition: persist.h:304
void read(int16 &i) THROWS(PersistException)
Definition: persist.h:339
#define CCXX_ENGINEREAD_REF(valref)
Definition: persist.h:336
EngineMode
These are the modes the Persistence::Engine can work in.
Definition: persist.h:258
u_int16_t uint16
Definition: config.h:145
int32_t int32
Definition: config.h:146
u_int32_t uint32
Definition: config.h:147
void write(int32 i) THROWS(PersistException)
Definition: persist.h:305
void write(int8 i) THROWS(PersistException)
Definition: persist.h:301
int64_t int64
Definition: config.h:150
__EXPORT std::ostream & operator<<(std::ostream &os, const IPV4Address &ia)
u_int64_t uint64
Definition: config.h:151
#define CCXX_ENGINEWRITE_REF(valref)
Definition: persist.h:300
void read(float &i) THROWS(PersistException)
Definition: persist.h:347
void write(float i) THROWS(PersistException)
Definition: persist.h:311
int16_t int16
Definition: config.h:144
class BaseObject *(* NewBaseObjectFunction)(void)
Definition: persist.h:111
void read(double &i) THROWS(PersistException)
Definition: persist.h:348