Disk ARchive  2.3.11
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Defines
wrapperlib.hpp
Go to the documentation of this file.
00001 /*********************************************************************/
00002 // dar - disk archive - a backup/restoration program
00003 // Copyright (C) 2002-2052 Denis Corbin
00004 //
00005 // This program is free software; you can redistribute it and/or
00006 // modify it under the terms of the GNU General Public License
00007 // as published by the Free Software Foundation; either version 2
00008 // of the License, or (at your option) any later version.
00009 //
00010 // This program is distributed in the hope that it will be useful,
00011 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00012 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013 // GNU General Public License for more details.
00014 //
00015 // You should have received a copy of the GNU General Public License
00016 // along with this program; if not, write to the Free Software
00017 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
00018 //
00019 // to contact the author : dar.linux@free.fr
00020 /*********************************************************************/
00021 // $Id: wrapperlib.hpp,v 1.9.2.2 2009/04/07 08:45:29 edrusb Rel $
00022 //
00023 /*********************************************************************/
00024 
00031 
00032 #ifndef WRAPPERLIB_HPP
00033 #define WRAPPERLIB_HPP
00034 
00035 #include "../my_config.h"
00036 
00037 extern "C"
00038 {
00039 #if HAVE_ZLIB_H && LIBZ_AVAILABLE
00040 #include <zlib.h>
00041 #endif
00042 
00043 #if HAVE_BZLIB_H && LIBBZ2_AVAILABLE
00044 #include <bzlib.h>
00045 #endif
00046 } // end extern "C"
00047 
00048 #include "integers.hpp"
00049 
00050 namespace libdar
00051 {
00052 
00053     const int WR_OK            = 0;
00054     const int WR_MEM_ERROR     = 1;
00055     const int WR_VERSION_ERROR = 2;
00056     const int WR_STREAM_ERROR  = 3;
00057     const int WR_DATA_ERROR    = 4;
00058     const int WR_NO_FLUSH      = 5;
00059     const int WR_BUF_ERROR     = 6;
00060     const int WR_STREAM_END    = 7;
00061     const int WR_FINISH        = 8;
00062 
00063     enum wrapperlib_mode { zlib_mode, bzlib_mode };
00064 
00066 
00070 
00071     class wrapperlib
00072     {
00073     public:
00074         wrapperlib(wrapperlib_mode mode);
00075         wrapperlib(const wrapperlib & ref);
00076         wrapperlib & operator = (const wrapperlib & ref);
00077         ~wrapperlib();
00078 
00079         void set_next_in(const char *x) { return (this->*x_set_next_in)(x); };
00080         void set_avail_in(U_I x) { return (this->*x_set_avail_in)(x); };
00081         U_I get_avail_in() const { return (this->*x_get_avail_in)(); };
00082         U_64 get_total_in() const { return (this->*x_get_total_in)(); };
00083 
00084         void set_next_out(char *x) { return (this->*x_set_next_out)(x); };
00085         char *get_next_out() const { return (this->*x_get_next_out)(); };
00086         void set_avail_out(U_I x) { return (this->*x_set_avail_out)(x); };
00087         U_I get_avail_out() const { return (this->*x_get_avail_out)(); };
00088         U_64 get_total_out() const { return (this->*x_get_total_out)(); };
00089 
00090         S_I compressInit(U_I compression_level) { level = compression_level; return (this->*x_compressInit)(compression_level); };
00091         S_I decompressInit() { return (this->*x_decompressInit)(); };
00092         S_I compressEnd() { return (this->*x_compressEnd)(); };
00093         S_I decompressEnd() { return (this->*x_decompressEnd)(); };
00094         S_I compress(S_I flag) { return (this->*x_compress)(flag); };
00095         S_I decompress(S_I flag) { return (this->*x_decompress)(flag);};
00096         S_I compressReset();
00097         S_I decompressReset();
00098 
00099     private:
00100 #if LIBZ_AVAILABLE
00101         z_stream *z_ptr;
00102 #endif
00103 #if LIBBZ2_AVAILABLE
00104         bz_stream *bz_ptr;
00105 #endif
00106         S_I level;
00107 
00108         void (wrapperlib::*x_set_next_in)(const char *x);
00109         void (wrapperlib::*x_set_avail_in)(U_I x);
00110         U_I (wrapperlib::*x_get_avail_in)() const;
00111         U_64 (wrapperlib::*x_get_total_in)() const;
00112 
00113         void (wrapperlib::*x_set_next_out)(char *x);
00114         char *(wrapperlib::*x_get_next_out)() const;
00115         void (wrapperlib::*x_set_avail_out)(U_I x);
00116         U_I (wrapperlib::*x_get_avail_out)() const;
00117         U_64 (wrapperlib::*x_get_total_out)() const;
00118 
00119         S_I (wrapperlib::*x_compressInit)(U_I compression_level);
00120         S_I (wrapperlib::*x_decompressInit)();
00121         S_I (wrapperlib::*x_compressEnd)();
00122         S_I (wrapperlib::*x_decompressEnd)();
00123         S_I (wrapperlib::*x_compress)(S_I flag);
00124         S_I (wrapperlib::*x_decompress)(S_I flag);
00125 
00126 
00127             // set of routines for zlib
00128 #if LIBZ_AVAILABLE
00129         S_I z_compressInit(U_I compression_level);
00130         S_I z_decompressInit();
00131         S_I z_compressEnd();
00132         S_I z_decompressEnd();
00133         S_I z_compress(S_I flag);
00134         S_I z_decompress(S_I flag);
00135         void z_set_next_in(const char *x);
00136         void z_set_avail_in(U_I x);
00137         U_I z_get_avail_in() const;
00138         U_64 z_get_total_in() const;
00139         void z_set_next_out(char *x);
00140         char *z_get_next_out() const;
00141         void z_set_avail_out(U_I x);
00142         U_I z_get_avail_out() const;
00143         U_64 z_get_total_out() const;
00144 #endif
00145 
00146             // set of routines for bzlib
00147 #if LIBBZ2_AVAILABLE
00148         S_I bz_compressInit(U_I compression_level);
00149         S_I bz_decompressInit();
00150         S_I bz_compressEnd();
00151         S_I bz_decompressEnd();
00152         S_I bz_compress(S_I flag);
00153         S_I bz_decompress(S_I flag);
00154         void bz_set_next_in(const char *x);
00155         void bz_set_avail_in(U_I x);
00156         U_I bz_get_avail_in() const;
00157         U_64 bz_get_total_in() const;
00158         void bz_set_next_out(char *x);
00159         char *bz_get_next_out() const;
00160         void bz_set_avail_out(U_I x);
00161         U_I bz_get_avail_out() const;
00162         U_64 bz_get_total_out() const;
00163 #endif
00164     };
00165 
00166 } // end of namespace
00167 
00168 #endif
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Defines