ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/gclib/gclib/GFastaIndex.h
Revision: 18
Committed: Mon Jul 18 21:00:21 2011 UTC (8 years ago) by gpertea
File size: 2011 byte(s)
Log Message:
added a few more source files, test code

Line File contents
1 /*
2 * GFaIdx.h
3 *
4 * Created on: Aug 25, 2010
5 * Author: gpertea
6 */
7
8 #ifndef GFAIDX_H_
9 #define GFAIDX_H_
10
11 #include "GHash.hh"
12 #include "GList.hh"
13
14 class GFastaRec {
15 public:
16 char* seqname;
17 uint seqlen;
18 off_t fpos;
19 int line_len; //effective line length (without EoL)
20 int line_blen; //length of line including EoL characters
21 GFastaRec(uint slen=0, off_t fp=0, int llen=0, int llenb=0) {
22 seqname=NULL; //only a pointer copy
23 seqlen=slen;
24 fpos=fp;
25 line_len=llen;
26 line_blen=llenb;
27 }
28 bool operator==(GFastaRec& d){
29 return (fpos==d.fpos);
30 }
31 bool operator>(GFastaRec& d){
32 return (fpos>d.fpos);
33 }
34 bool operator<(GFastaRec& d){
35 return (fpos<d.fpos);
36 }
37
38 };
39
40 class GFastaIndex {
41 char* fa_name;
42 char* fai_name;
43 bool haveFai;
44 public:
45 GHash<GFastaRec> records;
46 void addRecord(const char* seqname, uint seqlen,
47 off_t foffs, int llen, int llen_full);
48
49 GFastaRec* getRecord(const char* seqname) {
50 return records.Find(seqname);
51 }
52 bool hasIndex() { return haveFai; }
53 int loadIndex(const char* finame);
54 int buildIndex(); //build index in memory by parsing the whole fasta file
55 int storeIndex(const char* finame);
56 int storeIndex(FILE* fai);
57 int getCount() { return records.Count(); }
58 GFastaIndex(const char* fname, const char* finame=NULL):records() {
59 if (fileExists(fname)!=2) GError("Error: fasta file %s not found!\n",fname);
60 if (fileSize(fname)<=0) GError("Error: invalid fasta file %s !\n",fname);
61 fa_name=Gstrdup(fname);
62 fai_name=finame!=NULL ? Gstrdup(finame) : NULL;
63 if (fileSize(fa_name)==0) {
64 GError("Error creating GFastaIndex(%s): invalid fasta file!\n",fa_name);
65 }
66 haveFai=false;
67 if (fai_name!=NULL && fileSize(fai_name)>0) {
68 //try to load the index file if it exists
69 loadIndex(fai_name);
70 haveFai=(records.Count()>0);
71 }
72 }
73 ~GFastaIndex() {
74 GFREE(fa_name);
75 GFREE(fai_name);
76 }
77 };
78
79 #endif /* GFAIDX_H_ */