Mercurial > hg > sv-dependency-builds
comparison src/zlib-1.2.7/contrib/iostream/zfstream.h @ 4:e13257ea84a4
Add bzip2, zlib, liblo, portaudio sources
author | Chris Cannam |
---|---|
date | Wed, 20 Mar 2013 13:59:52 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
3:6c505a35919a | 4:e13257ea84a4 |
---|---|
1 | |
2 #ifndef zfstream_h | |
3 #define zfstream_h | |
4 | |
5 #include <fstream.h> | |
6 #include "zlib.h" | |
7 | |
8 class gzfilebuf : public streambuf { | |
9 | |
10 public: | |
11 | |
12 gzfilebuf( ); | |
13 virtual ~gzfilebuf(); | |
14 | |
15 gzfilebuf *open( const char *name, int io_mode ); | |
16 gzfilebuf *attach( int file_descriptor, int io_mode ); | |
17 gzfilebuf *close(); | |
18 | |
19 int setcompressionlevel( int comp_level ); | |
20 int setcompressionstrategy( int comp_strategy ); | |
21 | |
22 inline int is_open() const { return (file !=NULL); } | |
23 | |
24 virtual streampos seekoff( streamoff, ios::seek_dir, int ); | |
25 | |
26 virtual int sync(); | |
27 | |
28 protected: | |
29 | |
30 virtual int underflow(); | |
31 virtual int overflow( int = EOF ); | |
32 | |
33 private: | |
34 | |
35 gzFile file; | |
36 short mode; | |
37 short own_file_descriptor; | |
38 | |
39 int flushbuf(); | |
40 int fillbuf(); | |
41 | |
42 }; | |
43 | |
44 class gzfilestream_common : virtual public ios { | |
45 | |
46 friend class gzifstream; | |
47 friend class gzofstream; | |
48 friend gzofstream &setcompressionlevel( gzofstream &, int ); | |
49 friend gzofstream &setcompressionstrategy( gzofstream &, int ); | |
50 | |
51 public: | |
52 virtual ~gzfilestream_common(); | |
53 | |
54 void attach( int fd, int io_mode ); | |
55 void open( const char *name, int io_mode ); | |
56 void close(); | |
57 | |
58 protected: | |
59 gzfilestream_common(); | |
60 | |
61 private: | |
62 gzfilebuf *rdbuf(); | |
63 | |
64 gzfilebuf buffer; | |
65 | |
66 }; | |
67 | |
68 class gzifstream : public gzfilestream_common, public istream { | |
69 | |
70 public: | |
71 | |
72 gzifstream(); | |
73 gzifstream( const char *name, int io_mode = ios::in ); | |
74 gzifstream( int fd, int io_mode = ios::in ); | |
75 | |
76 virtual ~gzifstream(); | |
77 | |
78 }; | |
79 | |
80 class gzofstream : public gzfilestream_common, public ostream { | |
81 | |
82 public: | |
83 | |
84 gzofstream(); | |
85 gzofstream( const char *name, int io_mode = ios::out ); | |
86 gzofstream( int fd, int io_mode = ios::out ); | |
87 | |
88 virtual ~gzofstream(); | |
89 | |
90 }; | |
91 | |
92 template<class T> class gzomanip { | |
93 friend gzofstream &operator<<(gzofstream &, const gzomanip<T> &); | |
94 public: | |
95 gzomanip(gzofstream &(*f)(gzofstream &, T), T v) : func(f), val(v) { } | |
96 private: | |
97 gzofstream &(*func)(gzofstream &, T); | |
98 T val; | |
99 }; | |
100 | |
101 template<class T> gzofstream &operator<<(gzofstream &s, const gzomanip<T> &m) | |
102 { | |
103 return (*m.func)(s, m.val); | |
104 } | |
105 | |
106 inline gzofstream &setcompressionlevel( gzofstream &s, int l ) | |
107 { | |
108 (s.rdbuf())->setcompressionlevel(l); | |
109 return s; | |
110 } | |
111 | |
112 inline gzofstream &setcompressionstrategy( gzofstream &s, int l ) | |
113 { | |
114 (s.rdbuf())->setcompressionstrategy(l); | |
115 return s; | |
116 } | |
117 | |
118 inline gzomanip<int> setcompressionlevel(int l) | |
119 { | |
120 return gzomanip<int>(&setcompressionlevel,l); | |
121 } | |
122 | |
123 inline gzomanip<int> setcompressionstrategy(int l) | |
124 { | |
125 return gzomanip<int>(&setcompressionstrategy,l); | |
126 } | |
127 | |
128 #endif |