00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef _GAMMACOMPRESSH_
00014 #define _GAMMACOMPRESSH_
00015
00017
00027
00028
00029
00030
00031
00032
00033 #include "common_headers.hpp"
00034 #include "Compress.hpp"
00035
00036 class GammaCompress : public Compress
00037 {
00038 public:
00039 GammaCompress();
00040 virtual ~GammaCompress(){}
00041
00042 public:
00043 void compress (ostream &os, int n, int * a);
00044 int decompress (istream &is, int * a);
00045 int read(istream &is);
00046 const string type() { return "gamma"; }
00047
00048 private:
00049 void initBitMasks ();
00050 int floorlog2 (double x);
00051 int gamma_size(int x);
00052 int gamma_encode(int x, int offset, vector<int> &bv);
00053 int gamma_decode(int * y, int offset, vector<int> &bv);
00054 int read_bits(istream & is, vector<int> &bv, int size);
00055 void write_bits(ostream & os, vector<int> &bv);
00056
00057 private:
00058 vector<int> bv;
00059 static char bits[8];
00060 };
00061
00062 #endif