129 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			129 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef zfstream_h
							 | 
						||
| 
								 | 
							
								#define zfstream_h
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <fstream.h>
							 | 
						||
| 
								 | 
							
								#include "zlib.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class gzfilebuf : public streambuf {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								public:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  gzfilebuf( );
							 | 
						||
| 
								 | 
							
								  virtual ~gzfilebuf();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  gzfilebuf *open( const char *name, int io_mode );
							 | 
						||
| 
								 | 
							
								  gzfilebuf *attach( int file_descriptor, int io_mode );
							 | 
						||
| 
								 | 
							
								  gzfilebuf *close();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  int setcompressionlevel( int comp_level );
							 | 
						||
| 
								 | 
							
								  int setcompressionstrategy( int comp_strategy );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  inline int is_open() const { return (file !=NULL); }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  virtual streampos seekoff( streamoff, ios::seek_dir, int );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  virtual int sync();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								protected:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  virtual int underflow();
							 | 
						||
| 
								 | 
							
								  virtual int overflow( int = EOF );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								private:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  gzFile file;
							 | 
						||
| 
								 | 
							
								  short mode;
							 | 
						||
| 
								 | 
							
								  short own_file_descriptor;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  int flushbuf();
							 | 
						||
| 
								 | 
							
								  int fillbuf();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class gzfilestream_common : virtual public ios {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  friend class gzifstream;
							 | 
						||
| 
								 | 
							
								  friend class gzofstream;
							 | 
						||
| 
								 | 
							
								  friend gzofstream &setcompressionlevel( gzofstream &, int );
							 | 
						||
| 
								 | 
							
								  friend gzofstream &setcompressionstrategy( gzofstream &, int );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								public:
							 | 
						||
| 
								 | 
							
								  virtual ~gzfilestream_common();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  void attach( int fd, int io_mode );
							 | 
						||
| 
								 | 
							
								  void open( const char *name, int io_mode );
							 | 
						||
| 
								 | 
							
								  void close();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								protected:
							 | 
						||
| 
								 | 
							
								  gzfilestream_common();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								private:
							 | 
						||
| 
								 | 
							
								  gzfilebuf *rdbuf();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  gzfilebuf buffer;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class gzifstream : public gzfilestream_common, public istream {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								public:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  gzifstream();
							 | 
						||
| 
								 | 
							
								  gzifstream( const char *name, int io_mode = ios::in );
							 | 
						||
| 
								 | 
							
								  gzifstream( int fd, int io_mode = ios::in );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  virtual ~gzifstream();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class gzofstream : public gzfilestream_common, public ostream {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								public:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  gzofstream();
							 | 
						||
| 
								 | 
							
								  gzofstream( const char *name, int io_mode = ios::out );
							 | 
						||
| 
								 | 
							
								  gzofstream( int fd, int io_mode = ios::out );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  virtual ~gzofstream();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template<class T> class gzomanip {
							 | 
						||
| 
								 | 
							
								  friend gzofstream &operator<<(gzofstream &, const gzomanip<T> &);
							 | 
						||
| 
								 | 
							
								public:
							 | 
						||
| 
								 | 
							
								  gzomanip(gzofstream &(*f)(gzofstream &, T), T v) : func(f), val(v) { }
							 | 
						||
| 
								 | 
							
								private:
							 | 
						||
| 
								 | 
							
								  gzofstream &(*func)(gzofstream &, T);
							 | 
						||
| 
								 | 
							
								  T val;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template<class T> gzofstream &operator<<(gzofstream &s, const gzomanip<T> &m)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  return (*m.func)(s, m.val);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								inline gzofstream &setcompressionlevel( gzofstream &s, int l )
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  (s.rdbuf())->setcompressionlevel(l);
							 | 
						||
| 
								 | 
							
								  return s;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								inline gzofstream &setcompressionstrategy( gzofstream &s, int l )
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  (s.rdbuf())->setcompressionstrategy(l);
							 | 
						||
| 
								 | 
							
								  return s;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								inline gzomanip<int> setcompressionlevel(int l)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  return gzomanip<int>(&setcompressionlevel,l);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								inline gzomanip<int> setcompressionstrategy(int l)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  return gzomanip<int>(&setcompressionstrategy,l);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif
							 |