Mercurial > hg > Members > shoshi > TreeCMSv2
view src/treecms/memory/OnMemoryMonotonicTree.java @ 17:168deb591f21
commit
author | shoshi |
---|---|
date | Tue, 24 May 2011 00:33:12 +0900 |
parents | bb9760760744 |
children | f3150b37f9be |
line wrap: on
line source
package treecms.memory; import treecms.api.MonotonicTree; import treecms.api.MonotonicTreeNode; import treecms.api.SingleNode; import treecms.api.Tree; import treecms.merger.Merger; import treecms.merger.ReplaceMerger; public class OnMemoryMonotonicTree implements MonotonicTree { private volatile OnMemoryTree m_tree; private OnMemoryNode m_old; private OnMemoryMonotonicTreeNode m_root; private static final Merger<SingleNode> m_merger = new ReplaceMerger<SingleNode>(); public OnMemoryMonotonicTree(OnMemoryTree _tree) { m_tree = _tree; m_old = (OnMemoryNode)m_tree.getRoot().getNode(); m_root = new OnMemoryMonotonicTreeNode((OnMemoryNode)m_old,null); } @Override public boolean commit(boolean _force) { return m_tree.compareAndSwapRootNode(m_old,(OnMemoryNode)m_root.getNode(),_force); } @Override public boolean pull() { m_old = (OnMemoryNode)m_tree.getRoot().getNode(); return true; } @Override public boolean check() { return m_tree.compareAndSwapRootNode(m_old,m_old,false); } @Override public void merge() { //merge here m_old = (OnMemoryNode)m_merger.merge(m_tree.getRoot().getNode(),m_root.getNode()); } @Override public MonotonicTreeNode getRoot() { return this.m_root; } @Override public Tree getTree() { return (Tree)m_tree; } }