00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef OST_IO_PROFILE_IO_HANDLER_HH
00025 #define OST_IO_PROFILE_IO_HANDLER_HH
00026
00027 #include <boost/shared_ptr.hpp>
00028 #include <boost/filesystem/operations.hpp>
00029
00030 #include <ost/io/module_config.hh>
00031 #include <ost/io/io_utils.hh>
00032 #include <ost/seq/profile_handle.hh>
00033
00034 namespace ost { namespace io {
00035
00037 class DLLEXPORT_OST_IO ProfileIOHandler {
00038 public:
00039 virtual ~ProfileIOHandler() {}
00040
00041 virtual void Import(seq::ProfileHandle& prof,
00042 const boost::filesystem::path& loc) = 0;
00043
00044 virtual void Export(const seq::ProfileHandle& prof,
00045 const boost::filesystem::path& loc) const = 0;
00046 };
00047
00048 typedef boost::shared_ptr<ProfileIOHandler> ProfileIOHandlerPtr;
00049
00051 class DLLEXPORT_OST_IO ProfileIOHandlerFactoryBase {
00052 public:
00053 virtual ~ProfileIOHandlerFactoryBase() {}
00054 virtual bool ProvidesImport(const boost::filesystem::path& loc,
00055 const String& format="auto") const = 0;
00056 virtual bool ProvidesExport(const boost::filesystem::path& loc,
00057 const String& format="auto") const = 0;
00058 virtual ProfileIOHandlerPtr Create() const = 0;
00059 virtual String GetFormatName() const =0;
00060 virtual String GetFormatDescription() const =0;
00061 };
00062
00063 typedef boost::shared_ptr<ProfileIOHandlerFactoryBase> ProfileIOHandlerFactoryBasePtr;
00064
00065 template <class HANDLER>
00066 class ProfileIOHandlerFactory: public ProfileIOHandlerFactoryBase {
00067 virtual bool ProvidesImport(const boost::filesystem::path& loc,
00068 const String& format="auto") const {
00069 return HANDLER::ProvidesImport(loc, format);
00070 }
00071
00072 virtual bool ProvidesExport(const boost::filesystem::path& loc,
00073 const String& format="auto") const {
00074 return HANDLER::ProvidesExport(loc, format);
00075 }
00076
00077 virtual ProfileIOHandlerPtr Create() const {
00078 return ProfileIOHandlerPtr(new HANDLER);
00079 }
00080
00081 virtual String GetFormatName() const {
00082 return HANDLER::GetFormatName();
00083 }
00084
00085 virtual String GetFormatDescription() const {
00086 return HANDLER::GetFormatDescription();
00087 }
00088
00089 };
00090
00091 }}
00092
00093 #endif