Mercurial > hg > Members > shoshi > TreeCMSv2
view src/treecms/memory/OnMemoryTree.java @ 15:22cd920986c5
commit
author | misaka |
---|---|
date | Tue, 17 May 2011 21:25:17 +0900 |
parents | fbbb7e414346 |
children | 168deb591f21 |
line wrap: on
line source
package treecms.memory; import java.util.concurrent.atomic.AtomicReferenceFieldUpdater; 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; } }