X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=src%2Fapi%2FIBamIODevice.h;h=b34e449a04ed966756c8c1bc3cb71a60f7bd970f;hb=9f1ce8c47aeadb6dc1320b52ee671c3341b97935;hp=e69de29bb2d1d6434b8b29ae775ad8c2e48c5391;hpb=1691db866bf895d6b2ad72f204ccb6bc9a35e7e3;p=bamtools.git diff --git a/src/api/IBamIODevice.h b/src/api/IBamIODevice.h index e69de29..b34e449 100644 --- a/src/api/IBamIODevice.h +++ b/src/api/IBamIODevice.h @@ -0,0 +1,94 @@ +// *************************************************************************** +// IBamIODevice.h (c) 2011 Derek Barnett +// Marth Lab, Department of Biology, Boston College +// --------------------------------------------------------------------------- +// Last modified: 10 October 2011 (DB) +// --------------------------------------------------------------------------- +// Base class for all BAM I/O devices (e.g. local file, pipe, HTTP, FTP, etc.) +// +// Derived classes should provide protocol-specific implementations for +// reading/writing plain bytes, as well as other I/O-related behaviors. +// +// Since IBamIODevices may be defined in client code, the internal +// BamExceptions are NOT allowed to be thrown from devices, including the +// built-in ones. This keeps a consistent interface at the BgzfStream for +// handling any device type. Use the error string for relaying error messages. +// *************************************************************************** + +#ifndef IBAMIODEVICE_H +#define IBAMIODEVICE_H + +#include "api/api_global.h" +#include + +namespace BamTools { + +class API_EXPORT IBamIODevice { + + // enums + public: enum OpenMode { NotOpen = 0 + , ReadOnly + , WriteOnly + }; + + // ctor & dtor + public: + virtual ~IBamIODevice(void) { } + + // IBamIODevice interface + public: + + // pure virtuals + virtual void Close(void) =0; + virtual bool IsRandomAccess(void) const =0; + virtual bool Open(const OpenMode mode) =0; + virtual size_t Read(char* data, const unsigned int numBytes) =0; + virtual bool Seek(const int64_t& position) =0; + virtual int64_t Tell(void) const =0; + virtual size_t Write(const char* data, const unsigned int numBytes) =0; + + // default implementation provided + virtual std::string GetErrorString(void); + virtual bool IsOpen(void) const; + virtual OpenMode Mode(void) const; + + // internal methods + protected: + IBamIODevice(void); // hidden ctor + void SetErrorString(const std::string& where, const std::string& what); + + // data members + protected: + OpenMode m_mode; + std::string m_errorString; +}; + +inline +IBamIODevice::IBamIODevice(void) + : m_mode(IBamIODevice::NotOpen) +{ } + +inline +std::string IBamIODevice::GetErrorString(void) { + return m_errorString; +} + +inline +bool IBamIODevice::IsOpen(void) const { + return ( m_mode != IBamIODevice::NotOpen ); +} + +inline +IBamIODevice::OpenMode IBamIODevice::Mode(void) const { + return m_mode; +} + +inline +void IBamIODevice::SetErrorString(const std::string& where, const std::string& what) { + static const std::string SEPARATOR = ": "; + m_errorString = where + SEPARATOR + what; +} + +} // namespace BamTools + +#endif // IBAMIODEVICE_H