// 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_