annotate src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/DefaultChildren.java @ 21:848f73545c4d

add LoggingNode , LoggingAttributes , LoggingChildren , Logger
author Shoshi TAMAKI
date Sun, 06 Jan 2013 22:32:39 +0900
parents 703f0be5368a
children 9fd57b7c6adb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10
Shoshi TAMAKI
parents:
diff changeset
1 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl;
Shoshi TAMAKI
parents:
diff changeset
2
Shoshi TAMAKI
parents:
diff changeset
3 import java.util.Iterator;
Shoshi TAMAKI
parents:
diff changeset
4
Shoshi TAMAKI
parents:
diff changeset
5 import fj.P2;
21
848f73545c4d add LoggingNode , LoggingAttributes , LoggingChildren , Logger
Shoshi TAMAKI
parents: 19
diff changeset
6 import fj.data.Either;
10
Shoshi TAMAKI
parents:
diff changeset
7 import fj.data.List;
Shoshi TAMAKI
parents:
diff changeset
8
Shoshi TAMAKI
parents:
diff changeset
9 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Children;
Shoshi TAMAKI
parents:
diff changeset
10 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
13
Shoshi TAMAKI
parents: 12
diff changeset
11 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.IterableWrapper;
10
Shoshi TAMAKI
parents:
diff changeset
12
12
df42dca47c3e rename and commit
Shoshi TAMAKI
parents: 10
diff changeset
13 public class DefaultChildren implements Children
10
Shoshi TAMAKI
parents:
diff changeset
14 {
13
Shoshi TAMAKI
parents: 12
diff changeset
15 private final List<DefaultNode> children;
Shoshi TAMAKI
parents: 12
diff changeset
16 private static final List<DefaultNode> EMPTY = List.nil();
10
Shoshi TAMAKI
parents:
diff changeset
17
21
848f73545c4d add LoggingNode , LoggingAttributes , LoggingChildren , Logger
Shoshi TAMAKI
parents: 19
diff changeset
18 public enum Error{
848f73545c4d add LoggingNode , LoggingAttributes , LoggingChildren , Logger
Shoshi TAMAKI
parents: 19
diff changeset
19 INVALID_POSITION;
848f73545c4d add LoggingNode , LoggingAttributes , LoggingChildren , Logger
Shoshi TAMAKI
parents: 19
diff changeset
20 }
848f73545c4d add LoggingNode , LoggingAttributes , LoggingChildren , Logger
Shoshi TAMAKI
parents: 19
diff changeset
21
12
df42dca47c3e rename and commit
Shoshi TAMAKI
parents: 10
diff changeset
22 public DefaultChildren()
10
Shoshi TAMAKI
parents:
diff changeset
23 {
Shoshi TAMAKI
parents:
diff changeset
24 this(EMPTY);
Shoshi TAMAKI
parents:
diff changeset
25 }
Shoshi TAMAKI
parents:
diff changeset
26
13
Shoshi TAMAKI
parents: 12
diff changeset
27 public DefaultChildren(List<DefaultNode> _children)
10
Shoshi TAMAKI
parents:
diff changeset
28 {
Shoshi TAMAKI
parents:
diff changeset
29 children = _children;
Shoshi TAMAKI
parents:
diff changeset
30 }
Shoshi TAMAKI
parents:
diff changeset
31
19
703f0be5368a added attribute cache
Shoshi TAMAKI
parents: 13
diff changeset
32 @Override
703f0be5368a added attribute cache
Shoshi TAMAKI
parents: 13
diff changeset
33 public int size()
703f0be5368a added attribute cache
Shoshi TAMAKI
parents: 13
diff changeset
34 {
703f0be5368a added attribute cache
Shoshi TAMAKI
parents: 13
diff changeset
35 return children.length();
703f0be5368a added attribute cache
Shoshi TAMAKI
parents: 13
diff changeset
36 }
703f0be5368a added attribute cache
Shoshi TAMAKI
parents: 13
diff changeset
37
13
Shoshi TAMAKI
parents: 12
diff changeset
38 public DefaultChildren add(DefaultNode _newNode)
10
Shoshi TAMAKI
parents:
diff changeset
39 {
12
df42dca47c3e rename and commit
Shoshi TAMAKI
parents: 10
diff changeset
40 return new DefaultChildren(children.snoc(_newNode));
10
Shoshi TAMAKI
parents:
diff changeset
41 }
Shoshi TAMAKI
parents:
diff changeset
42
21
848f73545c4d add LoggingNode , LoggingAttributes , LoggingChildren , Logger
Shoshi TAMAKI
parents: 19
diff changeset
43 public Either<Error,DefaultChildren> insert(DefaultNode _newNode,int _pos)
10
Shoshi TAMAKI
parents:
diff changeset
44 {
21
848f73545c4d add LoggingNode , LoggingAttributes , LoggingChildren , Logger
Shoshi TAMAKI
parents: 19
diff changeset
45 if(!check(_pos)){
848f73545c4d add LoggingNode , LoggingAttributes , LoggingChildren , Logger
Shoshi TAMAKI
parents: 19
diff changeset
46 return Either.left(Error.INVALID_POSITION);
848f73545c4d add LoggingNode , LoggingAttributes , LoggingChildren , Logger
Shoshi TAMAKI
parents: 19
diff changeset
47 }
10
Shoshi TAMAKI
parents:
diff changeset
48
13
Shoshi TAMAKI
parents: 12
diff changeset
49 P2<List<DefaultNode>,List<DefaultNode>> split = children.splitAt(_pos);
Shoshi TAMAKI
parents: 12
diff changeset
50 List<DefaultNode> newChildren = split._1().snoc(_newNode).append(split._2());
10
Shoshi TAMAKI
parents:
diff changeset
51
21
848f73545c4d add LoggingNode , LoggingAttributes , LoggingChildren , Logger
Shoshi TAMAKI
parents: 19
diff changeset
52 return Either.right(new DefaultChildren(newChildren));
10
Shoshi TAMAKI
parents:
diff changeset
53 }
Shoshi TAMAKI
parents:
diff changeset
54
21
848f73545c4d add LoggingNode , LoggingAttributes , LoggingChildren , Logger
Shoshi TAMAKI
parents: 19
diff changeset
55 public Either<Error,DefaultChildren> delete(int _pos)
10
Shoshi TAMAKI
parents:
diff changeset
56 {
21
848f73545c4d add LoggingNode , LoggingAttributes , LoggingChildren , Logger
Shoshi TAMAKI
parents: 19
diff changeset
57 if(!check(_pos)){
848f73545c4d add LoggingNode , LoggingAttributes , LoggingChildren , Logger
Shoshi TAMAKI
parents: 19
diff changeset
58 return Either.left(Error.INVALID_POSITION);
848f73545c4d add LoggingNode , LoggingAttributes , LoggingChildren , Logger
Shoshi TAMAKI
parents: 19
diff changeset
59 }
10
Shoshi TAMAKI
parents:
diff changeset
60
13
Shoshi TAMAKI
parents: 12
diff changeset
61 P2<List<DefaultNode>,List<DefaultNode>> split = children.splitAt(_pos);
Shoshi TAMAKI
parents: 12
diff changeset
62 List<DefaultNode> newChildren = split._1().init().append(split._2());
10
Shoshi TAMAKI
parents:
diff changeset
63
21
848f73545c4d add LoggingNode , LoggingAttributes , LoggingChildren , Logger
Shoshi TAMAKI
parents: 19
diff changeset
64 return Either.right(new DefaultChildren(newChildren));
10
Shoshi TAMAKI
parents:
diff changeset
65 }
Shoshi TAMAKI
parents:
diff changeset
66
21
848f73545c4d add LoggingNode , LoggingAttributes , LoggingChildren , Logger
Shoshi TAMAKI
parents: 19
diff changeset
67 public boolean check(int _pos)
10
Shoshi TAMAKI
parents:
diff changeset
68 {
Shoshi TAMAKI
parents:
diff changeset
69 if(children.length() < _pos){
21
848f73545c4d add LoggingNode , LoggingAttributes , LoggingChildren , Logger
Shoshi TAMAKI
parents: 19
diff changeset
70 return false;
10
Shoshi TAMAKI
parents:
diff changeset
71 }
21
848f73545c4d add LoggingNode , LoggingAttributes , LoggingChildren , Logger
Shoshi TAMAKI
parents: 19
diff changeset
72
848f73545c4d add LoggingNode , LoggingAttributes , LoggingChildren , Logger
Shoshi TAMAKI
parents: 19
diff changeset
73 return true;
10
Shoshi TAMAKI
parents:
diff changeset
74 }
Shoshi TAMAKI
parents:
diff changeset
75
Shoshi TAMAKI
parents:
diff changeset
76 @Override
Shoshi TAMAKI
parents:
diff changeset
77 public Iterator<Node> iterator()
Shoshi TAMAKI
parents:
diff changeset
78 {
13
Shoshi TAMAKI
parents: 12
diff changeset
79 return (new IterableWrapper<Node>(children)).iterator();
10
Shoshi TAMAKI
parents:
diff changeset
80 }
Shoshi TAMAKI
parents:
diff changeset
81 }