00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef OST_IO_ENTITY_IO_PLUGIN_H
00020 #define OST_IO_ENTITY_IO_PLUGIN_H
00021
00022 #include <boost/shared_ptr.hpp>
00023 #include <boost/filesystem/operations.hpp>
00024
00025
00026 #include <ost/io/module_config.hh>
00027 #include <ost/io/io_utils.hh>
00028
00029 namespace ost {
00030
00031 namespace mol {
00032
00033 class EntityView;
00034 class EntityHandle;
00035
00036 }
00037
00038 namespace io {
00039
00041 class DLLEXPORT_OST_IO EntityIOHandler {
00042 public:
00043 virtual ~EntityIOHandler() {}
00044
00045
00046
00047
00048
00049 virtual void Import(mol::EntityHandle& ent,
00050 const boost::filesystem::path& loc)=0;
00051
00052 virtual void Export(const mol::EntityView& ent,
00053 const boost::filesystem::path& loc) const = 0;
00054
00055 virtual void Import(mol::EntityHandle& ent,
00056 std::istream& stream)=0;
00057
00058 virtual void Export(const mol::EntityView& ent,
00059 std::ostream& stream) const=0;
00060 virtual bool RequiresProcessor() const=0;
00061 };
00062
00063 typedef boost::shared_ptr<EntityIOHandler> EntityIOHandlerP;
00064
00065
00067 class DLLEXPORT_OST_IO EntityIOHandlerFactoryBase {
00068 public:
00069 virtual ~EntityIOHandlerFactoryBase() {}
00070 virtual bool ProvidesImport(const boost::filesystem::path& loc, const String& type) const = 0;
00071 virtual bool ProvidesExport(const boost::filesystem::path& loc, const String& type) const = 0;
00072 virtual EntityIOHandlerP Create() const = 0;
00073 virtual String GetFormatName() const =0;
00074 virtual String GetFormatDescription() const =0;
00075 };
00076
00077 typedef boost::shared_ptr<EntityIOHandlerFactoryBase> EntityIOHandlerFactoryBaseP;
00078
00079 template <class HANDLER>
00080 class EntityIOHandlerFactory: public EntityIOHandlerFactoryBase
00081 {
00082 virtual bool ProvidesImport(const boost::filesystem::path& loc, const String& type) const {
00083 return HANDLER::ProvidesImport(loc,type);
00084 }
00085
00086 virtual bool ProvidesExport(const boost::filesystem::path& loc, const String& type) const {
00087 return HANDLER::ProvidesExport(loc,type);
00088 }
00089
00090 virtual String GetFormatName() const {
00091 return HANDLER::GetFormatName();
00092 }
00093
00094 virtual String GetFormatDescription() const {
00095 return HANDLER::GetFormatDescription();
00096 }
00097
00098 virtual EntityIOHandlerP Create() const {
00099 return EntityIOHandlerP(new HANDLER);
00100 }
00101 };
00102
00103
00104
00105 }}
00106
00107 #endif