You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2016/02/13 18:39:05 UTC
jena git commit: JENA-1141: Add the function BunchMap.getOrSet.
Repository: jena
Updated Branches:
refs/heads/master 9b38d8e91 -> 0279a0dad
JENA-1141: Add the function BunchMap.getOrSet.
Not used - testing shows no observable difference in performance.
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/0279a0da
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/0279a0da
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/0279a0da
Branch: refs/heads/master
Commit: 0279a0dad94c81c0d4c333f35f2ed9c8f1ad3467
Parents: 9b38d8e
Author: Andy Seaborne <an...@apache.org>
Authored: Sat Feb 13 17:38:34 2016 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Sat Feb 13 17:38:34 2016 +0000
----------------------------------------------------------------------
.../main/java/org/apache/jena/mem/BunchMap.java | 8 +++++
.../org/apache/jena/mem/HashedBunchMap.java | 31 +++++++++++++++-----
.../org/apache/jena/mem/NodeToTriplesMap.java | 4 +++
.../apache/jena/mem/NodeToTriplesMapMem.java | 4 +++
.../org/apache/jena/mem/WrappedHashMap.java | 8 +++++
5 files changed, 48 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/0279a0da/jena-core/src/main/java/org/apache/jena/mem/BunchMap.java
----------------------------------------------------------------------
diff --git a/jena-core/src/main/java/org/apache/jena/mem/BunchMap.java b/jena-core/src/main/java/org/apache/jena/mem/BunchMap.java
index 52b6a66..f184be8 100644
--- a/jena-core/src/main/java/org/apache/jena/mem/BunchMap.java
+++ b/jena-core/src/main/java/org/apache/jena/mem/BunchMap.java
@@ -18,6 +18,8 @@
package org.apache.jena.mem;
+import java.util.function.Function ;
+
import org.apache.jena.util.iterator.ExtendedIterator ;
/**
@@ -49,6 +51,12 @@ public interface BunchMap
will now deliver this value.
*/
public void put( Object key, TripleBunch value );
+
+ /**
+ Get the <code>key</code> and return the value found there; if nothing,
+ cacluate the <code>value</code> and insert. Return the value now the slot.
+ */
+ public TripleBunch getOrSet( Object key, Function<Object, TripleBunch> setter );
/**
Remove any association for <code>key</code>; <code>get</code> on this
http://git-wip-us.apache.org/repos/asf/jena/blob/0279a0da/jena-core/src/main/java/org/apache/jena/mem/HashedBunchMap.java
----------------------------------------------------------------------
diff --git a/jena-core/src/main/java/org/apache/jena/mem/HashedBunchMap.java b/jena-core/src/main/java/org/apache/jena/mem/HashedBunchMap.java
index 9ec0de8..02fb56e 100644
--- a/jena-core/src/main/java/org/apache/jena/mem/HashedBunchMap.java
+++ b/jena-core/src/main/java/org/apache/jena/mem/HashedBunchMap.java
@@ -18,7 +18,9 @@
package org.apache.jena.mem;
-import org.apache.jena.shared.* ;
+import java.util.function.Function ;
+
+import org.apache.jena.shared.BrokenException ;
/**
An implementation of BunchMap that does open-addressed hashing.
@@ -65,14 +67,29 @@ public class HashedBunchMap extends HashCommon<Object> implements BunchMap
if (slot < 0)
values[~slot] = value;
else
- {
- keys[slot] = key;
- values[slot] = value;
- size += 1;
- if (size == threshold) grow();
- }
+ put$(slot, key, value) ;
}
+ @Override
+ public TripleBunch getOrSet( Object key, Function<Object, TripleBunch> setter) {
+ int slot = findSlot( key );
+ if (slot < 0)
+ // Get.
+ return values[~slot] ;
+ // Or set value.
+ TripleBunch value = setter.apply(key) ;
+ put$(slot, key, value) ;
+ return value ;
+ }
+
+ private void put$(int slot, Object key, TripleBunch value) {
+ keys[slot] = key;
+ values[slot] = value;
+ size += 1;
+ if ( size == threshold )
+ grow();
+ }
+
protected void grow()
{
Object [] oldContents = keys;
http://git-wip-us.apache.org/repos/asf/jena/blob/0279a0da/jena-core/src/main/java/org/apache/jena/mem/NodeToTriplesMap.java
----------------------------------------------------------------------
diff --git a/jena-core/src/main/java/org/apache/jena/mem/NodeToTriplesMap.java b/jena-core/src/main/java/org/apache/jena/mem/NodeToTriplesMap.java
index 3342241..a41f748 100644
--- a/jena-core/src/main/java/org/apache/jena/mem/NodeToTriplesMap.java
+++ b/jena-core/src/main/java/org/apache/jena/mem/NodeToTriplesMap.java
@@ -39,6 +39,10 @@ public class NodeToTriplesMap extends NodeToTriplesMapBase
@Override public boolean add( Triple t )
{
Object o = getIndexField( t );
+
+ // Feb 2016 : no measurable difference.
+ //OpenSetBunch s = (OpenSetBunch) bunchMap.getOrSet(o, (k)->createSetBunch()) ;
+
OpenSetBunch s = (OpenSetBunch) bunchMap.get( o );
if (s == null) bunchMap.put( o, s = createSetBunch() );
if (s.baseSet().add( t )) { size += 1; return true; } else return false;
http://git-wip-us.apache.org/repos/asf/jena/blob/0279a0da/jena-core/src/main/java/org/apache/jena/mem/NodeToTriplesMapMem.java
----------------------------------------------------------------------
diff --git a/jena-core/src/main/java/org/apache/jena/mem/NodeToTriplesMapMem.java b/jena-core/src/main/java/org/apache/jena/mem/NodeToTriplesMapMem.java
index 107cf3b..bac0833 100644
--- a/jena-core/src/main/java/org/apache/jena/mem/NodeToTriplesMapMem.java
+++ b/jena-core/src/main/java/org/apache/jena/mem/NodeToTriplesMapMem.java
@@ -43,6 +43,10 @@ public class NodeToTriplesMapMem extends NodeToTriplesMapBase
@Override public boolean add( Triple t )
{
Object o = getIndexField( t );
+
+ // Feb 2016 : no measurable difference.
+ //TripleBunch s = bunchMap.getOrSet(o, (k)->new ArrayBunch()) ;
+
TripleBunch s = bunchMap.get( o );
if (s == null) bunchMap.put( o, s = new ArrayBunch() );
if (s.contains( t ))
http://git-wip-us.apache.org/repos/asf/jena/blob/0279a0da/jena-core/src/main/java/org/apache/jena/mem/WrappedHashMap.java
----------------------------------------------------------------------
diff --git a/jena-core/src/main/java/org/apache/jena/mem/WrappedHashMap.java b/jena-core/src/main/java/org/apache/jena/mem/WrappedHashMap.java
index b4a2d02..b5c929e 100644
--- a/jena-core/src/main/java/org/apache/jena/mem/WrappedHashMap.java
+++ b/jena-core/src/main/java/org/apache/jena/mem/WrappedHashMap.java
@@ -19,6 +19,7 @@
package org.apache.jena.mem;
import java.util.Map;
+import java.util.function.Function ;
import org.apache.jena.util.CollectionFactory ;
import org.apache.jena.util.iterator.* ;
@@ -30,6 +31,8 @@ public class WrappedHashMap implements BunchMap
{
protected final Map<Object, TripleBunch> map = CollectionFactory.createHashedMap();
+ public WrappedHashMap() {}
+
@Override
public void clear()
{ map.clear(); }
@@ -47,6 +50,11 @@ public class WrappedHashMap implements BunchMap
{ map.put( key, value ); }
@Override
+ public TripleBunch getOrSet( Object key, Function<Object, TripleBunch> setter) {
+ return map.computeIfAbsent(key, setter);
+ }
+
+ @Override
public void remove( Object key )
{ map.remove( key ); }