annotate src/zlib-1.2.7/contrib/iostream/zfstream.h @ 83:ae30d91d2ffe

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