From 38bfa6c05c8a4bfd56ff4eebf162062479d8b344 Mon Sep 17 00:00:00 2001
From: Fabian Vu <Fabian.Vu@hhu.de>
Date: Thu, 22 May 2025 12:38:46 +0200
Subject: [PATCH] Fix a performance lack in Java BRelation

---
 .../src/main/java/de/hhu/stups/btypes/BRelation.java | 12 ++++--------
 .../src/main/java/de/hhu/stups/btypes/BRelation.java | 12 ++++--------
 2 files changed, 8 insertions(+), 16 deletions(-)

diff --git a/btypes_big_integer/src/main/java/de/hhu/stups/btypes/BRelation.java b/btypes_big_integer/src/main/java/de/hhu/stups/btypes/BRelation.java
index 1d3816877..a44527396 100644
--- a/btypes_big_integer/src/main/java/de/hhu/stups/btypes/BRelation.java
+++ b/btypes_big_integer/src/main/java/de/hhu/stups/btypes/BRelation.java
@@ -219,14 +219,12 @@ public class BRelation<S,T> implements BObject, Iterable<BTuple<S,T>> {
 		S prj1 = object.projection1();
 		T prj2 = object.projection2();
 
-		PersistentHashSet domain = (PersistentHashSet) SET.invoke(KEYS.invoke(this.map));
+		PersistentHashSet range = (PersistentHashSet) GET.invoke(this.map, prj1);
 
-		if(!domain.contains(prj1)) {
+		if(range == null) {
 			return new BBoolean(false);
 		}
 
-		PersistentHashSet range = (PersistentHashSet) GET.invoke(this.map, prj1);
-
 		return new BBoolean(range.contains(prj2));
 	}
 
@@ -234,14 +232,12 @@ public class BRelation<S,T> implements BObject, Iterable<BTuple<S,T>> {
 		S prj1 = object.projection1();
 		T prj2 = object.projection2();
 
-		PersistentHashSet domain = (PersistentHashSet) SET.invoke(KEYS.invoke(this.map));
+		PersistentHashSet range = (PersistentHashSet) GET.invoke(this.map, prj1);
 
-		if(!domain.contains(prj1)) {
+		if(range == null) {
 			return new BBoolean(true);
 		}
 
-		PersistentHashSet range = (PersistentHashSet) GET.invoke(this.map, prj1);
-
 		return new BBoolean(!range.contains(prj2));
 	}
 
diff --git a/btypes_primitives/src/main/java/de/hhu/stups/btypes/BRelation.java b/btypes_primitives/src/main/java/de/hhu/stups/btypes/BRelation.java
index 0631fb3e0..533652d3b 100644
--- a/btypes_primitives/src/main/java/de/hhu/stups/btypes/BRelation.java
+++ b/btypes_primitives/src/main/java/de/hhu/stups/btypes/BRelation.java
@@ -218,14 +218,12 @@ public class BRelation<S,T> implements BObject, Iterable<BTuple<S,T>> {
 		S prj1 = object.projection1();
 		T prj2 = object.projection2();
 
-		PersistentHashSet domain = (PersistentHashSet) SET.invoke(KEYS.invoke(this.map));
+		PersistentHashSet range = (PersistentHashSet) GET.invoke(this.map, prj1);
 
-		if(!domain.contains(prj1)) {
+		if(range == null) {
 			return new BBoolean(false);
 		}
 
-		PersistentHashSet range = (PersistentHashSet) GET.invoke(this.map, prj1);
-
 		return new BBoolean(range.contains(prj2));
 	}
 
@@ -233,14 +231,12 @@ public class BRelation<S,T> implements BObject, Iterable<BTuple<S,T>> {
 		S prj1 = object.projection1();
 		T prj2 = object.projection2();
 
-		PersistentHashSet domain = (PersistentHashSet) SET.invoke(KEYS.invoke(this.map));
+		PersistentHashSet range = (PersistentHashSet) GET.invoke(this.map, prj1);
 
-		if(!domain.contains(prj1)) {
+		if(range == null) {
 			return new BBoolean(true);
 		}
 
-		PersistentHashSet range = (PersistentHashSet) GET.invoke(this.map, prj1);
-
 		return new BBoolean(!range.contains(prj2));
 	}
 
-- 
GitLab