view src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/store/index/ParentIndex.java @ 151:d9fbddf77bf6

add class Index
author one
date Sat, 22 Nov 2014 14:46:44 +0900
parents 1432adf6f490
children 20af7f25ef32
line wrap: on
line source

package jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index;

import java.util.Iterator;

import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNodeChildren;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.TreeMapOrd;
import fj.data.Option;
import fj.data.TreeMap;

public class ParentIndex {
  
  private final TreeMap<TreeNode, TreeNode> parentIndex;

  public ParentIndex() {
    parentIndex = TreeMap.empty(TreeMapOrd.treeNodeOrd);
  }

  public ParentIndex(TreeMap<TreeNode, TreeNode> parentIndex) {
    this.parentIndex = parentIndex;
  }
  
  public ParentIndex(ParentIndex parentIndex) {
    this.parentIndex = parentIndex.getParentIndex();
  }

  private TreeMap<TreeNode, TreeNode> getParentIndex() {
    return parentIndex;
  }

  public Option<TreeNode> get(TreeNode child) {
    Option<TreeNode> parentOp = parentIndex.get(child);
    return parentOp;
  }
  
  public ParentIndex set(TreeNode child, TreeNode parent){
    TreeMap<TreeNode, TreeNode> newParentIndex = parentIndex.set(child,parent);
    return new ParentIndex(newParentIndex);
  }
  
  public ParentIndex delete(TreeNode child) {
    TreeMap<TreeNode, TreeNode> newParentIndex = parentIndex.delete(child);
     return new ParentIndex(newParentIndex);
  }

  public ParentIndex deleteAllChildren(TreeNode parentNode) {
    TreeNodeChildren children = parentNode.getChildren();
    Iterator<TreeNode> childrenIterator = children.iterator();
    TreeMap<TreeNode, TreeNode> newParentIndex = parentIndex;
    for (; childrenIterator.hasNext();) {
      TreeNode child = childrenIterator.next();
      newParentIndex = newParentIndex.delete(child);
    }
    return new ParentIndex(newParentIndex);
  }

  public ParentIndex addAllChildren(TreeNode parentNode) {
    TreeNodeChildren children = parentNode.getChildren();
    Iterator<TreeNode> childrenIterator = children.iterator();
    TreeMap<TreeNode, TreeNode> newParentIndex = parentIndex;
    for (; childrenIterator.hasNext();) {
      TreeNode child = childrenIterator.next();
      newParentIndex = newParentIndex.set(child, parentNode);
    }
    return new ParentIndex(newParentIndex);
  }

}