in theta/include/theta_union_base_impl.hpp [40:59]
void theta_union_base<EN, EK, P, S, CS, A>::update(SS&& sketch) {
if (sketch.is_empty()) return;
if (sketch.get_seed_hash() != compute_seed_hash(table_.seed_)) throw std::invalid_argument("seed hash mismatch");
table_.is_empty_ = false;
union_theta_ = std::min(union_theta_, sketch.get_theta64());
for (auto&& entry: sketch) {
const uint64_t hash = EK()(entry);
if (hash < union_theta_ && hash < table_.theta_) {
auto result = table_.find(hash);
if (!result.second) {
table_.insert(result.first, conditional_forward<SS>(entry));
} else {
policy_(*result.first, conditional_forward<SS>(entry));
}
} else {
if (sketch.is_ordered()) break; // early stop
}
}
union_theta_ = std::min(union_theta_, table_.theta_);
}