00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef OST_IO_SURFACE_IO_PLUGIN_H
00020 #define OST_IO_SURFACE_IO_PLUGIN_H
00021
00022 #include <boost/shared_ptr.hpp>
00023 #include <boost/filesystem/operations.hpp>
00024 #include <ost/io/module_config.hh>
00025 #include <ost/mol/surface.hh>
00026
00027 namespace ost { namespace io {
00028
00029 class DLLEXPORT_OST_IO SurfaceIOHandler {
00030 public:
00031 virtual ~SurfaceIOHandler() {}
00032 virtual void Import(mol::SurfaceHandle& surf, const boost::filesystem::path& loc) = 0;
00033 virtual void Export(const mol::SurfaceHandle& ent, const boost::filesystem::path& loc) const = 0;
00034 };
00035
00036 typedef boost::shared_ptr<SurfaceIOHandler> SurfaceIOHandlerPtr;
00037
00038 class DLLEXPORT_OST_IO SurfaceIOHandlerFactoryBase {
00039 public:
00040 virtual ~SurfaceIOHandlerFactoryBase() {}
00041 virtual bool ProvidesImport(const boost::filesystem::path& loc, const String& type) const = 0;
00042 virtual bool ProvidesExport(const boost::filesystem::path& loc, const String& type) const = 0;
00043 virtual SurfaceIOHandlerPtr Create() const = 0;
00044 virtual String GetFormatName() const =0;
00045 virtual String GetFormatDescription() const =0;
00046 };
00047
00048 typedef boost::shared_ptr<SurfaceIOHandlerFactoryBase> SurfaceIOHandlerFactoryBasePtr;
00049
00050 template <class HANDLER>
00051 class SurfaceIOHandlerFactory: public SurfaceIOHandlerFactoryBase
00052 {
00053 virtual bool ProvidesImport(const boost::filesystem::path& loc, const String& type) const {
00054 return HANDLER::ProvidesImport(loc,type);
00055 }
00056
00057 virtual bool ProvidesExport(const boost::filesystem::path& loc, const String& type) const {
00058 return HANDLER::ProvidesExport(loc,type);
00059 }
00060
00061 virtual SurfaceIOHandlerPtr Create() const {
00062 return SurfaceIOHandlerPtr(new HANDLER);
00063 }
00064
00065 virtual String GetFormatName() const {
00066 return HANDLER::GetFormatName();
00067 }
00068
00069 virtual String GetFormatDescription() const {
00070 return HANDLER::GetFormatDescription();
00071 }
00072
00073 };
00074
00075
00076 }}
00077
00078 #endif