Mercurial > hg > Members > shoshi > TreeCMSv2
view src/treecms/memory/OnMemoryTreeNode.java @ 12:fbbb7e414346
modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
author | shoshi |
---|---|
date | Wed, 11 May 2011 03:34:01 +0900 |
parents | 85061e874775 |
children | 8bf59f161b23 |
line wrap: on
line source
package treecms.memory; import java.nio.ByteBuffer; import java.util.Collections; 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.Node; import treecms.api.NodeID; import treecms.api.TreeNode; /** * DoubleLinkedなNodeであるTreeNodeのOnMemory実装です. * @author shoshi */ public class OnMemoryTreeNode implements TreeNode { public OnMemoryTreeNode m_parent; public OnMemoryNode m_node; /** * コンストラクタです. * @param _node 対象となるSingleLinkedなNode * @param _parent 親のOnMemoryTreeNode */ public OnMemoryTreeNode(OnMemoryNode _node,OnMemoryTreeNode _parent) { //とりあえず、チェック if(_node == null){ throw new NullPointerException(); } m_node = _node; //このノードがルートの場合、親はnullで構わない. m_parent = _parent; } /* * 親関連のメソッド */ @Override public NodeID getID() { return m_node.getID(); } @Override public Node getNode() { return m_node; } @Override public TreeNode getParent() { return m_parent; } @Override public Forest getForest() { return m_node.getForest(); } /* * 子供関連のメソッド */ @Override public Iterator<TreeNode> getChildren() { /* * m_node(対象ノード)のリストにはNodeが格納されており、TreeNodeのリストを取得するためにはTreeNodeで要素を構成する必要がある. */ LinkedList<TreeNode> ret = new LinkedList<TreeNode>(); for(Iterator<Node> it = m_node.getChildren();it.hasNext();){ OnMemoryNode n = (OnMemoryNode)it.next(); ret.add(new OnMemoryTreeNode(n,this)); } return Collections.unmodifiableList(ret).iterator(); } @Override public void addChild(TreeNode _child) { m_node.addChild(_child.getNode()); } @Override public void addChildren(List<TreeNode> _children) { /* * TreeNodeのリストからNodeのリストへ変換する */ LinkedList<Node> res = new LinkedList<Node>(); for(Iterator<TreeNode> it = _children.iterator();it.hasNext();){ TreeNode tn = it.next(); res.add(tn.getNode()); } m_node.addChildren(res); } @Override public void removeChild(TreeNode _child) { m_node.removeChild(_child.getNode()); } @Override public void removeChildren(List<TreeNode> _children) { LinkedList<Node> res = new LinkedList<Node>(); for(Iterator<TreeNode> it = _children.iterator();it.hasNext();){ TreeNode tn = it.next(); res.add(tn.getNode()); } m_node.removeChildren(res); } @Override public void clearChildren() { m_node.clearChildren(); } /* * 属性関連のメソッド */ @Override public ByteBuffer get(ByteBuffer _key) { return m_node.get(_key); } @Override public Map<ByteBuffer, ByteBuffer> getAll() { return m_node.getAll(); } @Override public void put(ByteBuffer _key,ByteBuffer _value) { m_node.put(_key,_value); } @Override public void putAll(Map<ByteBuffer,ByteBuffer> _map) { m_node.putAll(_map); } @Override public void remove(ByteBuffer _key) { m_node.remove(_key); } @Override public void removeAll(Set<ByteBuffer> _keySet) { m_node.removeAll(_keySet); } @Override public void clear() { m_node.clear(); } }