GtGolomb* gt_golomb_new(unsigned long median) { GtGolomb *golomb; gt_assert(median > 0); golomb = gt_malloc(sizeof (*golomb)); golomb->median = median; golomb->len = (unsigned long) ceil(GT_LOG2((double) golomb->median)); golomb->two_pow_len = GT_POW2(golomb->len); return golomb; }
void gt_computefmkeyvalues (Fmindex *fm, const GtSpecialcharinfo *specialcharinfo, GtUword bwtlength, unsigned int log2bsize, unsigned int log2markdist, unsigned int numofchars, unsigned int suffixlength, bool storeindexpos) { fm->mappedptr = NULL; fm->log2bsize = log2bsize; fm->log2markdist = log2markdist; fm->bwtlength = bwtlength; fm->log2superbsize = GT_MULT2 (fm->log2bsize); fm->bsize = (unsigned int) GT_POW2 (fm->log2bsize); fm->bsizehalve = GT_DIV2(fm->bsize); fm->superbsize = (unsigned int) GT_POW2 (fm->log2superbsize); fm->nofblocks = (GtUword) (fm->bwtlength / fm->bsize) + 1; fm->nofsuperblocks = (GtUword) (fm->bwtlength / fm->superbsize) + 2; fm->markdist = (GtUword) GT_POW2 (fm->log2markdist); fm->markdistminus1 = (GtUword) (fm->markdist - 1); fm->negatebsizeones = ~ (GtUword) (fm->bsize - 1); fm->negatesuperbsizeones = ~ (GtUword) (fm->superbsize - 1); fm->log2superbsizeminuslog2bsize = fm->log2superbsize - fm->log2bsize; fm->mapsize = numofchars+1; fm->suffixlength = suffixlength; if (fm->suffixlength > 0) { fm->numofcodes = gt_power_for_small_exponents(fm->mapsize-1, fm->suffixlength); } else { fm->numofcodes = 0; } fm->sizeofindex = determinefmindexsize (fm, specialcharinfo, suffixlength, storeindexpos); }