summaryrefslogtreecommitdiff
path: root/tiff/contrib/stream/tiffstream.h
blob: 815a1a5bebd2395c42d350a2831b1d28597001f8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
// tiff stream interface class definition

#ifndef _TIFF_STREAM_H_
#define _TIFF_STREAM_H_

#include <iostream.h>

#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_/*
 * Local Variables:
 * mode: c++
 * c-basic-offset: 8
 * fill-column: 78
 * End:
 */