BUG-7464: Hide INode.gen field 15/49915/8
authorRobert Varga <rovarga@cisco.com>
Sun, 1 Jan 2017 19:26:16 +0000 (20:26 +0100)
committerRobert Varga <rovarga@cisco.com>
Tue, 10 Jan 2017 19:12:11 +0000 (20:12 +0100)
This field is accessed only from TrieMap when initializing an operation
on a root node. Hide the field by exposing generation-less package-visible
methods, which pass the generation field to INode-private methods.

Change-Id: Ibf281c5975fe96d2cd2b1d58e93203a806932b57
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
third-party/triemap/src/main/java/org/opendaylight/yangtools/triemap/INode.java
third-party/triemap/src/main/java/org/opendaylight/yangtools/triemap/TrieMap.java

index 2be06f0ad507f61a52860681e1652abba99c3da4..42fa63ac6b90015066b46e8c3d4a185642a0c190 100644 (file)
@@ -32,7 +32,7 @@ final class INode<K, V> extends BasicNode {
     private static final AtomicReferenceFieldUpdater<INode, MainNode> MAINNODE_UPDATER =
             AtomicReferenceFieldUpdater.newUpdater(INode.class, MainNode.class, "mainnode");
 
-    public final Gen gen;
+    private final Gen gen;
 
     private volatile MainNode<K, V> mainnode;
 
@@ -129,8 +129,13 @@ final class INode<K, V> extends BasicNode {
      *
      * @return true if successful, false otherwise
      */
-    boolean rec_insert(final K k, final V v, final int hc, final int lev, final INode<K, V> parent, final Gen startgen,
+    boolean rec_insert(final K k, final V v, final int hc, final int lev, final INode<K, V> parent,
             final TrieMap<K, V> ct) {
+        return rec_insert(k, v, hc, lev, parent, gen, ct);
+    }
+
+    private boolean rec_insert(final K k, final V v, final int hc, final int lev, final INode<K, V> parent,
+            final Gen startgen, final TrieMap<K, V> ct) {
         while (true) {
             final MainNode<K, V> m = GCAS_READ (ct); // use -Yinline!
 
@@ -199,6 +204,11 @@ final class INode<K, V> extends BasicNode {
      *         previous value bound to the key)
      */
     Optional<V> rec_insertif(final K k, final V v, final int hc, final Object cond, final int lev,
+            final INode<K, V> parent, final TrieMap<K, V> ct) {
+        return rec_insertif(k, v, hc, cond, lev, parent, gen, ct);
+    }
+
+    private Optional<V> rec_insertif(final K k, final V v, final int hc, final Object cond, final int lev,
             final INode<K, V> parent, final Gen startgen, final TrieMap<K, V> ct) {
         while (true) {
             final MainNode<K, V> m = GCAS_READ(ct); // use -Yinline!
@@ -358,7 +368,11 @@ final class INode<K, V> extends BasicNode {
      * @return null if no value has been found, RESTART if the operation
      *         wasn't successful, or any other value otherwise
      */
-    Object rec_lookup(final K k, final int hc, final int lev, final INode<K, V> parent, final Gen startgen,
+    Object rec_lookup(final K k, final int hc, final int lev, final INode<K, V> parent, final TrieMap<K, V> ct) {
+        return rec_lookup(k, hc, lev, parent, gen, ct);
+    }
+
+    private Object rec_lookup(final K k, final int hc, final int lev, final INode<K, V> parent, final Gen startgen,
             final TrieMap<K, V> ct) {
         while (true) {
             final MainNode<K, V> m = GCAS_READ(ct); // use -Yinline!
@@ -439,6 +453,11 @@ final class INode<K, V> extends BasicNode {
      *         value otherwise
      */
     Optional<V> rec_remove(final K k, final V v, final int hc, final int lev, final INode<K, V> parent,
+            final TrieMap<K, V> ct) {
+        return rec_remove(k, v, hc, lev, parent, gen, ct);
+    }
+
+    private Optional<V> rec_remove(final K k, final V v, final int hc, final int lev, final INode<K, V> parent,
             final Gen startgen, final TrieMap<K, V> ct) {
         final MainNode<K, V> m = GCAS_READ(ct); // use -Yinline!
 
index f92b7d0a38f957d10d63b36c9b6f4aa018b1b4fa..acb944ede48ef34cfe918d93573c1011b252fa69 100644 (file)
@@ -165,7 +165,7 @@ public final class TrieMap<K, V> extends AbstractMap<K, V> implements Concurrent
     private void inserthc(final K k, final int hc, final V v) {
         while (true) {
             final INode<K, V> r = RDCSS_READ_ROOT();
-            if (r.rec_insert(k, v, hc, 0, null, r.gen, this)) {
+            if (r.rec_insert(k, v, hc, 0, null, this)) {
                 // Successful, we are done
                 return;
             }
@@ -177,7 +177,7 @@ public final class TrieMap<K, V> extends AbstractMap<K, V> implements Concurrent
     private Optional<V> insertifhc(final K k, final int hc, final V v, final Object cond) {
         while (true) {
             final INode<K, V> r = RDCSS_READ_ROOT();
-            final Optional<V> ret = r.rec_insertif(k, v, hc, cond, 0, null, r.gen, this);
+            final Optional<V> ret = r.rec_insertif(k, v, hc, cond, 0, null, this);
             if (ret != null) {
                 return ret;
             }
@@ -188,8 +188,8 @@ public final class TrieMap<K, V> extends AbstractMap<K, V> implements Concurrent
 
     private Object lookuphc(final K k, final int hc) {
         while (true) {
-            final INode<K, V> r = RDCSS_READ_ROOT ();
-            final Object res = r.rec_lookup(k, hc, 0, null, r.gen, this);
+            final INode<K, V> r = RDCSS_READ_ROOT();
+            final Object res = r.rec_lookup(k, hc, 0, null, this);
             if (!INode.RESTART.equals(res)) {
                 return res;
             }
@@ -201,7 +201,7 @@ public final class TrieMap<K, V> extends AbstractMap<K, V> implements Concurrent
     private Optional<V> removehc(final K k, final V v, final int hc) {
         while (true) {
             final INode<K, V> r = RDCSS_READ_ROOT();
-            final Optional<V> res = r.rec_remove(k, v, hc, 0, null, r.gen, this);
+            final Optional<V> res = r.rec_remove(k, v, hc, 0, null, this);
             if (res != null) {
                 return res;
             }