summaryrefslogtreecommitdiffstats
path: root/src/java/com/jogamp/common
diff options
context:
space:
mode:
Diffstat (limited to 'src/java/com/jogamp/common')
-rw-r--r--src/java/com/jogamp/common/util/ArrayHashSet.java33
1 files changed, 28 insertions, 5 deletions
diff --git a/src/java/com/jogamp/common/util/ArrayHashSet.java b/src/java/com/jogamp/common/util/ArrayHashSet.java
index af1c0bd..d1e555f 100644
--- a/src/java/com/jogamp/common/util/ArrayHashSet.java
+++ b/src/java/com/jogamp/common/util/ArrayHashSet.java
@@ -358,15 +358,38 @@ public class ArrayHashSet
//
/**
- * Identity method allowing to fetch an equivalent object, using the internal hash map.
+ * Identity method allowing to get the identical object, using the internal hash map.
* <br>
* This is an O(1) operation.
*
- * @param ident argument to find an equivalent Object within this list
- * @return the Object contained in this list equivalent to the given <code>ident</code> Object
+ * @param key hash source to find the identical Object within this list
+ * @return object from this list, identical to the given <code>key</code> hash code,
+ * or null if not contained
*/
- public final Object get(Object ident) {
- return map.get(ident);
+ public final Object get(Object key) {
+ return map.get(key);
+ }
+
+ /**
+ * Identity method allowing to get the identical object, using the internal hash map.<br>
+ * If the <code>key</code> is not yet contained, add it.
+ * <br>
+ * This is an O(1) operation.
+ *
+ * @param key hash source to find the identical Object within this list
+ * @return object from this list, identical to the given <code>key</code> hash code,
+ * or add the given <code>key</code> and return it.
+ */
+ public final Object getOrAdd(Object key) {
+ Object identity = get(key);
+ if(null == identity) {
+ // object not contained yet, add it
+ if(!this.add(key)) {
+ throw new InternalError("Key not mapped, but contained in list: "+key);
+ }
+ identity = key;
+ }
+ return identity;
}
}