diff --git a/btypes_big_integer/src/main/cpp/BRelation.hpp b/btypes_big_integer/src/main/cpp/BRelation.hpp index 9c8b1718505d76d61ea3fbdeb9110ff3ce332837..848292ecdddfc02196912f66b5042ca60635af21 100644 --- a/btypes_big_integer/src/main/cpp/BRelation.hpp +++ b/btypes_big_integer/src/main/cpp/BRelation.hpp @@ -1514,10 +1514,11 @@ class BRelation : public BObject { S prj1 = object.projection1(); T prj2 = object.projection2(); - if(this->domain().getSet().count(prj1) == 0) { + const immer::set<T, typename BSet<T>::Hash, typename BSet<T>::HashEqual>* rangePtr = this->map.find(prj1); + if(rangePtr == nullptr) { return BBoolean(false); } - immer::set<T, typename BSet<T>::Hash, typename BSet<T>::HashEqual> range = this->map[prj1]; + immer::set<T, typename BSet<T>::Hash, typename BSet<T>::HashEqual> range = *rangePtr; return BBoolean(range.count(prj2) > 0); } @@ -1525,10 +1526,12 @@ class BRelation : public BObject { S prj1 = object.projection1(); T prj2 = object.projection2(); - if(this->domain().getSet().count(prj1) == 0) { + const immer::set<T, typename BSet<T>::Hash, typename BSet<T>::HashEqual>* rangePtr = this->map.find(prj1); + if(rangePtr == nullptr) { return BBoolean(true); } - immer::set<T, typename BSet<T>::Hash, typename BSet<T>::HashEqual> range = this->map[prj1]; + + immer::set<T, typename BSet<T>::Hash, typename BSet<T>::HashEqual> range = *rangePtr; return BBoolean(range.count(prj2) == 0); } diff --git a/btypes_primitives/src/main/cpp/BRelation.hpp b/btypes_primitives/src/main/cpp/BRelation.hpp index f6f4eb08f009513a5e1b0747167681af5006b597..35c453b867ad669327da1a70016135d86d8a3e6a 100644 --- a/btypes_primitives/src/main/cpp/BRelation.hpp +++ b/btypes_primitives/src/main/cpp/BRelation.hpp @@ -1514,10 +1514,11 @@ class BRelation : public BObject { S prj1 = object.projection1(); T prj2 = object.projection2(); - if(this->domain().getSet().count(prj1) == 0) { + const immer::set<T, typename BSet<T>::Hash, typename BSet<T>::HashEqual>* rangePtr = this->map.find(prj1); + if(rangePtr == nullptr) { return BBoolean(false); } - immer::set<T, typename BSet<T>::Hash, typename BSet<T>::HashEqual> range = this->map[prj1]; + immer::set<T, typename BSet<T>::Hash, typename BSet<T>::HashEqual> range = *rangePtr; return BBoolean(range.count(prj2) > 0); } @@ -1525,10 +1526,12 @@ class BRelation : public BObject { S prj1 = object.projection1(); T prj2 = object.projection2(); - if(this->domain().getSet().count(prj1) == 0) { + const immer::set<T, typename BSet<T>::Hash, typename BSet<T>::HashEqual>* rangePtr = this->map.find(prj1); + if(rangePtr == nullptr) { return BBoolean(true); } - immer::set<T, typename BSet<T>::Hash, typename BSet<T>::HashEqual> range = this->map[prj1]; + + immer::set<T, typename BSet<T>::Hash, typename BSet<T>::HashEqual> range = *rangePtr; return BBoolean(range.count(prj2) == 0); }