static void sequenceobject_init(Sequenceobject *seq, GtExtendCharAccess extend_char_access_mode, const GtEncseq *encseq, GtReadmode readmode, GtUword startpos, GtUword len, GtEncseqReader *encseq_r, GtAllocatedMemory *sequence_cache, GtUword totallength ) { gt_assert(seq != NULL); seq->encseq = NULL; seq->encseqreader = NULL; seq->twobitencoding = NULL; seq->cache_ptr = NULL; seq->sequence_cache = NULL; if (extend_char_access_mode == GT_EXTEND_CHAR_ACCESS_ANY && gt_encseq_has_twobitencoding(encseq) && gt_encseq_wildcards(encseq) == 0) { seq->twobitencoding = gt_encseq_twobitencoding_export(encseq); } if (seq->twobitencoding == NULL && (extend_char_access_mode == GT_EXTEND_CHAR_ACCESS_ANY || extend_char_access_mode == GT_EXTEND_CHAR_ACCESS_ENCSEQ_READER)) { gt_encseq_reader_reinit_with_readmode(encseq_r, encseq, readmode, startpos); seq->encseqreader = encseq_r; gt_assert(seq->encseqreader != NULL); seq->sequence_cache = sequence_cache; gt_assert(sequence_cache != NULL); seq->cache_ptr = sequence_cache->space; seq->min_access_pos = GT_UWORD_MAX; seq->cache_num_positions = 0; seq->cache_offset = 0; } if (seq->twobitencoding == NULL && seq->encseqreader == NULL && (extend_char_access_mode == GT_EXTEND_CHAR_ACCESS_ANY || extend_char_access_mode == GT_EXTEND_CHAR_ACCESS_ENCSEQ)) { seq->encseq = encseq; } seq->substringlength = len; if (readmode == GT_READMODE_FORWARD) { seq->startpos = startpos; seq->forward = true; } else { gt_assert(readmode == GT_READMODE_REVERSE); gt_assert(gt_encseq_total_length(encseq) == totallength); gt_assert(startpos + 1 <= totallength); seq->startpos = totallength - 1 - startpos; seq->forward = false; } gt_assert(seq->twobitencoding != NULL || seq->encseqreader != NULL || seq->encseq != NULL); }
static void gt_readjoiner_assembly_pump_encseq_through_cache( const GtEncseq *encseq) { const GtTwobitencoding *twobitencoding = gt_encseq_twobitencoding_export( encseq); uint64_t sum = 0; /* compute the sum, so that the compiler does no remove the code accessing twobitencoding during optimization */ GtUword idx, totallength = gt_encseq_total_length(encseq), numofunits = ! gt_encseq_is_mirrored(encseq) ? gt_unitsoftwobitencoding(totallength) : gt_unitsoftwobitencoding((totallength - 1)/2); for (idx = 0; idx < numofunits; idx++) sum += twobitencoding[idx]; gt_assert(sum > 0); #ifndef S_SPLINT_S gt_log_log("encseq codes-sum: %"PRIu64, sum); #endif }