static SortedRanges partialMerging(const IntervalTree<ElemChunk> &tree, const dav_size_t mergedist) { MergedRanges merged; std::vector<Interval<ElemChunk> > allranges_unsorted; tree.findContained(0, std::numeric_limits<dav_size_t>::max(), allranges_unsorted); MergedRanges allranges; for(std::vector<Interval<ElemChunk> >::iterator it = allranges_unsorted.begin(); it != allranges_unsorted.end(); it++) allranges.insert(std::make_pair(it->start, it->stop)); dav_off_t offset = allranges.begin()->first; dav_off_t end = allranges.begin()->second; for(MergedRanges::iterator it = allranges.begin(); it != allranges.end(); it++) { if(end + (dav_off_t) mergedist >= it->first) { end = it->second; } else { merged.insert(std::make_pair(offset, end)); offset = it->first; end = it->second; } } merged.insert(std::make_pair(offset, end)); SortedRanges output; for(MergedRanges::iterator it = merged.begin(); it != merged.end(); it++) output.push_back(*it); return output; }