Mercurial > hg > Members > shoshi > TreeCMSv2
diff src/treecms/memory/OnMemoryMonotonicTreeNode.java @ 16:bb9760760744
commit
author | shoshi |
---|---|
date | Sat, 21 May 2011 04:46:00 +0900 |
parents | 22cd920986c5 |
children | 168deb591f21 |
line wrap: on
line diff
--- a/src/treecms/memory/OnMemoryMonotonicTreeNode.java Tue May 17 21:25:17 2011 +0900 +++ b/src/treecms/memory/OnMemoryMonotonicTreeNode.java Sat May 21 04:46:00 2011 +0900 @@ -1,20 +1,19 @@ package treecms.memory; import java.nio.ByteBuffer; + import java.util.Iterator; -import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; import treecms.api.Forest; import treecms.api.MonotonicTreeNode; -import treecms.api.Node; import treecms.api.NodeAttributes; import treecms.api.NodeChildren; import treecms.api.NodeID; import treecms.api.SingleNode; -import treecms.api.TreeNode; import treecms.tree.util.NodeChildrenImpl; +import treecms.tree.util.NodeData; /** * SingleLinkedなNodeをラップしたDoubleLinkedなNodeの実装です. @@ -24,6 +23,7 @@ { private OnMemoryNode m_node; private OnMemoryMonotonicTreeNode m_parent; + private OnMemoryMonotonicTree m_tree; /** * コンストラクタです. @@ -33,17 +33,16 @@ */ public OnMemoryMonotonicTreeNode(OnMemoryNode _target,OnMemoryMonotonicTreeNode _parent) { - if(_target == null){ - throw new NullPointerException("_target must not be null."); - } - m_node = _target; m_parent = _parent; } - /* - * 親関連のメソッド - */ + public OnMemoryMonotonicTreeNode(OnMemoryNode _root,OnMemoryMonotonicTree _tree) + { + m_node = _root; + m_tree = _tree; + m_parent = null; + } @Override public NodeID getID() @@ -106,13 +105,26 @@ @Override public void removeAll(Set<ByteBuffer> _keys) { - m_node.removeAll(_keys); + NodeData<SingleNode> d = new NodeData<SingleNode>(m_node); + d.removeAll(_keys); + + cloneAndTransmit(d); } @Override public void clearAttributes() { - m_node.clearAttributes(); + NodeData<SingleNode> d = new NodeData<SingleNode>(m_node); + d.clearAttributes(); + + cloneAndTransmit(d); + } + + public void cloneAndTransmit(NodeData<SingleNode> _d) + { + OnMemoryForest f = (OnMemoryForest)m_node.getForest(); + OnMemoryNode clone = f.createNode(m_node.getID().update(),_d); + transmit(m_node,clone); } /** @@ -128,15 +140,13 @@ public void transmit(OnMemoryNode _orig,OnMemoryNode _edit) { OnMemoryForest f = (OnMemoryForest)m_node.getForest(); - OnMemoryNode clone = f.createNode(m_node.getID(),null); - clone.replaceChild(_orig,_edit); + OnMemoryNode clone = f.createNode(m_node.getID().update(),null); + clone.replace(_edit); if(m_parent != null){ m_parent.transmit(m_node,(OnMemoryNode)clone); return; } - - //なにかしたい } /* @@ -185,7 +195,7 @@ public MonotonicTreeNode remove(int _index) { SingleNode n = m_node.remove(_index); - return new OnMemoryMonotonicTreeNode((OnMemoryNode)n,null); + return new OnMemoryMonotonicTreeNode((OnMemoryNode)n,(OnMemoryMonotonicTreeNode)null); } @Override @@ -193,4 +203,55 @@ { m_node.clearChildren(); } + + @Override + public Map<ByteBuffer, ByteBuffer> asMap() + { + return m_node.asMap(); + } + + @Override + public Set<ByteBuffer> getKeySet() + { + return m_node.getKeySet(); + } + + @Override + public Set<String> getUUIDSet() + { + return m_node.getUUIDSet(); + } + + @Override + public MonotonicTreeNode get(String _uuid) + { + SingleNode n = m_node.get(_uuid); + return new OnMemoryMonotonicTreeNode((OnMemoryNode)n,this); + } + + @Override + public MonotonicTreeNode get(int _index) + { + SingleNode n = m_node.get(_index); + return new OnMemoryMonotonicTreeNode((OnMemoryNode)n,this); + } + + @Override + public MonotonicTreeNode replace(MonotonicTreeNode _newChild) + { + SingleNode n = m_node.replace(_newChild.getNode()); + return new OnMemoryMonotonicTreeNode((OnMemoryNode)n,(OnMemoryMonotonicTreeNode)null); + } + + @Override + public boolean contains(String _id) + { + return m_node.contains(_id); + } + + @Override + public boolean swap(String _uuid1, String _uuid2) + { + return m_node.swap(_uuid1,_uuid2); + } }