5#ifndef BALL_CONCEPT_PERSISTENCEMANAGER_H
6#define BALL_CONCEPT_PERSISTENCEMANAGER_H
8#ifndef BALL_COMMON_RTTI_H
12#ifndef BALL_DATATYPE_HASHMAP_H
16#ifndef BALL_DATATYPE_STRINGHASHMAP_H
20#ifndef BALL_DATATYPE_HASHSET_H
24#ifndef BALL_CONCEPT_PERSISTENTOBJECT_H
28#ifndef BALL_COMMON_GLOBAL_H
35#include <boost/shared_ptr.hpp>
37#define BALL_WRITE_PRIMITIVE_MEMBER(pm,x) pm.writePrimitive(x,#x)
38#define BALL_READ_PRIMITIVE_MEMBER(pm,x) pm.readPrimitive(x,#x)
91 typedef void * (*CreateMethod) ();
247 template <
typename T>
248 bool checkObjectHeader(
const T& ,
const char* name = 0);
262 template <
typename T>
263 void writeObjectHeader(
const T*
object,
const char* name = 0);
281 template <
typename T>
282 void writePrimitive(
const T& t,
const char* name);
290 template <
typename T>
291 bool readPrimitive(T& t,
const char* name);
298 template <
typename T>
299 void writeStorableObject(
const T& t,
const char* name);
307 template <
typename T>
308 bool readStorableObject(T& t,
const char* name);
315 template <
typename T>
316 void writeObjectPointer(
const T*
object,
const char* name);
324 template <
typename T>
325 bool readObjectPointer(T*&
object,
const char* name);
334 template <
typename T>
335 bool readObjectSmartPointer(boost::shared_ptr<T>& s_ptr,
const char* name);
342 template <
typename T>
343 void writeObjectReference(
const T&
object,
const char* name);
351 template <
typename T>
352 bool readObjectReference(T&
object,
const char* name);
361 template <
typename T>
362 void writeObjectArray(
const T* array,
const char* name,
Size size);
371 template <
typename T>
372 bool readObjectArray(
const T* array,
const char* name,
Size& size);
381 template <
typename T>
382 void writeObjectPointerArray(T** arr,
const char* name,
const Size size);
391 template <
typename T>
392 bool readObjectPointerArray(T** array,
const char* name,
Size& size);
490 const char* name) = 0;
497 const char* name) = 0;
515 const char* name) = 0;
523 const char* name) = 0;
541 const char* name) = 0;
550 const char* name) = 0;
558 const char* name) = 0;
567 const char* name) = 0;
576 const char* name,
Size size) = 0;
586 const char* name,
Size& size) = 0;
642 virtual void put(
const char c) = 0;
658 virtual void put(
const bool b) = 0;
670 virtual void put(
const string& s) = 0;
684 virtual void get(
char& c) = 0;
700 virtual void get(
bool& b) = 0;
712 virtual void get(
string& s) = 0;
799 template <
typename T>
804 return checkHeader(RTTI::getStreamName<T>(), name, ptr);
808 template <
typename T>
817 template <
typename T>
826 template <
typename T>
839 template <
typename T>
848 template <
typename T>
856 template <
typename T>
870 template <
typename T>
883 pointer_list_.push_back(std::make_pair((
void**)&
object, ptr));
891 template <
typename T>
910 template <
typename T>
925 template <
typename T>
945 pointer_list_.push_back(std::make_pair((
void**)&
object, ptr));
951 template <
typename T>
965 template <
typename T>
967 (
const T* array,
const char* name,
Size& size)
974 T* ptr =
const_cast<T*
>(array);
984 template <
typename T>
986 (T** arr,
const char* name,
const Size size)
1005 template <
typename T>
1015 for (
Position i = 0; i < size; i++)
1021 pointer_list_.push_back(std::make_pair((
void**)&(array[i]), ptr));
1030#ifndef BALL_NO_INLINE_FUNCTIONS
1031# include <BALL/CONCEPT/persistenceManager.iC>
BALL_POINTERSIZEUINT_TYPE PointerSizeUInt
BALL_ULONG64_TYPE LongSize
virtual void get(Size &s)=0
virtual void get(Byte &b)=0
HashMap< LongSize, void * > PointerMap
std::list< const PersistentObject * > ObjectList
virtual void finalizeInputStream()
virtual void get(char &c)=0
virtual bool checkTrailer(const char *name=0)=0
PersistenceManager(const PersistenceManager &pm)
virtual bool checkStorableHeader(const char *type_name, const char *name)=0
virtual void put(const bool b)=0
virtual void writeStreamTrailer()=0
SmartPointerList smart_pointer_list_
PersistenceManager(::std::istream &is, ::std::ostream &os)
virtual void writeStorableTrailer()=0
virtual ~PersistenceManager()
bool checkObjectTrailer(const char *name=0)
void writeObjectReference(const T &object, const char *name)
virtual void put(const Size p)=0
void addPointerPair_(LongSize old_ptr, void *new_ptr)
virtual void writeObjectPointerHeader(const char *type_name, const char *name)=0
virtual void get(string &s)=0
bool readObjectReference(T &object, const char *name)
virtual void writeObjectReferenceHeader(const char *type_name, const char *name)=0
void writeObjectHeader(const T *object, const char *name=0)
virtual void get(Real &f)=0
bool checkObjectHeader(const char *type_name)
HashSet< const PersistentObject * > ObjectSet
virtual void put(const char c)=0
virtual void get(DoubleReal &d)=0
virtual void get(Index &s)=0
bool checkObjectHeader(const T &, const char *name=0)
virtual void put(const LongSize p)=0
virtual bool checkPrimitiveTrailer()=0
virtual bool checkObjectPointerArrayHeader(const char *type_name, const char *name, Size &size)=0
virtual void setIstream(::std::istream &s)
PointerList pointer_list_
virtual void * createObject(String signature) const
PersistenceManager(::std::istream &is)
virtual void get(LongSize &p)=0
virtual void put(const DoubleReal d)=0
void writeObjectTrailer(const char *name=0)
virtual void put(const Index i)=0
virtual void finalizeOutputStream()
virtual bool checkStreamTrailer()=0
virtual void put(const Byte c)=0
virtual void setOstream(::std::ostream &s)
PersistenceManager(::std::ostream &os)
bool readObjectPointerArray(T **array, const char *name, Size &size)
virtual void writeObjectPointerArrayTrailer()=0
PersistentObject * readObject()
ObjectList object_out_needed_
virtual bool checkHeader(const char *type_name, const char *name, LongSize &ptr)=0
virtual void registerClass(String signature, const CreateMethod m)
virtual void writeObjectPointerArrayHeader(const char *type_name, const char *name, Size size)=0
virtual void put(const Real f)=0
virtual Size getNumberOfClasses() const
void writeObjectPointer(const T *object, const char *name)
virtual void initializeOutputStream()
virtual bool checkObjectReferenceHeader(const char *type_name, const char *name)=0
bool readPrimitive(T &t, const char *name)
bool readObjectPointer(T *&object, const char *name)
virtual bool checkName(const char *name)=0
StringHashMap< CreateMethod > create_methods_
virtual void writeStorableHeader(const char *type_name, const char *name)=0
virtual bool checkPrimitiveHeader(const char *type_name, const char *name)=0
bool readObjectArray(const T *array, const char *name, Size &size)
virtual void writeName(const char *name)=0
virtual bool checkObjectPointerArrayTrailer()=0
virtual void writeTrailer(const char *name=0)=0
void writePrimitive(const T &t, const char *name)
void writeObjectPointerArray(T **arr, const char *name, const Size size)
bool readStorableObject(T &t, const char *name)
virtual void writeHeader(const char *type_name, const char *name, LongSize ptr)=0
void writeObjectArray(const T *array, const char *name, Size size)
virtual void initializeInputStream()
bool readObjectSmartPointer(boost::shared_ptr< T > &s_ptr, const char *name)
virtual bool checkObjectPointerHeader(const char *type_name, const char *name)=0
virtual bool getObjectHeader(String &type_name, LongSize &ptr)=0
std::list< std::pair< boost::shared_ptr< PersistentObject > *, LongSize > > SmartPointerList
virtual void writePrimitiveHeader(const char *type_name, const char *name)=0
virtual void writeStreamHeader()=0
virtual bool checkStreamHeader()=0
std::list< std::pair< void **, LongSize > > PointerList
virtual void put(const string &s)=0
virtual bool checkStorableTrailer()=0
virtual void writePrimitiveTrailer()=0
virtual void get(bool &b)=0
void registerKernelClasses_()
void writeStorableObject(const T &t, const char *name)
HashMap class based on the STL map (containing serveral convenience functions)
std::pair< Iterator, bool > insert(const ValueType &item)
bool has(const Key &key) const