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(); }
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()); }