in glean/rts/densemap.h [193:215]
void merge(DenseMap other, F&& f) {
if (!other.data.empty()) {
if (data.empty()) {
*this = std::move(other);
} else {
reserve(
std::min(start, other.start),
std::max(start + data.size(), other.start + other.data.size()));
auto i = data.begin() + (other.start - start);
for (auto&& x : other.data) {
if (x.hasValue()) {
if (i->hasValue()) {
f(i->value(), std::move(x.value()));
} else {
*i = std::move(x);
++count;
}
}
++i;
}
}
}
}