31 if (IsEmptyRange(range))
34 Range fixed_range = FixDirection(range);
36 ranges_.insert(fixed_range);
40 auto start = ranges_.upper_bound(fixed_range);
41 if (start != ranges_.begin())
44 if (start->second < fixed_range.first)
47 auto end = ranges_.upper_bound(Range(fixed_range.second, fixed_range.second));
50 ranges_.insert(fixed_range);
56 const size_t new_start =
std::min(start->first, fixed_range.first);
57 const size_t new_end =
std::max(end->second, fixed_range.second);
58 ranges_.erase(start, ++end);
59 ranges_.insert(Range(new_start, new_end));