GNU CommonC++
|
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