1 #ifndef _GCDBZ_H
2 #define _GCDBZ_H
3 
4 #define GCDBZ_SBUF_LEN 8192
5 #define GCDBZ_LBUF_LEN 8192*2
6 #include "gcdb.h"
7 #include <zlib.h>
8 #include <stdio.h>
9 
10 class GCdbz {
11  private:
12   char lbuf[GCDBZ_LBUF_LEN]; //larger buffer
13   char sbuf[GCDBZ_SBUF_LEN]; //smaller buffer
14   char* defline; //defline copy storage -- compression only
15   int defline_cap; //currently allocated length of defline
16   int defline_len; //currently      used length of defline
17   z_stream zstream; // de/compression stream
18   FILE* zf; //compressed file, could be input or output
19   bool uncompress; // compression or decompression
20   long zpos; //current position in zf
21   int  zrecsize; // the size of the compressed record
22   bool in_defline;
23   bool zclosed; // if compress_end() was issued or not!
begin_defline()24   void begin_defline() { defline_len=0;
25                          in_defline=true; } // initialize the defline storage
26   void extend_defline(int ch); //append character ch to defline
27                           //reallocating as necessary
end_defline()28   void end_defline() { defline[defline_len]='\0';
29                        in_defline=false; } // add \0
30  public:
31   GCdbz(FILE* af, bool dc = false, int zrsize=0);
32   ~GCdbz();
33   void compress_start();
34   void compress_end();
35   char* compress(GReadBuf *readbuf, char* delim);
36   // returns a pointer to the defline copy or
37   // NULL if nothing was compressed;
38   //   (getZRecSize should be called to find out the
39   //   actual number of compressed bytes written to zf)
getZRecSize()40   int getZRecSize() { return zrecsize; }
41       //to be called AFTER compress()
getZRecPos()42   long getZRecPos() {  return zpos; }
43       //to be called BEFORE compress()
getZFile()44   FILE* getZFile() { return zf; }
45   void decomp_start(int zrsize);
46   void decomp_end();
47   int decompress(FILE* outf, int csize=0, int zfofs=-1);
48     // uncompress csize bytes from zf, from optional offset zfofs,
49     // and send the uncompressed stream to outf
50 };
51 
52 
53 
54 
55 
56 #endif
57