00001
00002
00003 #ifndef BoostSaveEngine_h
00004 #define BoostSaveEngine_h
00005
00006 #include <iostream>
00007
00008 #include "EngineConfig.h"
00009 #include "Serializable.h"
00010 #include "SaveEngine.h"
00011
00012
00013 #include "BIE_polymorphic_xml_oarchive.h"
00014 #include "BIE_polymorphic_xml_iarchive.h"
00015
00017 class BoostSaveEngine : public SaveEngine
00018 {
00019 public:
00021 BoostSaveEngine();
00022
00024 ~BoostSaveEngine();
00025
00027 void setOutputStream(std::ostream& o, enum EngineType t);
00028
00030 template <class T>
00031 void save(const T * obj) {
00032 (*ar) << BOOST_SERIALIZATION_NVP(obj);
00033 o->flush();
00034 }
00035
00037 boost::archive::polymorphic_oarchive* getArchive() { return ar; }
00038
00039 private:
00040 boost::archive::polymorphic_oarchive* ar;
00041 std::ostream* o;
00042
00043
00044 private:
00045 friend class boost::serialization::access;
00046 template<class Archive>
00047 void serialize(Archive & ar, const unsigned int version) {
00048 this->pre_serialize(ar, version);
00049 try {
00050 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(SaveEngine);
00051 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION;
00052 }
00053 this->post_serialize(ar, version);
00054 }
00055
00056 };
00057
00058 BIE_CLASS_TYPE_INFO(BoostSaveEngine)
00059 BIE_CLASS_EXPORT_KEY(BoostSaveEngine)
00060 #endif