diff options
Diffstat (limited to 'decoder/gzstream.h')
-rw-r--r-- | decoder/gzstream.h | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/decoder/gzstream.h b/decoder/gzstream.h index ad9785fd..5c709490 100644 --- a/decoder/gzstream.h +++ b/decoder/gzstream.h @@ -21,8 +21,8 @@ // Revision : $Revision: 1.1 $ // Revision_date : $Date: 2006/03/30 04:05:52 $ // Author(s) : Deepak Bandyopadhyay, Lutz Kettner -// -// Standard streambuf implementation following Nicolai Josuttis, "The +// +// Standard streambuf implementation following Nicolai Josuttis, "The // Standard C++ Library". // ============================================================================ @@ -44,7 +44,7 @@ namespace GZSTREAM_NAMESPACE { class gzstreambuf : public std::streambuf { private: - static const int bufferSize = 47+256; // size of data buff + static const int bufferSize = 47+(1024*256); // size of data buff // totals 512 bytes under g++ for igzstream at the end. gzFile file; // file handle for compressed file @@ -53,19 +53,25 @@ private: int mode; // I/O mode int flush_buffer(); + void handle_gzerror(); // throws exception public: +#if defined(_WIN32) && !defined(CYGWIN) && !defined(EOF) + enum { + EOF = -1 + }; +#endif gzstreambuf() : opened(0) { setp( buffer, buffer + (bufferSize-1)); setg( buffer + 4, // beginning of putback area buffer + 4, // read position - buffer + 4); // end position + buffer + 4); // end position // ASSERT: both input & output capabilities will not be used together } int is_open() { return opened; } gzstreambuf* open( const char* name, int open_mode); gzstreambuf* close(); ~gzstreambuf() { close(); } - + virtual int overflow( int c = EOF); virtual int underflow(); virtual int sync(); @@ -85,15 +91,15 @@ public: // ---------------------------------------------------------------------------- // User classes. Use igzstream and ogzstream analogously to ifstream and -// ofstream respectively. They read and write files based on the gz* +// ofstream respectively. They read and write files based on the gz* // function interface of the zlib. Files are compatible with gzip compression. // ---------------------------------------------------------------------------- class igzstream : public gzstreambase, public std::istream { public: - igzstream() : std::istream( &buf) {} + igzstream() : std::istream( &buf) {} igzstream( const char* name, int open_mode = std::ios::in) - : gzstreambase( name, open_mode), std::istream( &buf) {} + : gzstreambase( name, std::ios::in | open_mode), std::istream( &buf) {} gzstreambuf* rdbuf() { return gzstreambase::rdbuf(); } void open( const char* name, int open_mode = std::ios::in) { gzstreambase::open( name, open_mode); @@ -104,7 +110,7 @@ class ogzstream : public gzstreambase, public std::ostream { public: ogzstream() : std::ostream( &buf) {} ogzstream( const char* name, int mode = std::ios::out) - : gzstreambase( name, mode), std::ostream( &buf) {} + : gzstreambase( name, mode), std::ostream( &buf) {} gzstreambuf* rdbuf() { return gzstreambase::rdbuf(); } void open( const char* name, int open_mode = std::ios::out) { gzstreambase::open( name, open_mode); |