# HG changeset patch # User shoshi # Date 1341578625 -32400 # Node ID bb96e631f0227473755fc7cb7f26ce4803b6e668 # Parent abed5bd92fcb0bdd0f26d8b2d0da79469f06b8bd added HyperTree diff -r abed5bd92fcb -r bb96e631f022 src/main/java/jungle/core/graph/simple/SimpleVertexContext.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jungle/core/graph/simple/SimpleVertexContext.java Fri Jul 06 21:43:45 2012 +0900 @@ -0,0 +1,64 @@ +package jungle.core.graph.simple; + +import java.util.concurrent.atomic.AtomicReference; + +import fj.Ord; +import fj.data.List; +import fj.data.TreeMap; + +public class SimpleVertexContext +{ + private final AtomicReference> propertiesHolder; + private final AtomicReference>> relationsHolder; + + private static final TreeMap NIL_PROPERTIES = TreeMap.empty(Ord.stringOrd); + private static final TreeMap> NIL_RELATIONS = TreeMap.empty(Ord.stringOrd); + + public SimpleVertexContext() + { + this(NIL_PROPERTIES,NIL_RELATIONS); + } + + public SimpleVertexContext(TreeMap _properties,TreeMap> _relations) + { + if(_properties == null || _relations == null){ + throw new NullPointerException("_properties and _relations must not be null."); + } + + propertiesHolder = new AtomicReference>(_properties); + relationsHolder = new AtomicReference>>(_relations); + } + + public TreeMap getProperties() + { + return propertiesHolder.get(); + } + + public boolean compareAndSwapProperties(TreeMap _expect,TreeMap _update) + { + return propertiesHolder.compareAndSet(_expect,_update); + } + + public TreeMap> getRelations() + { + return relationsHolder.get(); + } + + public boolean compareAndSwapRelations(TreeMap> _expect, + TreeMap> _update) + { + return relationsHolder.compareAndSet(_expect,_update); + } + + public SimpleVertexContext snapshot() + { + TreeMap propertiesSnapshot = propertiesHolder.get(); + TreeMap> relationsSnapshot = null; + + do{ + relationsSnapshot = relationsHolder.get(); + }while(!(propertiesHolder.get() == propertiesSnapshot)); + + return new SimpleVertexContext(propertiesSnapshot,relationsSnapshot); + } +} diff -r abed5bd92fcb -r bb96e631f022 src/main/java/jungle/impl/SimpleTree.java --- a/src/main/java/jungle/impl/SimpleTree.java Tue Jul 03 18:59:28 2012 +0900 +++ b/src/main/java/jungle/impl/SimpleTree.java Fri Jul 06 21:43:45 2012 +0900 @@ -10,7 +10,7 @@ public class SimpleTree implements Tree { - private final SimpleTreeGroup group; + private final HyperTree group; private final Graph graph; private final Vertex vertex; diff -r abed5bd92fcb -r bb96e631f022 src/main/java/jungle/kernel/hypertree/Edge.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jungle/kernel/hypertree/Edge.java Fri Jul 06 21:43:45 2012 +0900 @@ -0,0 +1,13 @@ +package jungle.kernel.hypertree; + +import jungle.util.Pair; +import jungle.util.Triple; + +public interface Edge +{ + Node getNodeAt(int _index); + Triple createAnonymousNode(Pair... _keyValues); + Triple createNode(String _id,Pair... _keyValues); + Pair removeNode(Node _node); + Triple insertAnonymouseNodeAt(int _index); +} diff -r abed5bd92fcb -r bb96e631f022 src/main/java/jungle/kernel/hypertree/HyperTree.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jungle/kernel/hypertree/HyperTree.java Fri Jul 06 21:43:45 2012 +0900 @@ -0,0 +1,7 @@ +package jungle.kernel.hypertree; + +public interface HyperTree +{ + public Node find(String _id); + public Node rootNode(); +} diff -r abed5bd92fcb -r bb96e631f022 src/main/java/jungle/kernel/hypertree/Node.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jungle/kernel/hypertree/Node.java Fri Jul 06 21:43:45 2012 +0900 @@ -0,0 +1,13 @@ +package jungle.kernel.hypertree; + +import jungle.util.Pair; +import jungle.util.Triple; + +public interface Node +{ + String getProperty(String _key); + Pair setProperties(Pair... _keyValues); + Triple createEdge(String... _edgeNames); + Edge getEdge(String _edgeName); + Pair removeEdge(String... _edgeNames); +} diff -r abed5bd92fcb -r bb96e631f022 src/main/java/jungle/kernel/hypertree/db/HyperTreeDatabaseService.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jungle/kernel/hypertree/db/HyperTreeDatabaseService.java Fri Jul 06 21:43:45 2012 +0900 @@ -0,0 +1,11 @@ +package jungle.kernel.hypertree.db; + +import jungle.kernel.hypertree.HyperTree; + +public interface HyperTreeDatabaseService +{ + public HyperTree createHyperTree(String _id); + public HyperTree getHyperTree(String _id); + public void removeHyperTree(String _id); + public String askID(HyperTree _tree); +} diff -r abed5bd92fcb -r bb96e631f022 src/main/java/jungle/util/Triple.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jungle/util/Triple.java Fri Jul 06 21:43:45 2012 +0900 @@ -0,0 +1,45 @@ +package jungle.util; + +public class Triple +{ + private A a; + private B b; + private C c; + + public Triple(A _a,B _b,C _c) + { + a = _a; + b = _b; + c = _c; + } + + public A getA() + { + return a; + } + + public B getB() + { + return b; + } + + public C getC() + { + return c; + } + + public void setA(A _a) + { + a = _a; + } + + public void setB(B _b) + { + b = _b; + } + + public void setC(C _c) + { + c = _c; + } +}