BUG-7464: Hide LNode's listmap
[yangtools.git] / third-party / triemap / src / main / java / org / opendaylight / yangtools / triemap / MainNode.java
index f6a6fd25b98a43e6b86fd27ec08154690c060e09..fcc747160fe66c3b788cb4e85fb90b9061b63c2a 100644 (file)
@@ -1,36 +1,48 @@
-/*                     __                                               *\
- **     ________ ___   / /  ___     Scala API                            **
- **    / __/ __// _ | / /  / _ |    (c) 2003-2012, LAMP/EPFL             **
- **  __\ \/ /__/ __ |/ /__/ __ |    http://scala-lang.org/               **
- ** /____/\___/_/ |_/____/_/ | |                                         **
- **                          |/                                          **
-\*                                                                      */
-
+/*
+ * (C) Copyright 2016 Pantheon Technologies, s.r.o. and others.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.opendaylight.yangtools.triemap;
 
 import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
 
 abstract class MainNode<K, V> extends BasicNode {
+    @SuppressWarnings("rawtypes")
+    private static final AtomicReferenceFieldUpdater<MainNode, MainNode> PREV_UPDATER =
+        AtomicReferenceFieldUpdater.newUpdater(MainNode.class, MainNode.class, "prev");
 
-    public static final AtomicReferenceFieldUpdater<MainNode, MainNode> updater = AtomicReferenceFieldUpdater.newUpdater (MainNode.class, MainNode.class, "prev");
-
-    public volatile MainNode<K, V> prev = null;
+    private volatile MainNode<K, V> prev;
 
-    public abstract int cachedSize (Object ct);
+    MainNode() {
+        this.prev = null;
+    }
 
-    public boolean CAS_PREV (final MainNode<K, V> oldval, final MainNode<K, V> nval) {
-        return updater.compareAndSet (this, oldval, nval);
+    MainNode(final MainNode<K, V> prev) {
+        this.prev = prev;
     }
 
-    public void WRITE_PREV (final MainNode<K, V> nval) {
-        updater.set (this, nval);
+    abstract int cachedSize(TrieMap<K, V> ct);
+
+    final boolean CAS_PREV(final MainNode<K, V> oldval, final MainNode<K, V> nval) {
+        return PREV_UPDATER.compareAndSet(this, oldval, nval);
     }
 
-    // do we need this? unclear in the javadocs...
-    // apparently not - volatile reads are supposed to be safe
-    // regardless of whether there are concurrent ARFU updates
-    public MainNode<K, V> READ_PREV () {
-        return updater.get (this);
+    final void WRITE_PREV(final MainNode<K, V> nval) {
+        prev = nval;
     }
 
+    final MainNode<K, V> READ_PREV() {
+        return prev;
+    }
 }