Mercurial > hg > Members > shoshi > TreeCMSv2
view src/treecms/memory/OnMemoryTree.java @ 11:85061e874775
commit
author | shoshi |
---|---|
date | Fri, 06 May 2011 00:42:57 +0900 |
parents | 17ed97ca9960 |
children | fbbb7e414346 |
line wrap: on
line source
package treecms.memory; import java.nio.ByteBuffer; 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; import treecms.api.NodeData; import treecms.api.NodeID; import treecms.api.Tree; import treecms.api.TreeNode; /** * オンメモリのTree実装です。 * 木構造のルートとなるNodeをメンバーとして持ち、操作はすべて転送します。 * @author shoshi */ final class OnMemoryTree implements Tree { private static final AtomicReferenceFieldUpdater<OnMemoryTree,OnMemoryNode> m_refUpdater = AtomicReferenceFieldUpdater.newUpdater(OnMemoryTree.class,OnMemoryNode.class,"m_root"); private volatile OnMemoryNode m_root; /** * コンストラクタです。 * @param _newRoot 木構造のルートノードです。 */ public OnMemoryTree(OnMemoryNode _newRoot) { m_root = _newRoot; } /** * この木構造のルートNodeを取得します. * @return ルートNode */ @Override public TreeNode getRoot() { return new OnMemoryTreeNode(m_root,null); } /** * ルートNodeを比較して置き換えます. * @param _except 比較する対象 * @param _newRoot 一致した場合置き換える対象 */ public boolean compareAndSwapRootNode(OnMemoryNode _expect,OnMemoryNode _newRoot,boolean _force) { if(_force){ m_root = _newRoot; } m_refUpdater.compareAndSet(this,_expect,_newRoot); return true; } }