// tiff stream interface class definition #ifndef _TIFF_STREAM_H_ #define _TIFF_STREAM_H_ #include #include "tiffio.h" class TiffStream { public: // ctor/dtor TiffStream(); ~TiffStream(); public: enum SeekDir { beg, cur, end, }; public: // factory methods TIFF* makeFileStream(iostream* str); TIFF* makeFileStream(istream* str); TIFF* makeFileStream(ostream* str); public: // tiff client methods static tsize_t read(thandle_t fd, tdata_t buf, tsize_t size); static tsize_t write(thandle_t fd, tdata_t buf, tsize_t size); static toff_t seek(thandle_t fd, toff_t offset, int origin); static toff_t size(thandle_t fd); static int close(thandle_t fd); static int map(thandle_t fd, tdata_t* phase, toff_t* psize); static void unmap(thandle_t fd, tdata_t base, tsize_t size); public: // query method TIFF* getTiffHandle() const { return m_tif; } unsigned int getStreamLength() { return m_streamLength; } private: // internal methods unsigned int getSize(thandle_t fd); unsigned int tell(thandle_t fd); bool seekInt(thandle_t fd, unsigned int offset, int origin); bool isOpen(thandle_t fd); private: thandle_t m_this; TIFF* m_tif; static const char* m_name; istream* m_inStream; ostream* m_outStream; iostream* m_ioStream; int m_streamLength; }; #endif // _TIFF_STREAM_H_