in req/include/req_sketch_impl.hpp [188:209]
void req_sketch<T, C, A>::merge(FwdSk&& other) {
if (is_HRA() != other.is_HRA()) throw std::invalid_argument("merging HRA and LRA is not valid");
if (other.is_empty()) return;
if (is_empty()) {
min_item_.emplace(conditional_forward<FwdSk>(*other.min_item_));
max_item_.emplace(conditional_forward<FwdSk>(*other.max_item_));
} else {
if (comparator_(*other.min_item_, *min_item_)) *min_item_ = conditional_forward<FwdSk>(*other.min_item_);
if (comparator_(*max_item_, *other.max_item_)) *max_item_ = conditional_forward<FwdSk>(*other.max_item_);
}
// grow until this has at least as many compactors as other
while (get_num_levels() < other.get_num_levels()) grow();
// merge the items in all height compactors
for (size_t i = 0; i < other.get_num_levels(); ++i) {
compactors_[i].merge(conditional_forward<FwdSk>(other.compactors_[i]));
}
n_ += other.n_;
update_max_nom_size();
update_num_retained();
if (num_retained_ >= max_nom_size_) compress();
reset_sorted_view();
}