annotate src/zlib-1.2.8/contrib/iostream/zfstream.h @ 155:54abead6ecce

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