44 struct ossimGzStreamBuf::PrivateData
51 ossimGzStreamBuf::ossimGzStreamBuf()
52 : prvtData(new PrivateData()),
57 setp( buffer, buffer + (bufferSize-1));
64 ossimGzStreamBuf::~ossimGzStreamBuf()
74 bool ossimGzStreamBuf::is_open()
const 79 ossimGzStreamBuf* ossimGzStreamBuf::open(
const char* name,
int open_mode)
83 return (ossimGzStreamBuf*)0;
87 if ((mode & std::ios::ate) || (mode & std::ios::app)
88 || ((mode & std::ios::in) && (mode & std::ios::out)))
90 return (ossimGzStreamBuf*)0;
94 char* fmodeptr = fmode;
95 if ( mode & std::ios::in)
99 else if ( mode & std::ios::out)
105 prvtData->file = gzopen( name, fmode);
106 if (prvtData->file == 0)
108 return (ossimGzStreamBuf*)0;
114 ossimGzStreamBuf * ossimGzStreamBuf::close()
120 if ( gzclose( prvtData->file) == Z_OK)
125 return (ossimGzStreamBuf*)0;
128 std::streamsize ossimGzStreamBuf::xsgetn(char_type* __s,
131 int num = gzread( prvtData->file, __s,
n);
139 int ossimGzStreamBuf::underflow()
142 if ( gptr() && ( gptr() < egptr()))
143 return *
reinterpret_cast<unsigned char *
>( gptr());
145 if ( ! (mode & std::ios::in) || ! opened)
148 int n_putback = gptr() - eback();
151 memcpy( buffer + (4 - n_putback), gptr() - n_putback, n_putback);
153 int num = gzread( prvtData->file, buffer+4, bufferSize-4);
158 setg( buffer + (4 - n_putback),
163 return *
reinterpret_cast<unsigned char *
>( gptr());
166 int ossimGzStreamBuf::flush_buffer()
170 int w = pptr() - pbase();
171 if ( gzwrite( prvtData->file, pbase(), w) != w)
177 int ossimGzStreamBuf::overflow(
int c) {
178 if ( ! ( mode & std::ios::out) || ! opened)
184 if ( flush_buffer() == EOF)
189 int ossimGzStreamBuf::sync() {
193 if ( pptr() && pptr() > pbase()) {
194 if ( flush_buffer() == EOF)
200 ossimGzStreamBuf::pos_type ossimGzStreamBuf::seekoff(off_type t,
201 std::ios_base::seekdir dir,
202 std::ios_base::openmode )
229 return gzseek(prvtData->file, t, whence);
268 ossimIgzStream::ossimIgzStream()
274 ossimIgzStream::ossimIgzStream(
const char* name,
275 std::ios_base::openmode mode )
282 ossimIgzStream::~ossimIgzStream()
287 ossimGzStreamBuf* ossimIgzStream::rdbuf()
292 void ossimIgzStream::open(
const char* name,
293 std::ios_base::openmode mode )
295 if ( ! buf.open( name, mode))
297 clear( rdstate() | std::ios::badbit);
301 void ossimIgzStream::close()
307 clear( rdstate() | std::ios::badbit);
312 bool ossimIgzStream::is_open()
const 314 return buf.is_open();
317 bool ossimIgzStream::isCompressed()
const 322 ossimOgzStream::ossimOgzStream()
328 ossimOgzStream::ossimOgzStream(
const char* ,
329 std::ios_base::openmode )
335 ossimOgzStream::~ossimOgzStream()
340 ossimGzStreamBuf* ossimOgzStream::rdbuf()
345 void ossimOgzStream::open(
const char* name,
346 std::ios_base::openmode mode )
348 if ( ! buf.open( name, mode))
350 clear( rdstate() | std::ios::badbit);
354 void ossimOgzStream::close()
360 clear( rdstate() | std::ios::badbit);
365 bool ossimOgzStream::is_open()
const 367 return buf.is_open();
370 bool ossimOgzStream::isCompressed()
const 377 #endif // OSSIM_HAS_LIBZ
os2<< "> n<< " > nendobj n