64 void insert(Key
const &first, Key
const &last, Value &&value)
noexcept
66 hi_assert(last > first);
69 auto first_ = find(first);
70 auto last_ = find(last);
74 hi_axiom(first_ != items.end());
75 if (first_->first != first) {
77 hilet tmp_last = first_->last;
80 first_ = items.emplace(first_ + 1, first, tmp_last, first_->values);
81 last_ = first_ + delta;
84 hi_axiom(last_ != items.end());
85 if (last_->last != last) {
87 hilet tmp_first = last_->first;
90 last_ = items.emplace(last_, tmp_first, last, first_->values);
91 first_ = last_ - delta;
94 hi_axiom(last_ != items.end());
96 for (
auto i = first_; i != last_; ++i) {
107 [](hilet &lhs, hilet &rhs) {
112 auto p = items.begin();
113 values_set.insert(p->values);
114 for (
auto i = p + 1; i != items.end(); p = i++) {
116 hilet[deduplicated_values, dummy] = values_set.insert(i->values);
117 i->values = *deduplicated_values;
119 if (can_be_merged(*p, *i)) {
126 items.shrink_to_fit();