aboutsummaryrefslogtreecommitdiffstats
path: root/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/VersionedMapStoreImpl.java
diff options
context:
space:
mode:
Diffstat (limited to 'Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/VersionedMapStoreImpl.java')
-rw-r--r--Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/VersionedMapStoreImpl.java58
1 files changed, 42 insertions, 16 deletions
diff --git a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/VersionedMapStoreImpl.java b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/VersionedMapStoreImpl.java
index 0c00108b..b6a615ed 100644
--- a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/VersionedMapStoreImpl.java
+++ b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/VersionedMapStoreImpl.java
@@ -5,6 +5,7 @@ import java.util.Map;
5import java.util.Set; 5import java.util.Set;
6 6
7import org.eclipse.viatra.solver.data.map.internal.ImmutableNode; 7import org.eclipse.viatra.solver.data.map.internal.ImmutableNode;
8import org.eclipse.viatra.solver.data.map.internal.MapDiffCursor;
8import org.eclipse.viatra.solver.data.map.internal.Node; 9import org.eclipse.viatra.solver.data.map.internal.Node;
9import org.eclipse.viatra.solver.data.map.internal.VersionedMapImpl; 10import org.eclipse.viatra.solver.data.map.internal.VersionedMapImpl;
10 11
@@ -25,7 +26,7 @@ public class VersionedMapStoreImpl<KEY,VALUE> implements VersionedMapStore<KEY,
25 nodeCache = new HashMap<>(); 26 nodeCache = new HashMap<>();
26 } 27 }
27 28
28 Set<Long> getStates() { 29 synchronized Set<Long> getStates() {
29 return states.keySet(); 30 return states.keySet();
30 } 31 }
31 32
@@ -34,29 +35,54 @@ public class VersionedMapStoreImpl<KEY,VALUE> implements VersionedMapStore<KEY,
34 return new VersionedMapImpl<KEY,VALUE>(this,hashProvider,defaultValue); 35 return new VersionedMapImpl<KEY,VALUE>(this,hashProvider,defaultValue);
35 } 36 }
36 @Override 37 @Override
37 public VersionedMap<KEY,VALUE> createMap(long state) throws IllegalAccessException { 38 public VersionedMap<KEY,VALUE> createMap(long state) {
38 ImmutableNode<KEY, VALUE> data = getStateData(state); 39 ImmutableNode<KEY, VALUE> data = revert(state);
39 if(data != null) { 40 if(data != null) {
40 return new VersionedMapImpl<KEY,VALUE>(this,hashProvider,defaultValue,data); 41 return new VersionedMapImpl<KEY,VALUE>(this,hashProvider,defaultValue,data);
41 } else { 42 } else {
42 throw new IllegalAccessException("Store does not contain state " + state + "!"); 43 throw new IllegalArgumentException("Store does not contain state " + state + "!");
43 } 44 }
44 } 45 }
45
46 private long getNextID() {
47 if(nextID == Long.MAX_VALUE) throw new IllegalStateException("Map store run out of Id-s");
48 return nextID++;
49 }
50 46
51 public ImmutableNode<KEY,VALUE> getStateData(long state) { 47 synchronized public ImmutableNode<KEY,VALUE> revert(long state) {
52 return states.get(state); 48 return states.get(state);
53 } 49 }
54 public Map<Node<KEY,VALUE>, ImmutableNode<KEY,VALUE>> getStore() { 50 synchronized public long commit(Node<KEY,VALUE> data, VersionedMapImpl<KEY, VALUE> mapToUpdateRoot) {
55 return this.nodeCache; 51 ImmutableNode<KEY,VALUE> immutable;
56 } 52 if(data != null) {
57 public long addState(ImmutableNode<KEY,VALUE> data) { 53 if(this.nodeCache != null) {
58 long id = getNextID(); 54 immutable = data.toImmutable(this.nodeCache);
59 states.put(id,data); 55 } else {
56 immutable = data.toImmutable();
57 }
58 } else {
59 immutable = null;
60 }
61
62
63 if(nextID == Long.MAX_VALUE) throw new IllegalStateException(
64 "Map store run out of Id-s");
65 long id = nextID++;
66 this.states.put(id, immutable);
67 //mapToUpdateRoot.setRoot(immutable);
60 return id; 68 return id;
61 } 69 }
70
71// public Map<Node<KEY,VALUE>, ImmutableNode<KEY,VALUE>> getStore() {
72// return this.nodeCache;
73// }
74// public long addState(ImmutableNode<KEY,VALUE> data) {
75//
76// states.put(id,data);
77// return id;
78// }
79
80 @Override
81 public DiffCursor<KEY, VALUE> getDiffCursor(long fromState, long toState) {
82 VersionedMap<KEY, VALUE> map1 = createMap(fromState);
83 VersionedMap<KEY, VALUE> map2 = createMap(toState);
84 Cursor<KEY, VALUE> cursor1 = map1.getCursor();
85 Cursor<KEY, VALUE> cursor2 = map2.getCursor();
86 return new MapDiffCursor<KEY, VALUE>(this.defaultValue,cursor1,cursor2);
87 }
62} 88}