annotate 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
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