00001
00002
00003 #ifndef CLISaveManager_h
00004 #define CLISaveManager_h
00005
00006 #include <fstream>
00007
00008 #include "EngineConfig.h"
00009 #include "CLIUserState.h"
00010 #include "BoostSaveEngine.h"
00011 #include "Backend.h"
00012 #include "FileBackend.h"
00013 #include "SaveManager.h"
00014
00023 class CLISaveManager : public SaveManager
00024 {
00025 public:
00027 CLISaveManager(CLIUserState *userState,
00028 enum EngineType et, enum BackendType bt);
00029
00031 ~CLISaveManager();
00032
00034 void save();
00035
00037 Backend * getBackend();
00038
00040 void setComment(const string& comment)
00041 {
00042 userState->getMetaInfo().setComment(comment);
00043 }
00044
00045 private:
00046 CLIUserState * userState;
00047 Backend * backend;
00048
00049
00050 BoostSaveEngine * saveEngine;
00051 enum EngineType et;
00052 enum BackendType bt;
00053
00054 protected:
00056 CLISaveManager() { saveEngine = NULL; }
00057
00058 private:
00059 friend class boost::serialization::access;
00060 template<class Archive>
00061 void save(Archive & ar, const unsigned int version) const {
00062 ar << BOOST_SERIALIZATION_BASE_OBJECT_NVP(SaveManager);
00063 try {
00064 ar << BOOST_SERIALIZATION_NVP(userState);
00065 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION;
00066 }
00067 ar << BOOST_SERIALIZATION_NVP(et);
00068 ar << BOOST_SERIALIZATION_NVP(bt);
00069 }
00070
00071 template<class Archive>
00072 void load(Archive & ar, const unsigned int version) {
00073 ar >> BOOST_SERIALIZATION_BASE_OBJECT_NVP(SaveManager);
00074 try {
00075 ar >> BOOST_SERIALIZATION_NVP(userState);
00076 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION;
00077 }
00078 ar >> BOOST_SERIALIZATION_NVP(et);
00079 ar >> BOOST_SERIALIZATION_NVP(bt);
00080
00081 switch(bt) {
00082 case BACKEND_FILE:
00083 this->backend = new FileBackend();
00084 break;
00085 default:
00086 throw ArchiveException("No such BackendType.",__FILE__,__LINE__);
00087 }
00088
00089 switch(et) {
00090 case BOOST_TEXT:
00091 case BOOST_XML:
00092 case BOOST_BINARY:
00093
00094
00095 this->saveEngine = new BoostSaveEngine();
00096 break;
00097 default:
00098 throw ArchiveException("No such EngineType.", __FILE__, __LINE__);
00099 }
00100 }
00101
00102 BOOST_SERIALIZATION_SPLIT_MEMBER();
00103 };
00104
00105 BIE_CLASS_TYPE_INFO(CLISaveManager)
00106
00107 #endif