Changeset: c5fa74ef8100 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c5fa74ef8100
Modified Files:
        sql/backends/monet5/bam/bam_lib.c
Branch: bamloader
Log Message:

Let seq_char also use the more efficient version of the CIGAR parser


diffs (64 lines):

diff --git a/sql/backends/monet5/bam/bam_lib.c 
b/sql/backends/monet5/bam/bam_lib.c
--- a/sql/backends/monet5/bam/bam_lib.c
+++ b/sql/backends/monet5/bam/bam_lib.c
@@ -186,9 +186,8 @@ reverse_qual(str * ret, str * qual)
 #define next_cigar_op(fn) { \
        str tmp; \
        cnt = strtol(s, &tmp, 10); \
-       if(cnt <= 0 || s == tmp) { \
-               *ret = -1; \
-               throw(MAL, fn, "Could not read CIGAR operation"); \
+       if(cnt <= 0 || s == tmp || *s == '\0') { \
+               throw(MAL, fn, "Could not parse CIGAR string"); \
        } \
        s = tmp; \
        op = *s++; \
@@ -219,30 +218,26 @@ seq_length(int * ret, str * cigar)
 str
 seq_char(str * ret, int * ref_pos, str * alg_seq, int * alg_pos, str * 
alg_cigar) 
 {
-       str cigar_consumable = *alg_cigar;
+       str s = *alg_cigar;
        int seq_pos = -1;
        int cur_ref_pos = *alg_pos - 1;
+
+       long int cnt;
+       char op;
        
-       if (cigar_consumable[0] == '\0' || 
-                       (cigar_consumable[0] == '*' && cigar_consumable[1] == 
'\0')) {
+       if (*s == '\0' || (*s == '*' && *(s+1) == '\0')) {
                *ret = GDKstrdup(str_nil);
                return MAL_SUCCEED;
        }
        while(TRUE) {
-               int cnt;
-               char op;
-               int nr_chars_read;
                bit advance_ref_pos;
                bit advance_seq_pos;
 
-               if (sscanf
-                       (cigar_consumable, "%d%c%n", &cnt, &op,
-                        &nr_chars_read) != 2)
-                       throw(MAL, "seq_char",
-                                 "Error parsing CIGAR string '%s'\n", 
*alg_cigar);
+               next_cigar_op("seq_char");
+               
                advance_ref_pos = (op == 'M' || op == 'D' || 
                        op == 'N' || op == '=' || op == 'X');
-               advance_seq_pos = (op == 'M' || op == 'I' || op == '='); // 
TODO: Find out which chars advance the seq pos
+               advance_seq_pos = (op == 'M' || op == 'I' || op == '='); // 
TODO: Find out which chars advance the seq pos exactly
                if(advance_seq_pos) {
                        seq_pos += cnt;
                }
@@ -257,8 +252,7 @@ seq_char(str * ret, int * ref_pos, str *
                                break;
                        }
                }
-               cigar_consumable += nr_chars_read;
-               if(cigar_consumable[0] == '\0') {
+               if(*s == '\0') {
                        seq_pos = -1;
                        break;
                }
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to