void setreadintkeys(GtArray *riktab, const char *keystring, void *valueptr, size_t sizeval, bool *readflag) { Readintkeys rikvalue; rikvalue.keystring = keystring; rikvalue.readflag = readflag; gt_assert(sizeval == 0 || sizeval == (size_t) 4 || sizeval == (size_t) 8); switch (sizeval) { case 0: rikvalue.smallvalueptr = NULL; rikvalue.bigvalueptr = NULL; rikvalue.ptrdefined = false; break; case 4: gt_assert(sizeof (uint32_t) == (size_t) 4); rikvalue.smallvalueptr = valueptr; rikvalue.bigvalueptr = NULL; rikvalue.ptrdefined = true; break; case 8: gt_assert(sizeof (uint64_t) == (size_t) 8); rikvalue.bigvalueptr = valueptr; rikvalue.smallvalueptr = NULL; rikvalue.ptrdefined = true; break; } rikvalue.found = false; gt_array_add_elem(riktab,&rikvalue,sizeof (Readintkeys)); }
int gth_match_processor(GthMatchProcessorInfo *info, GthSeqCon *gen_seq_con, GthSeqCon *ref_seq_con, GthMatch *match) { if (info->matchnumcounter) { info->matchnumcounter[match->Storeseqnumreference]++; if (info->maxnumofmatches > 0 && info->matchnumcounter[match->Storeseqnumreference] > info->maxnumofmatches) { /* discard matchA */ return 0; } } if (!(info->refseqisindex && !info->online) && match->Storeseqnumreference != info->lastrefseqnum && gt_array_size(info->matches)) { gt_assert(info->chain_collection && info->chaining_info); /* chain all current matches */ calc_chains_from_matches(info->chain_collection, info->matches, info->chaining_info, gen_seq_con, ref_seq_con, info->rare, info->fragweightfactor, info->jump_table_new, info->jump_table_new_reverse, info->jump_table_delete); /* and remove them afterwards */ gt_array_reset(info->matches); } /*...only if it does not equal the last one */ if (gt_array_size(info->matches) && gth_matches_are_equal(gt_array_get_last(info->matches), match)) { return 0; } gt_array_add_elem(info->matches, match, sizeof *match); /* update last reference sequence number */ info->lastrefseqnum = match->Storeseqnumreference; return 0; }