in req/include/req_compactor_impl.hpp [246:261]
void req_compactor<T, C, A>::merge(FwdC&& other) {
// TODO: swap if other is larger?
if (lg_weight_ != other.lg_weight_) throw std::logic_error("weight mismatch");
state_ |= other.state_;
while (ensure_enough_sections()) {}
ensure_space(other.get_num_items());
sort();
auto offset = hra_ ? capacity_ - num_items_ : num_items_;
auto from = hra_ ? begin() - other.get_num_items() : end();
auto to = from + other.get_num_items();
auto other_it = other.begin();
for (auto it = from; it != to; ++it, ++other_it) new (it) T(conditional_forward<FwdC>(*other_it));
if (!other.sorted_) std::sort(from, to, comparator_);
if (num_items_ > 0) std::inplace_merge(hra_ ? from : begin(), items_ + offset, hra_ ? end() : to, C());
num_items_ += other.get_num_items();
}