diff --git a/src/main/java/org/warp/commonutils/type/Association.java b/src/main/java/org/warp/commonutils/type/Association.java index a7a3927..919627f 100644 --- a/src/main/java/org/warp/commonutils/type/Association.java +++ b/src/main/java/org/warp/commonutils/type/Association.java @@ -1,5 +1,6 @@ package org.warp.commonutils.type; +import it.unimi.dsi.fastutil.objects.ObjectSet; import java.util.Optional; import java.util.Set; @@ -101,6 +102,18 @@ public interface Association { */ int size(); + /** + * Get all the sources + * @return Set of sources + */ + ObjectSet getSources(); + + /** + * Get all the destinations + * @return Set of destinations + */ + ObjectSet getDestinations(); + static Association synchronize(Association association) { return new SynchronizedAssociation(association); } diff --git a/src/main/java/org/warp/commonutils/type/BiAssociation.java b/src/main/java/org/warp/commonutils/type/BiAssociation.java index 0310d9a..5d8ce73 100644 --- a/src/main/java/org/warp/commonutils/type/BiAssociation.java +++ b/src/main/java/org/warp/commonutils/type/BiAssociation.java @@ -1,5 +1,6 @@ package org.warp.commonutils.type; +import it.unimi.dsi.fastutil.objects.ObjectSet; import java.util.Optional; /** @@ -100,6 +101,18 @@ public interface BiAssociation { */ int size(); + /** + * Get all the sources + * @return Set of sources + */ + ObjectSet getSources(); + + /** + * Get all the destinations + * @return Set of destinations + */ + ObjectSet getDestinations(); + static BiAssociation synchronize(BiAssociation association) { return new SynchronizedBiAssociation(association); } diff --git a/src/main/java/org/warp/commonutils/type/HashAssociation.java b/src/main/java/org/warp/commonutils/type/HashAssociation.java index da9faeb..2cbc68d 100644 --- a/src/main/java/org/warp/commonutils/type/HashAssociation.java +++ b/src/main/java/org/warp/commonutils/type/HashAssociation.java @@ -2,6 +2,7 @@ package org.warp.commonutils.type; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; +import it.unimi.dsi.fastutil.objects.ObjectSet; import java.util.Objects; import java.util.Optional; import java.util.Set; @@ -156,6 +157,16 @@ public class HashAssociation implements Association { return inverseAssociations.size(); } + @Override + public ObjectSet getSources() { + return associations.clone().keySet(); + } + + @Override + public ObjectSet getDestinations() { + return inverseAssociations.clone().keySet(); + } + @SuppressWarnings("MethodDoesntCallSuperMethod") @Override public HashAssociation clone() { diff --git a/src/main/java/org/warp/commonutils/type/HashBiAssociation.java b/src/main/java/org/warp/commonutils/type/HashBiAssociation.java index 87e4f95..aa857bd 100644 --- a/src/main/java/org/warp/commonutils/type/HashBiAssociation.java +++ b/src/main/java/org/warp/commonutils/type/HashBiAssociation.java @@ -1,6 +1,7 @@ package org.warp.commonutils.type; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import it.unimi.dsi.fastutil.objects.ObjectSet; import java.util.Objects; import java.util.Optional; @@ -134,6 +135,16 @@ public class HashBiAssociation implements BiAssociation { return inverseAssociations.size(); } + @Override + public ObjectSet getSources() { + return associations.clone().keySet(); + } + + @Override + public ObjectSet getDestinations() { + return inverseAssociations.clone().keySet(); + } + @SuppressWarnings("MethodDoesntCallSuperMethod") @Override public HashBiAssociation clone() { diff --git a/src/main/java/org/warp/commonutils/type/SynchronizedAssociation.java b/src/main/java/org/warp/commonutils/type/SynchronizedAssociation.java index 2f48e8e..52399c4 100644 --- a/src/main/java/org/warp/commonutils/type/SynchronizedAssociation.java +++ b/src/main/java/org/warp/commonutils/type/SynchronizedAssociation.java @@ -1,5 +1,6 @@ package org.warp.commonutils.type; +import it.unimi.dsi.fastutil.objects.ObjectSet; import java.util.Optional; import java.util.Set; @@ -94,4 +95,18 @@ public final class SynchronizedAssociation implements Association { return association.size(); } } + + @Override + public ObjectSet getSources() { + synchronized (lock) { + return association.getSources(); + } + } + + @Override + public ObjectSet getDestinations() { + synchronized (lock) { + return association.getDestinations(); + } + } } diff --git a/src/main/java/org/warp/commonutils/type/SynchronizedBiAssociation.java b/src/main/java/org/warp/commonutils/type/SynchronizedBiAssociation.java index b5d45d0..98070ff 100644 --- a/src/main/java/org/warp/commonutils/type/SynchronizedBiAssociation.java +++ b/src/main/java/org/warp/commonutils/type/SynchronizedBiAssociation.java @@ -1,5 +1,6 @@ package org.warp.commonutils.type; +import it.unimi.dsi.fastutil.objects.ObjectSet; import java.util.Optional; public final class SynchronizedBiAssociation implements BiAssociation { @@ -93,4 +94,18 @@ public final class SynchronizedBiAssociation implements BiAssociation getSources() { + synchronized (lock) { + return association.getSources(); + } + } + + @Override + public ObjectSet getDestinations() { + synchronized (lock) { + return association.getDestinations(); + } + } }