-// A C++ I/O streams interface to the zlib gz* functions
-//
+/**
+ * \file zfstream.hxx
+ * A C++ I/O streams interface to the zlib gz* functions.
+ */
+
// Written by Bernie Bright, 1998
// Based on zlib/contrib/iostream/ by Kevin Ruland <kevin@rodin.wustl.edu>
//
#ifndef _zfstream_hxx
#define _zfstream_hxx
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
#include <simgear/compiler.h>
-#ifdef HAVE_ZLIB
-# include <zlib.h>
-#else
-# include <simgear/zlib/zlib.h>
-#endif
-
-// At least Irix needs this
-#ifdef FG_HAVE_NATIVE_SGI_COMPILERS
-#include <char_traits.h>
-FG_USING_STD(char_traits);
-#endif
+#include <zlib.h>
-#ifdef FG_HAVE_STD_INCLUDES
+#ifdef SG_HAVE_STD_INCLUDES
# include <streambuf>
# include <istream>
# define ios_badbit ios_base::badbit
# define ios_failbit ios_base::failbit
-FG_USING_STD(streambuf);
-FG_USING_STD(ios_base);
-FG_USING_STD(streampos);
-FG_USING_STD(streamoff);
+SG_USING_STD(streambuf);
+SG_USING_STD(ios_base);
+SG_USING_STD(streampos);
+SG_USING_STD(streamoff);
#else
-# ifdef FG_HAVE_STREAMBUF
+# ifdef SG_HAVE_STREAMBUF
# include <streambuf.h>
# include <istream.h>
# else
#if defined(__GNUC__) && __GNUC_MINOR__ < 8
# define ios_binary ios::bin
-#elif defined( FG_HAVE_NATIVE_SGI_COMPILERS )
-# define ios_binary 0
#else
# define ios_binary ios::binary
#endif
# define ios_badbit ios::badbit
# define ios_failbit ios::failbit
-# include <simgear/fg_traits.hxx>
+# include <simgear/sg_traits.hxx>
-#endif // FG_HAVE_STD_INCLUDES
+#endif // SG_HAVE_STD_INCLUDES
-//-----------------------------------------------------------------------------
-//
-//
-//
+/**
+ * A C++ I/O streams interface to the zlib gz* functions.
+ */
+#ifdef SG_NEED_STREAMBUF_HACK
+class gzfilebuf : public __streambuf
+#else
class gzfilebuf : public streambuf
+#endif
{
public:
-#ifndef FG_HAVE_STD_INCLUDES
+#ifndef SG_HAVE_STD_INCLUDES
typedef char_traits<char> traits_type;
typedef char_traits<char>::int_type int_type;
// typedef char_traits<char>::pos_type pos_type;
// typedef char_traits<char>::off_type off_type;
#endif
+ /** Constructor */
gzfilebuf();
+
+ /** Destructor */
virtual ~gzfilebuf();
+ /**
+ * Open a stream
+ * @param name file name
+ * @param io_mode mdoe flags
+ * @return file stream
+ */
gzfilebuf* open( const char* name, ios_openmode io_mode );
+
+ /**
+ * Attach to an existing file descriptor
+ * @param file_descriptor file descriptor
+ * @param io_mode mode flags
+ * @return file stream
+ */
gzfilebuf* attach( int file_descriptor, ios_openmode io_mode );
+
+ /** Close stream */
gzfilebuf* close();
-// int setcompressionlevel( int comp_level );
-// int setcompressionstrategy( int comp_strategy );
+ // int setcompressionlevel( int comp_level );
+ // int setcompressionstrategy( int comp_strategy );
+
+ /** @return true if open, false otherwise */
bool is_open() const { return (file != NULL); }
+
+ /** @return stream position */
virtual streampos seekoff( streamoff off, ios_seekdir way, int which );
+
+ /** sync the stream */
virtual int sync();
protected:
virtual int_type underflow();
+#ifndef SG_HAVE_STD_INCLUDES
virtual int_type overflow( int_type c = traits_type::eof() );
+#else
+ virtual int_type overflow( int_type c = streambuf::traits_type::eof() );
+#endif
private:
void operator= ( const gzfilebuf& );
};
-//-----------------------------------------------------------------------------
-//
-//
-//
+/**
+ * document me
+ */
struct gzifstream_base
{
gzifstream_base() {}