annotate src/zlib-1.2.8/contrib/iostream/zfstream.h @ 43:5ea0608b923f

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