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