Mercurial > hg > Members > shoshi > TreeCMSv2
diff src/treecms/memory/OnMemoryTree.java @ 9:17ed97ca9960
commit
author | shoshi |
---|---|
date | Mon, 18 Apr 2011 01:07:27 +0900 |
parents | f96193babac0 |
children | 85061e874775 |
line wrap: on
line diff
--- a/src/treecms/memory/OnMemoryTree.java Thu Mar 31 02:08:44 2011 +0900 +++ b/src/treecms/memory/OnMemoryTree.java Mon Apr 18 01:07:27 2011 +0900 @@ -4,6 +4,7 @@ import java.util.List; import java.util.Map; import java.util.concurrent.atomic.AtomicReference; +import java.util.concurrent.atomic.AtomicReferenceFieldUpdater; import treecms.api.Forest; import treecms.api.Node; @@ -18,7 +19,8 @@ */ final class OnMemoryTree implements Tree { - private AtomicReference<OnMemoryNode> m_ref; + private static final AtomicReferenceFieldUpdater<OnMemoryTree,OnMemoryNode> m_refUpdater = AtomicReferenceFieldUpdater.newUpdater(OnMemoryTree.class,OnMemoryNode.class,"m_root"); + private volatile OnMemoryNode m_root; /** * コンストラクタです。 @@ -26,7 +28,7 @@ */ public OnMemoryTree(OnMemoryNode _newRoot) { - m_ref = new AtomicReference<OnMemoryNode>(_newRoot); + m_root = _newRoot; } /** @@ -36,7 +38,7 @@ @Override public Forest getForest() { - return m_ref.get().getForest(); + return m_root.getForest(); } /** @@ -46,7 +48,7 @@ @Override public NodeID getID() { - return m_ref.get().getID(); + return m_root.getID(); } /** @@ -56,7 +58,7 @@ @Override public NodeData getData() { - return m_ref.get().getData(); + return m_root.getData(); } /** @@ -66,7 +68,7 @@ @Override public Node getRoot() { - return m_ref.get(); + return m_root; } /** @@ -76,7 +78,7 @@ @Override public void add(Node _child) { - m_ref.get().add(_child); + m_root.add(_child); } /** @@ -86,7 +88,7 @@ @Override public void addAll(List<Node> _children) { - m_ref.get().addAll(_children); + m_root.addAll(_children); } /** @@ -96,7 +98,7 @@ @Override public List<Node> children() { - return m_ref.get().children(); + return m_root.children(); } /** @@ -107,7 +109,7 @@ @Override public ByteBuffer get(ByteBuffer _key) { - return m_ref.get().get(_key); + return m_root.get(_key); } /** @@ -117,7 +119,7 @@ @Override public Map<ByteBuffer,ByteBuffer> getAll() { - return m_ref.get().getAll(); + return m_root.getAll(); } /** @@ -128,7 +130,7 @@ @Override public void put(ByteBuffer _key,ByteBuffer _value) { - m_ref.get().put(_key,_value); + m_root.put(_key,_value); } /** @@ -138,7 +140,7 @@ @Override public void putAll(Map<ByteBuffer, ByteBuffer> _map) { - m_ref.get().putAll(_map); + m_root.putAll(_map); } /** @@ -148,7 +150,7 @@ @Override public void remove(ByteBuffer _key) { - m_ref.get().remove(_key); + m_root.remove(_key); } /** @@ -158,7 +160,7 @@ @Override public void remove(Node _child) { - m_ref.get().remove(_child); + m_root.remove(_child); } /** @@ -166,13 +168,13 @@ * @param _except 比較する対象 * @param _newRoot 一致した場合置き換える対象 */ - public boolean compareAndSwapRootNode(OnMemoryNode _except,OnMemoryNode _newRoot,boolean _force) + public boolean compareAndSwapRootNode(OnMemoryNode _expect,OnMemoryNode _newRoot,boolean _force) { if(_force){ - return m_ref.compareAndSet(_except,_newRoot); + m_root = _newRoot; } - m_ref.set(_newRoot); + m_refUpdater.compareAndSet(this,_expect,_newRoot); return true; }