00001 #ifndef SCT_STREAMERVERSIONED_IOMANAGERSTREAMERVERSIONED_H 00002 #define SCT_STREAMERVERSIONED_IOMANAGERSTREAMERVERSIONED_H 00003 00004 #include "../File/IOManagerFile.h" 00005 #include "../IoExceptions.h" 00006 #include "../LogicErrors.h" 00007 #include <iostream> 00008 #include <boost/thread.hpp> 00009 00010 namespace Sct { 00011 namespace Archive { 00022 class IOManagerStreamerVersioned : public IOManager { 00023 public: 00028 virtual Streamer& getStreamer(const string& className) const; 00032 virtual void readImpl(IStream& in, Streamable& ob, bool bReadClassName) const; 00036 virtual shared_ptr<Streamable> readImpl(IStream& in) const; 00040 virtual shared_ptr<Streamable> readImpl(IStream& in, const std::string& className) const; 00044 virtual void writeImpl(OStream& out, const Streamable& ob, bool bWriteClassName) const; 00045 00049 virtual void readImpl(IStream& in, Streamable& ob, const std::string& className) const; 00053 virtual void writeImpl(OStream& out, const Streamable& ob, const std::string& className) const; 00054 00055 00056 protected: 00057 IOManagerStreamerVersioned(); 00058 00062 virtual void writeClassName(OStream&, const string& classname) const; 00067 virtual std::string readClassName(IStream&) const; 00072 boost::recursive_mutex& getMutex() const; 00076 void setReadMode(bool mode) const; 00080 bool readMode() const; 00081 typedef std::map<std::string, unsigned> VersionMap; 00082 static VersionMap& getReadVersionMap(); 00083 private: 00084 mutable boost::recursive_mutex m_access; 00085 mutable bool m_read_mode; 00086 }; 00087 } 00088 } 00089 #endif //SCT_STREAMERVERSIONED_IOMANAGERSTREAMERVERSIONED_H