inline const Sequence MergeOverlappingSequences(std::vector<Sequence>& ss,
		size_t overlap, bool safe_merging = true) {
	if (ss.empty()) {
		return Sequence();
	}
	SequenceBuilder sb;
	Sequence prev_end = ss.front().Subseq(0, overlap);
	sb.append(prev_end);
	for (auto it = ss.begin(); it != ss.end(); ++it) {
		if(safe_merging)
			VERIFY(prev_end == it->Subseq(0, overlap));
		sb.append(it->Subseq(overlap));
		prev_end = it->Subseq(it->size() - overlap);
	}
	return sb.BuildSequence();
}
Example #2
0
    static SIZE_TYPE Subseq
    (const SrcCont& src,
     TCoding coding,
     TSeqPos pos,
     TSeqPos length,
     DstCont& dst)
    {
        _ASSERT(!OutOfRange(pos, src, coding));

        if ( src.empty()  ||  (length == 0) ) {
            return 0;
        }
        
        AdjustLength(src, coding, pos, length);
        ResizeDst(dst, coding, length);
        
        return Subseq(&*src.begin(), coding, pos, length, &*dst.begin());
    }