int gt_test_trieins(bool onlyins,const char *indexname,GtError *err) { Suffixarray suffixarray; bool haserr = false; unsigned long totallength = 0; gt_error_check(err); if (streamsuffixarray(&suffixarray, SARR_ESQTAB, indexname, NULL, err) != 0) { haserr = true; } else { totallength = gt_encseq_total_length(suffixarray.encseq); } if (!haserr) { Mergertrierep trierep; const GtUchar *characters; trierep.encseqreadinfo = gt_malloc(sizeof *trierep.encseqreadinfo); trierep.encseqreadinfo->encseqptr = suffixarray.encseq; trierep.encseqreadinfo->readmode = suffixarray.readmode; characters = gt_alphabet_characters(gt_encseq_alphabet(suffixarray.encseq)); gt_mergertrie_initnodetable(&trierep,totallength,1U); maketrie(&trierep,characters,totallength); if (onlyins) { #ifdef WITHTRIEIDENT #ifdef WITHTRIESHOW showtrie(&trierep,characters); #endif checktrie(&trierep,totallength+1,totallength,err); #endif } else { #ifdef WITHTRIEIDENT #ifdef WITHTRIESHOW showallnoderelations(trierep.root); #endif #endif successivelydeletesmallest(&trierep,totallength,characters,err); } gt_mergertrie_delete(&trierep); } gt_freesuffixarray(&suffixarray); return haserr ? -1 : 0; }
int test_trieins(bool onlyins,const GtStr *indexname,GtError *err) { Suffixarray suffixarray; bool haserr = false; Seqpos totallength = 0; gt_error_check(err); if (streamsuffixarray(&suffixarray, SARR_ESQTAB, indexname, NULL, err) != 0) { haserr = true; } else { totallength = getencseqtotallength(suffixarray.encseq); } if (!haserr) { Mergertrierep trierep; const GtUchar *characters; ALLOCASSIGNSPACE(trierep.encseqreadinfo,NULL,Encseqreadinfo,1); trierep.encseqreadinfo[0].encseqptr = suffixarray.encseq; trierep.encseqreadinfo[0].readmode = suffixarray.readmode; characters = getencseqAlphabetcharacters(suffixarray.encseq); mergertrie_initnodetable(&trierep,totallength,1U); maketrie(&trierep,characters,totallength); if (onlyins) { #ifdef WITHTRIEIDENT #ifdef WITHTRIESHOW showtrie(&trierep,characters); #endif checktrie(&trierep,totallength+1,totallength,err); #endif } else { #ifdef WITHTRIEIDENT #ifdef WITHTRIESHOW showallnoderelations(trierep.root); #endif #endif successivelydeletesmallest(&trierep,totallength,characters,err); } mergertrie_delete(&trierep); } freesuffixarray(&suffixarray); return haserr ? -1 : 0; }
void merertrie_showallnoderelations(const Mergertrienode *node) { Mergertrienode *tmp; showsimplenoderelations(node); for (tmp = node->firstchild; tmp != NULL; tmp = tmp->rightsibling) { if (tmp->firstchild == NULL) { showsimplenoderelations(tmp); } else { showallnoderelations(tmp); } } }