GNU CommonC++

zstream.h

Go to the documentation of this file.
00001 // Copyright (C) 1999-2005 Open Source Telecom Corporation.
00002 // Copyright (C) 2006-2010 David Sugar, Tycho Softworks.
00003 //
00004 // This program is free software; you can redistribute it and/or modify
00005 // it under the terms of the GNU General Public License as published by
00006 // the Free Software Foundation; either version 2 of the License, or
00007 // (at your option) any later version.
00008 //
00009 // This program is distributed in the hope that it will be useful,
00010 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00011 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012 // GNU General Public License for more details.
00013 //
00014 // You should have received a copy of the GNU General Public License
00015 // along with this program; if not, write to the Free Software
00016 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
00017 //
00018 // As a special exception, you may use this file as part of a free software
00019 // library without restriction.  Specifically, if other files instantiate
00020 // templates or use macros or inline functions from this file, or you compile
00021 // this file and link it with other files to produce an executable, this
00022 // file does not by itself cause the resulting executable to be covered by
00023 // the GNU General Public License.  This exception does not however
00024 // invalidate any other reasons why the executable file might be covered by
00025 // the GNU General Public License.
00026 //
00027 // This exception applies only to the code released under the name GNU
00028 // Common C++.  If you copy code from other releases into a copy of GNU
00029 // Common C++, as the General Public License permits, the exception does
00030 // not apply to the code that you add in this way.  To avoid misleading
00031 // anyone as to the status of such modified files, you must delete
00032 // this exception notice from them.
00033 //
00034 // If you write modifications of your own for GNU Common C++, it is your choice
00035 // whether to permit this exception to apply to your modifications.
00036 // If you do not wish that, delete this exception notice.
00037 //
00038 
00044 #ifndef CCXX_ZSTREAM_H_
00045 #define CCXX_ZSTREAM_H_
00046 
00047 #ifndef CCXX_MISSING_H_
00048 #include <cc++/missing.h>
00049 #endif
00050 
00051 #ifndef CCXX_THREAD_H_
00052 #include <cc++/thread.h>
00053 #endif
00054 
00055 #ifndef CCXX_STRING_H_
00056 #include <cc++/string.h>
00057 #endif
00058 
00059 #ifndef CCXX_EXCEPTION_H_
00060 #include <cc++/exception.h>
00061 #endif
00062 
00063 #include <zlib.h>
00064 
00065 #ifdef  CCXX_NAMESPACES
00066 namespace ost {
00067 #endif
00068 
00069 #ifdef  COMMON_STD_EXCEPTION
00070 
00071 class __EXPORT IOZException : public IOException
00072 {
00073 public:
00074     IOZException(const String &str) : IOException(str) {};
00075 };
00076 
00077 #endif
00078 
00079 class __EXPORT IZStream : protected std::streambuf, public std::istream
00080 {
00081 private:
00082     gzFile fp;
00083     int doallocate();
00084     bool throwflag;
00085 
00086 protected:
00087     size_t bufsize;
00088     char *gbuf;
00089 
00090     void allocate(size_t size);
00091 
00092     int underflow();
00093 
00094     int uflow();
00095 
00096 public:
00097     IZStream(bool throwflag = false);
00098     IZStream(const char *name, size_t size = 512, bool tf = false);
00099 
00100     bool isOpen(void);
00101 
00102     void close(void);
00103 
00104     virtual ~IZStream();
00105 
00106     void open(const char *name, size_t size = 512);
00107 
00108     inline size_t getBufferSize(void)
00109         {return bufsize;};
00110 };
00111 
00112 class __EXPORT OZStream : protected std::streambuf, public std::ostream
00113 {
00114 private:
00115     gzFile fp;
00116     int doallocate();
00117     bool throwflag;
00118 
00119 protected:
00120     size_t bufsize;
00121     char *pbuf;
00122 
00123     void allocate(size_t size);
00124 
00125     int overflow(int ch);
00126 
00127 public:
00128     OZStream(bool throwflag = false);
00129     OZStream(const char *name, int level = Z_DEFAULT_COMPRESSION, size_t size = 512, bool tf = false);
00130 
00131     bool isOpen(void);
00132 
00133     void close(void);
00134 
00135     virtual ~OZStream();
00136 
00137     void open(const char *name, int level = Z_DEFAULT_COMPRESSION, size_t size = 512);
00138 
00139     inline size_t getBufferSize(void)
00140         {return bufsize;};
00141 };
00142 
00143 #ifdef  CCXX_NAMESPACES
00144 }
00145 #endif
00146 
00147 #endif
00148