annotate src/main/java/jungle/core/graph/simple/SimpleVertex.java @ 8:abed5bd92fcb

commit
author shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
date Tue, 03 Jul 2012 18:59:28 +0900
parents c3c65308a11b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 package jungle.core.graph.simple;
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2
8
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
3 import java.util.Iterator;
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
4 import java.util.concurrent.atomic.AtomicReference;
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
5 import fj.Ord;
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
6 import fj.P2;
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
7 import fj.data.Option;
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
8 import fj.data.TreeMap;
4
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 import jungle.core.graph.Graph;
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 import jungle.core.graph.Vertex;
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 import jungle.core.graph.Vertexes;
8
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
12 import jungle.util.Pair;
4
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
13
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 public class SimpleVertex implements Vertex
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 {
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 private String id;
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 private final SimpleGraph parent;
8
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
18 private final AtomicReference<TreeMap<String,String>> propertiesHolder;
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
19 private final AtomicReference<TreeMap<String,SimpleVertexes>> relationsHolder;
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
20
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
21 private static final TreeMap<String,String> EMPTY_PROPERTIES_MAP = TreeMap.empty(Ord.stringOrd);
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
22 private static final TreeMap<String,SimpleVertexes> EMPTY_RELATIONS_MAP = TreeMap.empty(Ord.stringOrd);
4
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
23
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 public SimpleVertex(SimpleGraph _parent,String _id)
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 {
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 id = _id;
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 parent = _parent;
8
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
28 propertiesHolder = new AtomicReference<TreeMap<String,String>>(EMPTY_PROPERTIES_MAP);
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
29 relationsHolder = new AtomicReference<TreeMap<String,SimpleVertexes>>(EMPTY_RELATIONS_MAP);
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
30 }
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
31
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
32 public SimpleVertex(SimpleGraph _parent,String _id,SimpleVertex _template)
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
33 {
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
34 id = _id;
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
35 parent = _parent;
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
36
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
37 //get snapshot
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
38 TreeMap<String,String> snapshotProperties = _template.
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
39
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
40 propertiesHolder = new AtomicReference<TreeMap<String,String>>();
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
41 relationsHolder = new AtomicReference<TreeMap<String,SimpleVertexes>>();
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
42 }
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
43
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
44 private Pair<TreeMap<String,String>,TreeMap<String,SimpleVertexes>> createVertexSnapshot()
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
45 {
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
46 TreeMap<String,String> snapshotProperties = propertiesHolder.get();
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
47 TreeMap<String,SimpleVertexes> snapshotRelations = relationsHolder.get();
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
48
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
49 return new Pair<TreeMap<Stirng,String>>
4
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 }
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
51
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 void setID(String _id)
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 {
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 id = _id;
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 }
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
56
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 @Override
7
c3c65308a11b removed some package and added Graph API
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
58 public String setPropertyIfAbsent(String _key,String _value)
c3c65308a11b removed some package and added Graph API
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
59 {
8
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
60 TreeMap<String,String> current,update;
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
61 do{
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
62 current = propertiesHolder.get();
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
63 Option<String> value = current.get(_key);
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
64 if(value.isSome()){
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
65 return value.some();
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
66 }
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
67
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
68 update = current.set(_key,_value);
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
69 }while(!propertiesHolder.compareAndSet(current,update));
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
70
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
71 return null;
7
c3c65308a11b removed some package and added Graph API
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
72 }
c3c65308a11b removed some package and added Graph API
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
73
c3c65308a11b removed some package and added Graph API
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
74 @Override
5
07b26b4b21e0 modified AbstractVertexesTest
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
75 public String toString()
07b26b4b21e0 modified AbstractVertexesTest
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
76 {
07b26b4b21e0 modified AbstractVertexesTest
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
77 return id;
07b26b4b21e0 modified AbstractVertexesTest
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
78 }
07b26b4b21e0 modified AbstractVertexesTest
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
79
07b26b4b21e0 modified AbstractVertexesTest
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
80 @Override
4
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
81 public String getID()
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 {
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
83 return id;
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
84 }
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
85
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
86 @Override
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
87 public String getProperty(String _key)
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
88 {
8
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
89 TreeMap<String,String> current = propertiesHolder.get();
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
90 Option<String> nullOrValue = current.get(_key);
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
91 if(nullOrValue.isNone()){
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
92 return null;
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
93 }
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
94
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
95 return nullOrValue.some();
4
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
96 }
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
97
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
98 @Override
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
99 public void setProperty(String _key, String _value)
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
100 {
8
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
101 TreeMap<String,String> current , update;
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
102 do{
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
103 current = propertiesHolder.get();
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
104 update = current.set(_key,_value);
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
105 }while(!propertiesHolder.compareAndSet(current,update));
4
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
106 }
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
107
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
108 @Override
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
109 public String removeProperty(String _key)
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
110 {
8
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
111 if(_key == null){
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
112 throw new NullPointerException("_key is null");
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
113 }
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
114
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
115 String remove;
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
116 TreeMap<String,String> current , update;
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
117 do{
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
118 current = propertiesHolder.get();
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
119 Option<String> nullOrValue = current.get(_key);
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
120 if(nullOrValue.isNone()){
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
121 return null;
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
122 }
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
123
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
124 remove = nullOrValue.some();
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
125 update = current.delete(_key);
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
126 }while(!propertiesHolder.compareAndSet(current,update));
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
127
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
128 return remove;
4
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
129 }
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
130
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
131 @Override
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
132 public Vertexes getVertexes(String _key)
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
133 {
8
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
134 if(_key == null){
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
135 throw new NullPointerException("_key is null");
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
136 }
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
137
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
138 TreeMap<String,SimpleVertexes> current = relationsHolder.get();
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
139 Option<SimpleVertexes> nullOrValue = current.get(_key);
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
140 if(nullOrValue.isNone()){
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
141 return null;
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
142 }
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
143
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
144 return nullOrValue.some();
4
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
145 }
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
146
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
147 @Override
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
148 public Vertexes removeVertexes(String _type)
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
149 {
8
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
150 if(_type == null){
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
151 throw new NullPointerException("_type is null");
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
152 }
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
153
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
154 SimpleVertexes remove;
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
155 TreeMap<String,SimpleVertexes> current , update;
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
156 do{
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
157 current = relationsHolder.get();
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
158 Option<SimpleVertexes> nullOrValue = current.get(_type);
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
159 if(nullOrValue.isNone()){
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
160 return null;
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
161 }
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
162
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
163 remove = nullOrValue.some();
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
164 update = current.delete(_type);
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
165 }while(!relationsHolder.compareAndSet(current,update));
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
166
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
167 return remove;
4
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
168 }
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
169
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
170 @Override
8
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
171 public boolean compareAndSwapProprety(String _key,final String _except,final String _value)
4
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
172 {
8
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
173 if(_key == null || _except == null || _value == null){
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
174 throw new NullPointerException("_key or _except or _value is null");
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
175 }
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
176
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
177 TreeMap<String,String> current , update;
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
178 do{
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
179 current = propertiesHolder.get();
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
180 Option<String> nullOrValue = current.get(_key);
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
181 if(nullOrValue.isNone()){
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
182 return false;
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
183 }
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
184
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
185 String value = nullOrValue.some();
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
186 if(!value.equals(_except)){
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
187 return false;
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
188 }
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
189
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
190 update = current.set(_key,_value);
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
191 }while(!propertiesHolder.compareAndSet(current,update));
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
192
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
193 return true;
4
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
194 }
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
195
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
196 @Override
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
197 public Graph getGraph()
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
198 {
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
199 return parent;
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
200 }
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
201
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
202 @Override
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
203 public Vertexes createVertexes(String _type)
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
204 {
8
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
205 TreeMap<String,SimpleVertexes> current , update;
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
206
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
207 SimpleVertexes newVertexes;
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
208 do{
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
209 current = relationsHolder.get();
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
210 Option<SimpleVertexes> nullOrValue = current.get(_type);
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
211 if(nullOrValue.isSome()){
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
212 return null;
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
213 }
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
214
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
215 newVertexes = new SimpleVertexes(_type,parent);
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
216 update = current.set(_type,newVertexes);
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
217 }while(!relationsHolder.compareAndSet(current,update));
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
218
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
219 return newVertexes;
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
220 }
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
221
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
222 @Override
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
223 public Iterable<Pair<String,String>> getProperties()
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
224 {
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
225 final TreeMap<String,String> snapshot = propertiesHolder.get();
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
226 Iterable<Pair<String,String>> snapshotIterableWrapper = new Iterable<Pair<String,String>>(){
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
227 @Override
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
228 public Iterator<Pair<String, String>> iterator(){
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
229 return new Iterator<Pair<String,String>>(){
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
230 Iterator<P2<String,String>> snapshotKeyValueIterator = snapshot.iterator();
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
231 @Override
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
232 public boolean hasNext(){
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
233 return snapshotKeyValueIterator.hasNext();
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
234 }
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
235 @Override
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
236 public Pair<String, String> next(){
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
237 P2<String,String> keyValue = snapshotKeyValueIterator.next();
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
238 return new Pair<String,String>(keyValue._1(),keyValue._2());
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
239 }
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
240 @Override
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
241 public void remove() {
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
242 throw new UnsupportedOperationException("removing is not supported.");
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
243 }
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
244 };
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
245 }
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
246 };
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
247 return snapshotIterableWrapper;
4
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
248 }
761d04aecfcb added Graph API and some implementation
shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
249 }