void merge()

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;
        }
      }
    }
  }