bool leq()

in include/HashedAbstractEnvironment.h [262:290]


  bool leq(const MapValue& other) const override {
    if (other.m_map.size() > m_map.size()) {
      // In this case, there is a variable bound to a non-Top value in 'other'
      // that is not defined in 'this' (and is therefore implicitly bound to
      // Top).
      return false;
    }
    for (const auto& binding : m_map) {
      auto it = other.m_map.find(binding.first);
      if (it == other.m_map.end()) {
        // The other value is Top.
        continue;
      }
      if (!binding.second.leq(it->second)) {
        return false;
      }
    }
    // Now we look for a variable appearing in 'other' that is not defined in
    // 'this' (and thus bound to Top).
    for (const auto& binding : other.m_map) {
      auto it = m_map.find(binding.first);
      if (it == m_map.end()) {
        // The value is Top, but we know by construction that binding.second is
        // not Top.
        return false;
      }
    }
    return true;
  }