BUG-7464: Cleanup if-else branches in CNode 87/49887/6
authorRobert Varga <rovarga@cisco.com>
Sat, 31 Dec 2016 12:44:57 +0000 (13:44 +0100)
committerRobert Varga <rovarga@cisco.com>
Mon, 9 Jan 2017 14:17:12 +0000 (15:17 +0100)
Fixes eclipse warnings and makes the code more readable
by having a more flat structure.

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

index b4882da95b9345e538e847e1e5e7993e8d4fd14b..3784ede483e6c3fe3b74a1f54126dc6ada0c9361 100644 (file)
@@ -22,16 +22,34 @@ final class CNode<K, V> extends CNodeBase<K, V> {
     final BasicNode[] array;
     final Gen gen;
 
-    CNode(final Gen gen) {
-        this(gen, 0, EMPTY_ARRAY);
-    }
-
     private CNode(final Gen gen, final int bitmap, final BasicNode... array) {
         this.bitmap = bitmap;
         this.array = array;
         this.gen = gen;
     }
 
+    CNode(final Gen gen) {
+        this(gen, 0, EMPTY_ARRAY);
+    }
+
+    static <K, V> MainNode<K,V> dual(final SNode<K, V> x, final int xhc, final SNode<K, V> y, final int yhc,
+            final int lev, final Gen gen) {
+        if (lev >= 35) {
+            return new LNode<>(x.k, x.v, y.k, y.v);
+        }
+
+        final int xidx = (xhc >>> lev) & 0x1f;
+        final int yidx = (yhc >>> lev) & 0x1f;
+        final int bmp = (1 << xidx) | (1 << yidx);
+
+        if (xidx == yidx) {
+            INode<K, V> subinode = new INode<>(gen, dual(x, xhc, y, yhc, lev + 5, gen));
+            return new CNode<>(gen, bmp, subinode);
+        }
+
+        return xidx < yidx ? new CNode<>(gen, bmp, x, y) : new CNode<>(gen, bmp, y, x);
+    }
+
     // this should only be called from within read-only snapshots
     @Override
     int cachedSize(final TrieMap<K, V> ct) {
@@ -136,15 +154,14 @@ final class CNode<K, V> extends CNodeBase<K, V> {
 
     MainNode<K, V> toContracted(final int lev) {
         if (array.length == 1 && lev > 0) {
-            if (array [0] instanceof SNode) {
-                SNode<K, V> sn = (SNode<K, V>) array[0];
+            if (array[0] instanceof SNode) {
+                final SNode<K, V> sn = (SNode<K, V>) array[0];
                 return sn.copyTombed();
-            } else {
-                return this;
             }
-        } else {
             return this;
         }
+
+        return this;
     }
 
     // - if the branching factor is 1 for this CNode, and the child
@@ -212,26 +229,4 @@ final class CNode<K, V> extends CNodeBase<K, V> {
         // elems.sorted.mkString(", "))
         return "CNode";
     }
-
-    static <K, V> MainNode<K,V> dual(final SNode<K, V> x, final int xhc, final SNode<K, V> y, final int yhc,
-            final int lev, final Gen gen) {
-        if (lev < 35) {
-            int xidx = (xhc >>> lev) & 0x1f;
-            int yidx = (yhc >>> lev) & 0x1f;
-            int bmp = (1 << xidx) | (1 << yidx);
-
-            if (xidx == yidx) {
-                INode<K, V> subinode = new INode<>(gen, dual(x, xhc, y, yhc, lev + 5, gen));
-                return new CNode<>(gen, bmp, subinode);
-            } else {
-                if (xidx < yidx) {
-                    return new CNode<>(gen, bmp, x, y);
-                } else {
-                    return new CNode<>(gen, bmp, y, x);
-                }
-            }
-        } else {
-            return new LNode<>(x.k, x.v, y.k, y.v);
-        }
-    }
 }