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 const ISProxy* proxy = dynamic_cast<const ISProxy*>(&ob);
00022 if (!proxy) {
00023 ISProxy proxy(ob.getUniqueID(), ob.getClassName());
00024 IOManagerFile::instance().write(ob);
00025 IOManagerIS::write(proxy, params);
00026 } else {
00027 IOManagerIS::write(*proxy, params);
00028 }
00029 }
00030
00031 void IOManagerISProxy::writeImpl(OStream& out, const Streamable& ob, bool bWriteClassName) const throw(LogicError, IoError) {
00032
00033 const ISProxy* proxy = dynamic_cast<const ISProxy*>(&ob);
00034 if (proxy) {
00035 if (bWriteClassName) writeClassName(out, "Sct::ISProxy::ISProxy");
00036 Streamer& proxyStreamer = getStreamer("Sct::ISProxy::ISProxy");
00037 proxyStreamer.write(out, ob, *this);
00038 } else {
00039 IOManagerIS::writeImpl(out, ob, bWriteClassName);
00040 }
00041 }
00042
00043 }
00044 }