00001 #include "IOManagerISProxy.h"
00002 #include "ISProxy.h"
00003 #include "../File/IOManagerFile.h"
00004 #include "../OStream.h"
00005 #include "../Streamer.h"
00006
00007 using namespace Sct::File;
00008
00009 namespace Sct {
00010 namespace ISProxy {
00011
00012 IOManagerISProxy::IOManagerISProxy() throw() {
00013 }
00014
00015 IOManagerISProxy& IOManagerISProxy::instance() {
00016 static IOManagerISProxy theInstance;
00017 return theInstance;
00018 }
00019
00020 void IOManagerISProxy::write(const Serializable& ob, const IOParams* params) const throw(LogicError, IoError) {
00021 ISProxy proxy(ob.getUniqueID(), ob.getClassName());
00022 IOManagerFile::instance().write(ob);
00023 IOManagerIS::write(proxy, params);
00024 }
00025
00026 void IOManagerISProxy::writeImpl(OStream& out, const Streamable& ob, bool bWriteClassName) const throw(LogicError, IoError) {
00027
00028 const ISProxy* proxy = dynamic_cast<const ISProxy*>(&ob);
00029 if (proxy) {
00030 if (bWriteClassName) writeClassName(out, "Sct::ISProxy::ISProxy");
00031 Streamer& proxyStreamer = getStreamer("Sct::ISProxy::ISProxy");
00032 proxyStreamer.write(out, ob, *this);
00033 } else {
00034 IOManagerIS::writeImpl(out, ob, bWriteClassName);
00035 }
00036 }
00037
00038 }
00039 }