1 #ifndef _GCDBYANK_H 2 #define _GCDBYANK_H 3 4 #include "gcdb.h" 5 #include <stdio.h> 6 #include "GFastaFile.h" 7 // FastaSeq class and *charFunc() callback type 8 9 #define DEF_CDBREC_DELIM ">" 10 11 #ifdef ENABLE_COMPRESSION 12 #include <zlib.h> 13 #define GCDBZ_SBUF_LEN 8192 14 #define GCDBZ_LBUF_LEN 8192*2 15 16 class GCdbZFasta { 17 private: 18 char* recdelim; 19 char lbuf[GCDBZ_LBUF_LEN]; //larger buffer 20 char sbuf[GCDBZ_SBUF_LEN]; //smaller buffer 21 char* defline; //defline copy storage -- compression only 22 int defline_cap; //currently allocated length of defline 23 int defline_len; //currently used length of defline 24 z_stream zstream; // de/compression stream 25 FILE* zf; //compressed file 26 long zpos; //current position in zf 27 int zrecsize; // the size of the compressed record 28 GFastaCharHandler* chrhandler; 29 public: 30 GCdbZFasta(FILE* af, int zrsize=0, char* r_delim=DEF_CDBREC_DELIM); 31 ~GCdbZFasta(); getZFile()32 FILE* getZFile() { return zf; } 33 void decomp_start(int zrsize); 34 void decomp_end(); 35 int decompress(FastaSeq& rec, int csize=0, int zfofs=-1, charFunc* seqCallBack=NULL); 36 // uncompress csize bytes from file zf, from optional file offset zfofs, 37 // and send the uncompressed stream to callbackFn 38 }; 39 40 #endif 41 42 class GCdbYank { 43 char* idxfile; 44 //char* dbfile; 45 char* recdelim; //record delimiter -- typically ">" 46 int warnings; 47 bool is_compressed; 48 char* dbname; 49 char* info_dbname; 50 off_t db_size; 51 cdbInfo dbstat; 52 GCdbRead* cdb; 53 #ifdef ENABLE_COMPRESSION 54 GCdbZFasta* cdbz; 55 #endif 56 int fdb; 57 int fd; 58 FILE* fz; // if compressed 59 GFastaCharHandler* fastahandler; 60 #ifdef ENABLE_COMPRESSION 61 protected: 62 GCdbZFasta* openCdbz(char* p); 63 #endif 64 public: 65 GCdbYank(const char* fidx, const char* recsep=DEF_CDBREC_DELIM); 66 ~GCdbYank(); 67 int getRecord(const char* key, FastaSeq& rec, charFunc* seqCallBack=NULL); 68 off_t getRecordPos(const char* key, uint32* record_len=NULL); getDbName()69 char* getDbName() { return dbname; } 70 71 }; 72 73 #endif 74