From 88a92ba9395d82a38dd2250451a2c88bfe9ed63f Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Mon, 2 Jan 2017 18:11:15 +0100 Subject: [PATCH] BUG-7464: clean up CNode.dual() call convention Update package-protected entrypoint to not require the second SNode, as it can be easily instantiated. This makes the callers a bit less verbose and allows us to adjust the recursive part as needed. Change-Id: Ic9b97fe23143b3a5cdab57750958237072dcda1e Signed-off-by: Robert Varga --- .../java/org/opendaylight/yangtools/triemap/CNode.java | 10 +++++++--- .../java/org/opendaylight/yangtools/triemap/INode.java | 6 ++---- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/third-party/triemap/src/main/java/org/opendaylight/yangtools/triemap/CNode.java b/third-party/triemap/src/main/java/org/opendaylight/yangtools/triemap/CNode.java index 2f25b6cc16..9b20a1bb03 100644 --- a/third-party/triemap/src/main/java/org/opendaylight/yangtools/triemap/CNode.java +++ b/third-party/triemap/src/main/java/org/opendaylight/yangtools/triemap/CNode.java @@ -42,7 +42,12 @@ final class CNode extends MainNode { this(gen, 0, EMPTY_ARRAY); } - static MainNode dual(final SNode x, final int xhc, final SNode y, final int yhc, + static MainNode dual(final SNode x, final K k, final V v, final int hc, final int lev, + final Gen gen) { + return dual(x, x.hc, new SNode<>(k, v, hc), hc, lev, gen); + } + + private static MainNode dual(final SNode x, final int xhc, final SNode y, final int yhc, final int lev, final Gen gen) { if (lev >= 35) { return new LNode<>(x.k, x.v, y.k, y.v); @@ -53,8 +58,7 @@ final class CNode extends MainNode { final int bmp = (1 << xidx) | (1 << yidx); if (xidx == yidx) { - INode subinode = new INode<>(gen, dual(x, xhc, y, yhc, lev + 5, gen)); - return new CNode<>(gen, bmp, subinode); + return new CNode<>(gen, bmp, new INode<>(gen, dual(x, xhc, y, yhc, lev + 5, gen))); } return xidx < yidx ? new CNode<>(gen, bmp, x, y) : new CNode<>(gen, bmp, y, x); diff --git a/third-party/triemap/src/main/java/org/opendaylight/yangtools/triemap/INode.java b/third-party/triemap/src/main/java/org/opendaylight/yangtools/triemap/INode.java index af9a8a2bd6..7031b396c5 100644 --- a/third-party/triemap/src/main/java/org/opendaylight/yangtools/triemap/INode.java +++ b/third-party/triemap/src/main/java/org/opendaylight/yangtools/triemap/INode.java @@ -164,8 +164,7 @@ final class INode extends BasicNode { } final CNode rn = (cn.gen == gen) ? cn : cn.renewed(gen, ct); - final MainNode nn = rn.updatedAt(pos, inode(CNode.dual(sn, sn.hc, new SNode<>(k, v, hc), - hc, lev + 5, gen)), gen); + final MainNode nn = rn.updatedAt(pos, inode(CNode.dual(sn, k, v, hc, lev + 5, gen)), gen); return GCAS (cn, nn, ct); } } else { @@ -207,8 +206,7 @@ final class INode extends BasicNode { private Optional insertDual(final TrieMap ct, final CNode cn, final int pos, final SNode sn, final K k, final V v, final int hc, final int lev) { final CNode rn = (cn.gen == gen) ? cn : cn.renewed(gen, ct); - final MainNode nn = rn.updatedAt(pos, inode(CNode.dual(sn, sn.hc, new SNode<>(k, v, hc), - hc, lev + 5, gen)), gen); + final MainNode nn = rn.updatedAt(pos, inode(CNode.dual(sn, k, v, hc, lev + 5, gen)), gen); return GCAS(cn, nn, ct) ? Optional.empty() : null; } -- 2.36.6