From de63488e36510d2120aebcb07a5bde5a7bc72ebe Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Sun, 1 Jan 2017 19:22:24 +0100 Subject: [PATCH 1/1] BUG-7464: remove TrieMap.nonReadOnly() This is a superfluous utility method, remove it and align call sites. Change-Id: I65266640bc74b2548b56a4712534b135bb92bcf0 Signed-off-by: Robert Varga --- .../opendaylight/yangtools/triemap/INode.java | 18 ++++----- .../yangtools/triemap/TrieMap.java | 39 ++++++------------- 2 files changed, 20 insertions(+), 37 deletions(-) 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 2e8efe6524..2be06f0ad5 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 @@ -88,7 +88,7 @@ final class INode extends BasicNode { // ==> if `ctr.gen` = `gen` then they are both equal to G. // ==> otherwise, we know that either `ctr.gen` > G, `gen` < G, // or both - if ((ctr.gen == gen) && ct.nonReadOnly()) { + if (ctr.gen == gen && !ct.isReadOnly()) { // try to commit if (m.CAS_PREV(prev, null)) { return m; @@ -415,17 +415,17 @@ final class INode extends BasicNode { private Object cleanReadOnly(final TNode tn, final int lev, final INode parent, final TrieMap ct, final K k, final int hc) { - if (ct.nonReadOnly()) { - // used to be throw RestartException - clean(parent, ct, lev - 5); - return RESTART; - } + if (ct.isReadOnly()) { + if (tn.hc == hc && ct.equal(tn.k, k)) { + return tn.v; + } - if (tn.hc == hc && ct.equal(tn.k, k)) { - return tn.v; + return null; } - return null; + // used to be throw RestartException + clean(parent, ct, lev - 5); + return RESTART; } /** diff --git a/third-party/triemap/src/main/java/org/opendaylight/yangtools/triemap/TrieMap.java b/third-party/triemap/src/main/java/org/opendaylight/yangtools/triemap/TrieMap.java index f0083d39fa..8a2b674ef9 100644 --- a/third-party/triemap/src/main/java/org/opendaylight/yangtools/triemap/TrieMap.java +++ b/third-party/triemap/src/main/java/org/opendaylight/yangtools/triemap/TrieMap.java @@ -15,6 +15,7 @@ */ package org.opendaylight.yangtools.triemap; +import com.google.common.base.Preconditions; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; @@ -88,10 +89,8 @@ public final class TrieMap extends AbstractMap implements Concurrent return new INode<>(gen, new CNode<>(gen)); } - final boolean CAS_ROOT (final Object ov, final Object nv) { - if (isReadOnly()) { - throw new IllegalStateException("Attempted to modify a read-only snapshot"); - } + final boolean CAS_ROOT(final Object ov, final Object nv) { + Preconditions.checkState(!readOnly, "Attempted to modify a read-only snapshot"); return ROOT_UPDATER.compareAndSet (this, ov, nv); } @@ -227,7 +226,7 @@ public final class TrieMap extends AbstractMap implements Concurrent * otherwise. Used by Map-type methods for quick check. */ private void ensureReadWrite() { - if (isReadOnly()) { + if (readOnly) { throw new UnsupportedOperationException("Attempted to modify a read-only view"); } } @@ -236,10 +235,6 @@ public final class TrieMap extends AbstractMap implements Concurrent return readOnly; } - boolean nonReadOnly() { - return !readOnly; - } - /* public methods */ /** @@ -279,7 +274,7 @@ public final class TrieMap extends AbstractMap implements Concurrent */ public TrieMap readOnlySnapshot() { // Is it a snapshot of a read-only snapshot? - if (isReadOnly()) { + if (readOnly) { return this; } @@ -379,12 +374,8 @@ public final class TrieMap extends AbstractMap implements Concurrent * * @return */ - Iterator> iterator () { - if (!nonReadOnly()) { - return readOnlySnapshot().readOnlyIterator(); - } - - return new TrieMapIterator<> (0, this); + Iterator> iterator() { + return readOnly ? new TrieMapReadOnlyIterator<>(0, this) : new TrieMapIterator<>(0, this); } /*** @@ -393,12 +384,8 @@ public final class TrieMap extends AbstractMap implements Concurrent * * @return */ - Iterator> readOnlyIterator () { - if (nonReadOnly()) { - return readOnlySnapshot().readOnlyIterator(); - } - - return new TrieMapReadOnlyIterator<>(0, this); + Iterator> readOnlyIterator() { + return new TrieMapReadOnlyIterator<>(0, readOnly ? this : readOnlySnapshot()); } private int cachedSize() { @@ -408,11 +395,7 @@ public final class TrieMap extends AbstractMap implements Concurrent @Override public int size() { - if (nonReadOnly()) { - return readOnlySnapshot().size (); - } - - return cachedSize(); + return readOnly ? cachedSize() : readOnlySnapshot().size(); } @Override @@ -759,7 +742,7 @@ public final class TrieMap extends AbstractMap implements Concurrent outputStream.defaultWriteObject(); final Map ro = readOnlySnapshot(); - outputStream.writeBoolean(isReadOnly()); + outputStream.writeBoolean(readOnly); outputStream.writeInt(ro.size()); for (Entry e : ro.entrySet()) { -- 2.36.6