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) ();
171 virtual void* createObject(
String signature)
const;
177 virtual Size getNumberOfClasses()
const;
182 virtual void setOstream(::std::ostream& s);
187 virtual void setIstream(::std::istream& s);
247 template <
typename T>
248 bool checkObjectHeader(
const T& ,
const char* name = 0);
254 bool checkObjectHeader(
const char* type_name);
262 template <
typename T>
263 void writeObjectHeader(
const T*
object,
const char* name = 0);
268 void writeObjectTrailer(
const char* name = 0);
273 bool checkObjectTrailer(
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);
414 virtual void writeHeader(
const char* type_name,
const char* name,
426 virtual bool checkHeader(
const char* type_name,
const char* name,
432 virtual void writeTrailer(
const char* name = 0) = 0;
439 virtual bool checkTrailer(
const char* name = 0) = 0;
444 virtual void writeStreamHeader() = 0;
449 virtual void writeStreamTrailer() = 0;
455 virtual bool checkStreamHeader() = 0;
461 virtual bool checkStreamTrailer() = 0;
469 virtual bool getObjectHeader(
String& type_name,
LongSize& ptr) = 0;
475 virtual void writeName(
const char* name) = 0;
482 virtual bool checkName(
const char* name) = 0;
489 virtual void writeStorableHeader(
const char* type_name,
490 const char* name) = 0;
496 virtual bool checkStorableHeader(
const char* type_name,
497 const char* name) = 0;
501 virtual void writeStorableTrailer() = 0;
507 virtual bool checkStorableTrailer() = 0;
514 virtual void writePrimitiveHeader(
const char* type_name,
515 const char* name) = 0;
522 virtual bool checkPrimitiveHeader(
const char* type_name,
523 const char* name) = 0;
527 virtual void writePrimitiveTrailer() = 0;
533 virtual bool checkPrimitiveTrailer() = 0;
540 virtual void writeObjectPointerHeader(
const char* type_name,
541 const char* name) = 0;
549 virtual bool checkObjectPointerHeader(
const char* type_name,
550 const char* name) = 0;
557 virtual void writeObjectReferenceHeader(
const char* type_name,
558 const char* name) = 0;
566 virtual bool checkObjectReferenceHeader(
const char* type_name,
567 const char* name) = 0;
575 virtual void writeObjectPointerArrayHeader(
const char* type_name,
576 const char* name,
Size size) = 0;
585 virtual bool checkObjectPointerArrayHeader(
const char* type_name,
586 const char* name,
Size& size) = 0;
591 virtual void writeObjectPointerArrayTrailer() = 0;
597 virtual bool checkObjectPointerArrayTrailer() = 0;
602 virtual void initializeOutputStream();
607 virtual void finalizeOutputStream();
612 virtual void initializeInputStream();
617 virtual void finalizeInputStream();
642 virtual void put(
const char c) = 0;
646 virtual void put(
const Byte c) = 0;
650 virtual void put(
const Index i) = 0;
654 virtual void put(
const Size p) = 0;
658 virtual void put(
const bool b) = 0;
662 virtual void put(
const Real f) = 0;
670 virtual void put(
const string& s) = 0;
674 virtual void put(
const LongSize p) = 0;
684 virtual void get(
char&
c) = 0;
688 virtual void get(
Byte& b) = 0;
692 virtual void get(
Index& s) = 0;
696 virtual void get(
Size& s) = 0;
700 virtual void get(
bool& b) = 0;
704 virtual void get(
Real& f) = 0;
712 virtual void get(
string& s) = 0;
725 void registerKernelClasses_();
729 void addPointerPair_(
LongSize old_ptr,
void* new_ptr);
734 void addNeededObjects_();
738 bool updatePointers_();
799 template <
typename T>
804 return checkHeader(RTTI::getStreamName<T>(), name, ptr);
808 template <
typename T>
812 object_out_.insert(
object);
813 writeHeader(RTTI::getStreamName<T>(), name, (
LongSize)reinterpret_cast<PointerSizeUInt>(
object));
817 template <
typename T>
820 writePrimitiveHeader(RTTI::getStreamName<T>(), name);
822 writePrimitiveTrailer();
826 template <
typename T>
829 if (!checkPrimitiveHeader(RTTI::getStreamName<T>(), name))
835 return checkPrimitiveTrailer();
839 template <
typename T>
842 writeStorableHeader(RTTI::getStreamName<T>(), name);
844 writeStorableTrailer();
848 template <
typename T>
851 return (checkStorableHeader(RTTI::getStreamName<T>(), name)
852 && t.read(*
this) && checkStorableTrailer());
856 template <
typename T>
859 if (
object != 0 && !object_out_.has(
object))
861 object_out_needed_.push_back(
object);
864 writeObjectPointerHeader(RTTI::getStreamName<T>(), name);
865 put(static_cast<LongSize>(reinterpret_cast<PointerSizeUInt>(
object)));
866 writePrimitiveTrailer();
870 template <
typename T>
873 if (!checkObjectPointerHeader(RTTI::getStreamName<T>(), name))
883 pointer_list_.push_back(std::make_pair((
void**)&
object, ptr));
888 return checkPrimitiveTrailer();
891 template <
typename T>
894 if (!checkObjectPointerHeader(RTTI::getStreamName<T>(), name))
904 smart_pointer_list_.push_back(std::make_pair((boost::shared_ptr<PersistentObject>*)&s_ptr, (
LongSize)((
PersistentObject*)ptr)));
907 return checkPrimitiveTrailer();
910 template <
typename T>
914 if (&
object != 0 && !object_out_.has(&
object))
916 object_out_needed_.push_back(&
object);
919 writeObjectReferenceHeader(RTTI::getStreamName<T>(), name);
921 writePrimitiveTrailer();
925 template <
typename T>
928 if (!checkObjectReferenceHeader(RTTI::getStreamName<T>(), name))
945 pointer_list_.push_back(std::make_pair((
void**)&
object, ptr));
948 return checkPrimitiveTrailer();
951 template <
typename T>
955 writeObjectPointerArrayHeader(RTTI::getStreamName<T>(), name, size);
962 writeObjectPointerArrayTrailer();
965 template <
typename T>
967 (
const T* array,
const char* name,
Size& size)
969 if (!checkObjectPointerArrayHeader(RTTI::getStreamName<T>(), name, size))
974 T* ptr =
const_cast<T*
>(array);
980 bool result = checkObjectPointerArrayTrailer();
984 template <
typename T>
986 (T** arr,
const char* name,
const Size size)
988 writeObjectPointerArrayHeader(RTTI::getStreamName<T>(), name, size);
994 put(static_cast<LongSize>(reinterpret_cast<PointerSizeUInt>(ptr)));
995 if (ptr != 0 && !object_out_.has(ptr))
997 object_out_needed_.push_back(ptr);
1001 writeObjectPointerArrayTrailer();
1005 template <
typename T>
1009 if (!checkObjectPointerArrayHeader(RTTI::getStreamName<T>(), name, size))
1015 for (
Position i = 0; i < size; i++)
1021 pointer_list_.push_back(std::make_pair((
void**)&(array[i]), ptr));
1027 return checkObjectPointerArrayTrailer();
1030 #ifndef BALL_NO_INLINE_FUNCTIONS 1031 # include <BALL/CONCEPT/persistenceManager.iC> 1036 #endif // BALL_CONCEPT_PERSISTENCEMANAGER_H void writeObjectHeader(const T *object, const char *name=0)
Model *(* CreateMethod)(const QSARData &q)
void writeStorableObject(const T &t, const char *name)
bool readObjectPointer(T *&object, const char *name)
SmartPointerList smart_pointer_list_
BALL_POINTERSIZEUINT_TYPE PointerSizeUInt
void writeObjectArray(const T *array, const char *name, Size size)
std::list< const PersistentObject * > ObjectList
std::istream & operator>>(std::istream &is, TRegularData1D< ValueType > &grid)
Input operator.
PointerList pointer_list_
bool readObjectReference(T &object, const char *name)
bool readStorableObject(T &t, const char *name)
std::list< std::pair< void **, LongSize > > PointerList
BALL_EXPORT std::ostream & operator<<(std::ostream &os, const Exception::GeneralException &e)
bool readPrimitive(T &t, const char *name)
void writePrimitive(const T &t, const char *name)
BALL_EXTERN_VARIABLE const double c
StringHashMap< CreateMethod > create_methods_
bool readObjectArray(const T *array, const char *name, Size &size)
bool readObjectPointerArray(T **array, const char *name, Size &size)
void writeObjectPointerArray(T **arr, const char *name, const Size size)
BALL_ULONG64_TYPE LongSize
bool readObjectSmartPointer(boost::shared_ptr< T > &s_ptr, const char *name)
void writeObjectReference(const T &object, const char *name)
-*- Mode: C++; tab-width: 2; -*-
ObjectList object_out_needed_
std::list< std::pair< boost::shared_ptr< PersistentObject > *, LongSize > > SmartPointerList
HashMap< LongSize, void * > PointerMap
bool checkObjectHeader(const T &, const char *name=0)
HashSet< const PersistentObject * > ObjectSet
void writeObjectPointer(const T *object, const char *name)