Mercurial > hg > Members > shoshi > TreeCMSv2
diff src/treecms/memory/OnMemoryMonotonicTreeNode.java @ 21:f3150b37f9be
commit
author | shoshi |
---|---|
date | Mon, 06 Jun 2011 21:49:04 +0900 |
parents | 084de6909451 |
children | fa784faafc78 |
line wrap: on
line diff
--- a/src/treecms/memory/OnMemoryMonotonicTreeNode.java Wed Jun 01 15:35:50 2011 +0900 +++ b/src/treecms/memory/OnMemoryMonotonicTreeNode.java Mon Jun 06 21:49:04 2011 +0900 @@ -11,6 +11,7 @@ import treecms.api.Forest; import treecms.api.MonotonicTreeNode; +import treecms.api.Node; import treecms.api.NodeAttributes; import treecms.api.NodeChildren; import treecms.api.NodeID; @@ -23,20 +24,20 @@ */ public class OnMemoryMonotonicTreeNode implements MonotonicTreeNode { - private OnMemoryNode m_node; + private Node m_node; private static final AtomicReferenceFieldUpdater<OnMemoryMonotonicTreeNode,OnMemoryMonotonicTreeNode> m_parentUpdater = AtomicReferenceFieldUpdater.newUpdater(OnMemoryMonotonicTreeNode.class,OnMemoryMonotonicTreeNode.class,"m_parent"); private OnMemoryMonotonicTreeNode m_parent; - private final Map<NodeID,OnMemoryMonotonicTreeNode> m_cache; + private final Map<String,OnMemoryMonotonicTreeNode> m_cache; public OnMemoryMonotonicTreeNode(OnMemoryNode _target,OnMemoryMonotonicTreeNode _parent) { m_node = _target; m_parent = _parent; - m_cache = new ConcurrentHashMap<NodeID,OnMemoryMonotonicTreeNode>(); + m_cache = new ConcurrentHashMap<String,OnMemoryMonotonicTreeNode>(); } @Override @@ -72,7 +73,7 @@ @Override public synchronized void put(ByteBuffer _key, ByteBuffer _value) { - NodeData<OnMemoryNode> d = new NodeData<OnMemoryNode>(m_node); + NodeData<Node> d = new NodeData<Node>(m_node,m_node); d.put(_key,_value); cloneAndTransmit(d); @@ -81,7 +82,7 @@ @Override public synchronized void putAll(NodeAttributes _map) { - NodeData<OnMemoryNode> d = new NodeData<OnMemoryNode>(m_node); + NodeData<Node> d = new NodeData<Node>(m_node,m_node); d.putAll(_map); cloneAndTransmit(d); @@ -90,7 +91,7 @@ @Override public synchronized void remove(ByteBuffer _key) { - NodeData<OnMemoryNode> d = new NodeData<OnMemoryNode>(m_node); + NodeData<Node> d = new NodeData<Node>(m_node,m_node); d.remove(_key); cloneAndTransmit(d); @@ -99,7 +100,7 @@ @Override public synchronized void removeAll(Set<ByteBuffer> _keys) { - NodeData<OnMemoryNode> d = new NodeData<OnMemoryNode>(m_node); + NodeData<Node> d = new NodeData<Node>(m_node,m_node); d.removeAll(_keys); cloneAndTransmit(d); @@ -108,32 +109,22 @@ @Override public synchronized void clearAttributes() { - NodeData<OnMemoryNode> d = new NodeData<OnMemoryNode>(m_node); + NodeData<Node> d = new NodeData<Node>(m_node,m_node); d.clearAttributes(); cloneAndTransmit(d); } - public synchronized void cloneAndTransmit(NodeData<OnMemoryNode> _d) + public synchronized void cloneAndTransmit(NodeData<Node> _d) { OnMemoryForest f = (OnMemoryForest)m_node.getForest(); - OnMemoryNode clone = f.createNode(m_node.getID().update(),_d); + Node clone = f.createNode(m_node.getID().update(),_d); transmit(m_node,clone); m_node = clone; } - /** - * このMonotonicNodeに変更が加えられたら,こちらのメソッドが呼び出されます. - * 非破壊的に変更するために,SingleLinkedNodeのクローンを作成し,親にも複製を依頼します. - * - * RootNodeまで伝搬すると親のNodeはnullとなる.親Nodeは担当するMonotonicTreeのオブジェクトを保持しており,そこにRootNodeが変更されたことを通知する. - * 通知が終わり,処理が戻ってきた時に自身のOnMemoryNodeをクローンした新しいものに書き換えます. - * - * _fromがnullの場合は,自身が編集元であることを示します. - * @param _from 編集元のOnMemoryMonotonicTreeNode - */ - public synchronized void transmit(OnMemoryNode _orig,OnMemoryNode _edit) + public synchronized void transmit(Node _orig,Node _edit) { OnMemoryForest f = (OnMemoryForest)m_node.getForest(); OnMemoryNode clone = f.createNode(m_node.getID().update(),null); @@ -160,11 +151,17 @@ } @Override + public synchronized Node getNode() + { + return m_node; + } + + @Override public synchronized List<MonotonicTreeNode> getList() { //NodeのリストよりMonotonicTreeNodeのリストを作成する. NodeChildren<MonotonicTreeNode> res = new NodeChildrenImpl<MonotonicTreeNode>(); - for(Iterator<OnMemoryNode> it = m_node.getList().iterator();it.hasNext();){ + for(Iterator<Node> it = m_node.getList().iterator();it.hasNext();){ OnMemoryNode n = (OnMemoryNode)it.next(); res.add(getCache(n)); } @@ -176,7 +173,7 @@ public synchronized boolean add(MonotonicTreeNode _n) { OnMemoryMonotonicTreeNode mono = (OnMemoryMonotonicTreeNode)_n; - NodeData<OnMemoryNode> d = new NodeData<OnMemoryNode>(m_node); + NodeData<Node> d = new NodeData<Node>(m_node,m_node); boolean ret = d.add(mono.m_node); if(ret){ cloneAndTransmit(d); @@ -189,13 +186,13 @@ public synchronized boolean addAll(NodeChildren<MonotonicTreeNode> _list) { //MotonicTreeNodeのリストからNodeのリストを作成する. - NodeChildren<OnMemoryNode> c = new NodeChildrenImpl<OnMemoryNode>(); + NodeChildren<Node> c = new NodeChildrenImpl<Node>(); for(Iterator<MonotonicTreeNode> it = _list.getList().iterator();it.hasNext();){ OnMemoryMonotonicTreeNode mono = (OnMemoryMonotonicTreeNode)it.next(); c.add(mono.m_node); } - NodeData<OnMemoryNode> d = new NodeData<OnMemoryNode>(m_node); + NodeData<Node> d = new NodeData<Node>(m_node,m_node); boolean ret = d.addAll(c); if(ret){ cloneAndTransmit(d); @@ -207,8 +204,8 @@ @Override public synchronized MonotonicTreeNode remove(int _index) { - NodeData<OnMemoryNode> d = new NodeData<OnMemoryNode>(m_node); - OnMemoryNode n = d.remove(_index); + NodeData<Node> d = new NodeData<Node>(m_node,m_node); + OnMemoryNode n = (OnMemoryNode) d.remove(_index); if(n != null){ cloneAndTransmit(d); return new OnMemoryMonotonicTreeNode((OnMemoryNode)n,null); @@ -220,7 +217,7 @@ @Override public synchronized void clearChildren() { - NodeData<OnMemoryNode> d = new NodeData<OnMemoryNode>(m_node); + NodeData<Node> d = new NodeData<Node>(m_node,m_node); d.clearChildren(); cloneAndTransmit(d); @@ -241,7 +238,7 @@ @Override public synchronized MonotonicTreeNode get(int _index) { - OnMemoryNode n = m_node.get(_index); + OnMemoryNode n = (OnMemoryNode) m_node.get(_index); return getCache(n); } @@ -249,8 +246,8 @@ public synchronized MonotonicTreeNode replace(MonotonicTreeNode _newChild) { OnMemoryMonotonicTreeNode mono = (OnMemoryMonotonicTreeNode)_newChild; - NodeData<OnMemoryNode> d = new NodeData<OnMemoryNode>(m_node); - OnMemoryNode n = d.replace(mono.m_node); + NodeData<Node> d = new NodeData<Node>(m_node,m_node); + OnMemoryNode n = (OnMemoryNode) d.replace(mono.m_node); if(n != null){ cloneAndTransmit(d); @@ -281,7 +278,7 @@ @Override public synchronized MonotonicTreeNode get(String _fid) { - OnMemoryNode n = m_node.get(_fid); + OnMemoryNode n = (OnMemoryNode) m_node.get(_fid); OnMemoryMonotonicTreeNode mono = getCache(n); return mono; @@ -290,8 +287,8 @@ @Override public synchronized MonotonicTreeNode remove(String _fid) { - NodeData<OnMemoryNode> d = new NodeData<OnMemoryNode>(m_node); - OnMemoryNode n = d.remove(_fid); + NodeData<Node> d = new NodeData<Node>(m_node,m_node); + OnMemoryNode n = (OnMemoryNode) d.remove(_fid); cloneAndTransmit(d);