]> git.mxchange.org Git - simgear.git/blobdiff - simgear/misc/zfstream.cxx
HTTP: Rename urlretrieve/urlload to save/load.
[simgear.git] / simgear / misc / zfstream.cxx
index 2e50eba1f4ba1e626bb23f59965d031b5f92823b..eae24f78b16d88ecb7d4332f0f55a539db3fc0d7 100644 (file)
@@ -39,7 +39,9 @@ gzfilebuf::gzfilebuf()
       mode(ios_openmode(0)),
       own_file_descriptor(false),
       ibuf_size(0),
-      ibuffer(0)
+      ibuffer(0),
+      obuf_size(0),
+      obuffer(0)
 {
 //     try {
     ibuf_size = page_size / sizeof(char);
@@ -59,6 +61,8 @@ gzfilebuf::~gzfilebuf()
     if ( own_file_descriptor )
         this->close();
     delete [] ibuffer;
+    if (obuffer)
+        delete [] obuffer;
 }
 
 void
@@ -153,17 +157,17 @@ gzfilebuf::close()
     return this;
 }
 
-// int
-// gzfilebuf::setcompressionlevel( int comp_level )
-// {
-//     return gzsetparams(file, comp_level, -2);
-// }
+int
+gzfilebuf::setcompressionlevel( int comp_level )
+{
+    return gzsetparams(file, comp_level, -2);
+}
 
-// int
-// gzfilebuf::setcompressionstrategy( int comp_strategy )
-// {
-//     return gzsetparams(file, -2, comp_strategy);
-// }
+int
+gzfilebuf::setcompressionstrategy( int comp_strategy )
+{
+    return gzsetparams(file, -2, comp_strategy);
+}
 
 
 std::streampos
@@ -173,10 +177,9 @@ gzfilebuf::seekoff( std::streamoff, ios_seekdir, ios_openmode )
 }
 
 gzfilebuf::int_type
-gzfilebuf::overflow( int_type )
+gzfilebuf::overflow( int_type )
 {
-#if 0
-    if ( !is_open() || !(mode & ios::out) )
+    if ( !is_open() || !(mode & ios_out) )
         return EOF;
 
     if ( !base() )
@@ -207,7 +210,6 @@ gzfilebuf::overflow( int_type )
         *pptr() = c;
         pbump(1);
     }
-#endif
     return 0;
 }
 
@@ -223,6 +225,22 @@ gzfilebuf::sync()
     return 0;
 }
 
+bool
+gzfilebuf::out_waiting()
+{
+    char* q = pbase();
+    int n = pptr() - q;
+    return n>0;
+}
+
+char
+gzfilebuf::allocate()
+{
+    obuf_size = page_size / sizeof(char);
+    obuffer = new char [obuf_size];
+    return 0;
+}
+
 gzfilebuf::int_type
 gzfilebuf::flushbuf()
 {
@@ -252,7 +270,7 @@ gzfilebuf::underflow()
     }
     else
     {
-        return fillbuf() == EOF ? traits_type::eof() : int_type(*gptr());
+        return fillbuf() == EOF ? traits_type::eof() : (unsigned char) (*gptr());
     }
 }