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