void meet_like_operation()

in include/HashedAbstractPartition.h [234:264]


  void meet_like_operation(
      const HashedAbstractPartition& other,
      std::function<void(Domain*, const Domain&)> operation) {
    if (is_top()) {
      *this = other;
      return;
    }
    if (other.is_top()) {
      return;
    }
    for (auto it = m_map.begin(); it != m_map.end();) {
      auto other_binding = other.m_map.find(it->first);
      if (other_binding == other.m_map.end()) {
        // The other value is Bottom, we just erase the binding. We need to use
        // a different iterator, because all iterators to an erased binding are
        // invalidated.
        auto to_erase = it++;
        m_map.erase(to_erase);
      } else {
        // We compute the meet-like combination of the values.
        operation(&it->second, other_binding->second);
        if (it->second.is_bottom()) {
          // If the result is Bottom, we erase the binding.
          auto to_erase = it++;
          m_map.erase(to_erase);
        } else {
          ++it;
        }
      }
    }
  }