00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef OST_IO_SEQUENCE_IO_HANDLER_HH
00020 #define OST_IO_SEQUENCE_IO_HANDLER_HH
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/seq/sequence_list.hh>
00028 #include <ost/io/io_utils.hh>
00029
00030 namespace ost { namespace io {
00031
00033 class DLLEXPORT_OST_IO SequenceIOHandler {
00034 public:
00035 virtual ~SequenceIOHandler() {}
00036
00037
00038 virtual void Import(seq::SequenceList& sequences,
00039 const boost::filesystem::path& loc) = 0;
00040
00041 virtual void Export(const seq::ConstSequenceList& ent,
00042 const boost::filesystem::path& loc) const = 0;
00043
00044 virtual void Import(seq::SequenceList& ent,
00045 std::istream& instream)=0;
00046
00047 virtual void Export(const seq::ConstSequenceList& ent,
00048 std::ostream& ostream) const=0;
00049 };
00050
00051 typedef boost::shared_ptr<SequenceIOHandler> SequenceIOHandlerPtr;
00052
00053
00055 class DLLEXPORT_OST_IO SequenceIOHandlerFactoryBase {
00056 public:
00057 virtual ~SequenceIOHandlerFactoryBase() {}
00058 virtual bool ProvidesImport(const boost::filesystem::path& loc,
00059 const String& type) const = 0;
00060 virtual bool ProvidesExport(const boost::filesystem::path& loc,
00061 const String& type) const = 0;
00062 virtual SequenceIOHandlerPtr Create() const = 0;
00063 virtual String GetFormatName() const =0;
00064 virtual String GetFormatDescription() const =0;
00065 };
00066
00067 typedef boost::shared_ptr<SequenceIOHandlerFactoryBase> SequenceIOHandlerFactoryBasePtr;
00068
00069 template <class HANDLER>
00070 class SequenceIOHandlerFactory: public SequenceIOHandlerFactoryBase {
00071 virtual bool ProvidesImport(const boost::filesystem::path& loc,
00072 const String& type) const {
00073 return HANDLER::ProvidesImport(loc,type);
00074 }
00075
00076 virtual bool ProvidesExport(const boost::filesystem::path& loc,
00077 const String& type) const {
00078 return HANDLER::ProvidesExport(loc,type);
00079 }
00080
00081 virtual SequenceIOHandlerPtr Create() const {
00082 return SequenceIOHandlerPtr(new HANDLER);
00083 }
00084
00085 virtual String GetFormatName() const {
00086 return HANDLER::GetFormatName();
00087 }
00088
00089 virtual String GetFormatDescription() const {
00090 return HANDLER::GetFormatDescription();
00091 }
00092
00093 };
00094
00095
00096
00097 }}
00098
00099 #endif