aboutsummaryrefslogtreecommitdiffstats
path: root/Solvers
diff options
context:
space:
mode:
authorLibravatar Oszkar Semerath <Oszkar Semerath@DESKTOP-DNR7JQ7>2021-07-06 17:15:08 +0200
committerLibravatar Oszkar Semerath <Oszkar Semerath@DESKTOP-DNR7JQ7>2021-07-06 17:15:08 +0200
commit3b414dbe470eae1f34e052b417942c47fdb7e517 (patch)
treeaf39d7b8b4052ade0c647fdcf32268cdf1198158 /Solvers
parentTest environment update (diff)
downloadVIATRA-Generator-3b414dbe470eae1f34e052b417942c47fdb7e517.tar.gz
VIATRA-Generator-3b414dbe470eae1f34e052b417942c47fdb7e517.tar.zst
VIATRA-Generator-3b414dbe470eae1f34e052b417942c47fdb7e517.zip
VersionedMapStore first implementation, tests reinterpreted
Diffstat (limited to 'Solvers')
-rw-r--r--Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/Cursor.java8
-rw-r--r--Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/Versioned.java1
-rw-r--r--Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/VersionedMap.java74
-rw-r--r--Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/VersionedMapStore.java11
-rw-r--r--Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/VersionedMapStoreImpl.java61
-rw-r--r--Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/ImmutableNode.java4
-rw-r--r--Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/ImmutableNodeIterator.java5
-rw-r--r--Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/MapCursor.java17
-rw-r--r--Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/MutableNode.java10
-rw-r--r--Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/Node.java4
-rw-r--r--Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/VersionedMapImpl.java114
-rw-r--r--Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/MapSmokeTest.java4
-rw-r--r--Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/MapTestEnvironment.java11
13 files changed, 230 insertions, 94 deletions
diff --git a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/Cursor.java b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/Cursor.java
new file mode 100644
index 00000000..81c7a7ec
--- /dev/null
+++ b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/Cursor.java
@@ -0,0 +1,8 @@
1package org.eclipse.viatra.solver.data.map;
2
3public interface Cursor<KEY,VALUE> {
4 public KEY getKey();
5 public VALUE getValue();
6 public boolean isTerminated();
7 public boolean move();
8}
diff --git a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/Versioned.java b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/Versioned.java
index d58c458e..68970a94 100644
--- a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/Versioned.java
+++ b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/Versioned.java
@@ -2,5 +2,6 @@ package org.eclipse.viatra.solver.data.map;
2 2
3public interface Versioned { 3public interface Versioned {
4 public long commit(); 4 public long commit();
5 //public void revert();
5 public void restore(long state); 6 public void restore(long state);
6} 7}
diff --git a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/VersionedMap.java b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/VersionedMap.java
index 4328fde1..3d691407 100644
--- a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/VersionedMap.java
+++ b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/VersionedMap.java
@@ -3,72 +3,10 @@ package org.eclipse.viatra.solver.data.map;
3import java.util.Iterator; 3import java.util.Iterator;
4import java.util.Map; 4import java.util.Map;
5 5
6import org.eclipse.viatra.solver.data.map.internal.MapCursor; 6public interface VersionedMap<KEY,VALUE> extends Versioned{
7import org.eclipse.viatra.solver.data.map.internal.MapEntryIterator; 7 public void put(KEY key, VALUE value);
8import org.eclipse.viatra.solver.data.map.internal.MutableNode; 8 public VALUE get(KEY key);
9import org.eclipse.viatra.solver.data.map.internal.Node; 9 public int getSize();
10 10 public Iterator<Map.Entry<KEY,VALUE>> getIterator();
11public class VersionedMap<KEY,VALUE> implements Versioned{ 11 public Cursor<KEY,VALUE> getCursor();
12 protected final ContinousHashProvider<? super KEY> hashProvider;
13 protected final VALUE defaultValue;
14 protected Node<KEY,VALUE> root = null;
15 //TODO: protected final iterators
16
17 protected VersionedMap(ContinousHashProvider<? super KEY> hashProvider, VALUE defaultValue) {
18 this.hashProvider = hashProvider;
19 this.defaultValue = defaultValue;
20 }
21
22 public VALUE getDefaultValue() {
23 return defaultValue;
24 }
25 public ContinousHashProvider<? super KEY> getHashProvider() {
26 return hashProvider;
27 }
28
29 public void put(KEY key, VALUE value) {
30 if(root!=null) {
31 root = root.putValue(key, value, hashProvider, defaultValue, hashProvider.getHash(key, 0), 0);
32 } else {
33 root = MutableNode.initialize(key, value, hashProvider, defaultValue);
34 }
35 }
36 public VALUE get(KEY key) {
37 if(root!=null) {
38 return root.getValue(key, hashProvider, defaultValue, hashProvider.getHash(key, 0), 0);
39 } else {
40 return defaultValue;
41 }
42 }
43 public int getSize() {
44 if(root == null) {
45 return 0;
46 } else {
47 return root.getSize();
48 }
49 }
50 Iterator<Map.Entry<KEY,VALUE>> getIterator() {
51 return new MapEntryIterator<>(this.root);
52 }
53
54 @Override
55 public long commit() {
56 // TODO Auto-generated method stub
57 return 0;
58 }
59
60 @Override
61 public void restore(long state) {
62 // TODO Auto-generated method stub
63 }
64
65 public void prettyPrint() {
66 StringBuilder s = new StringBuilder();
67 if(this.root != null) {
68 this.root.prettyPrint(s, 0, -1);
69 System.out.println(s.toString());
70 } else {
71 System.out.println("empty tree");
72 }
73 }
74} 12}
diff --git a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/VersionedMapStore.java b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/VersionedMapStore.java
new file mode 100644
index 00000000..5a54c13b
--- /dev/null
+++ b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/VersionedMapStore.java
@@ -0,0 +1,11 @@
1package org.eclipse.viatra.solver.data.map;
2
3public interface VersionedMapStore<KEY, VALUE> {
4
5 public VersionedMap<KEY, VALUE> createMap();
6
7 public VersionedMap<KEY, VALUE> createMap(long state) throws IllegalAccessException;
8
9 // long addState(Node<KEY, VALUE> data);
10 //public void removeState(long state);
11} \ No newline at end of file
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
new file mode 100644
index 00000000..1e1352ab
--- /dev/null
+++ b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/VersionedMapStoreImpl.java
@@ -0,0 +1,61 @@
1package org.eclipse.viatra.solver.data.map;
2
3import java.util.HashMap;
4import java.util.Map;
5import java.util.Set;
6
7import org.eclipse.viatra.solver.data.map.internal.ImmutableNode;
8import org.eclipse.viatra.solver.data.map.internal.VersionedMapImpl;
9
10public class VersionedMapStoreImpl<KEY,VALUE> implements VersionedMapStore<KEY, VALUE> {
11 protected final ContinousHashProvider<? super KEY> hashProvider;
12 protected final VALUE defaultValue;
13 protected Map<Long, ImmutableNode<KEY,VALUE>> states;
14 protected long nextID;
15
16 public VersionedMapStoreImpl(ContinousHashProvider<? super KEY> hashProvider, VALUE defaultValue) {
17 this.hashProvider = hashProvider;
18 this.defaultValue = defaultValue;
19
20 states = new HashMap<>();
21 nextID = 0;
22 }
23
24 Set<Long> getStates() {
25 return states.keySet();
26 }
27
28 @Override
29 public VersionedMap<KEY,VALUE> createMap() {
30 return new VersionedMapImpl<KEY,VALUE>(this,hashProvider,defaultValue);
31 }
32 @Override
33 public VersionedMap<KEY,VALUE> createMap(long state) throws IllegalAccessException {
34 ImmutableNode<KEY, VALUE> data = getStateData(state);
35 if(data != null) {
36 return new VersionedMapImpl<KEY,VALUE>(this,hashProvider,defaultValue,data);
37 } else {
38 throw new IllegalAccessException("Store does not contain state " + state + "!");
39 }
40 }
41 private ImmutableNode<KEY,VALUE> getStateData(long state) {
42 return states.get(state);
43 }
44
45 public long addState(ImmutableNode<KEY,VALUE> data) {
46 if(data != null) {
47 ImmutableNode<KEY, VALUE> immutable = data.toImmutable();
48 long id = nextID++;
49 states.put(id,immutable);
50 return id;
51 } else {
52 throw new NullPointerException("data is null!");
53 }
54
55 }
56// public void removeState(long state) {
57// if(states.containsKey(state)) {
58// this.states.remove(state);
59// }
60// }
61}
diff --git a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/ImmutableNode.java b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/ImmutableNode.java
index 70c4daff..860c258a 100644
--- a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/ImmutableNode.java
+++ b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/ImmutableNode.java
@@ -175,7 +175,7 @@ public class ImmutableNode<KEY, VALUE> extends Node<KEY, VALUE> {
175 } 175 }
176 176
177 @Override 177 @Override
178 protected ImmutableNode<KEY,VALUE> toImmutable() { 178 public ImmutableNode<KEY,VALUE> toImmutable() {
179 return this; 179 return this;
180 } 180 }
181 181
@@ -210,7 +210,7 @@ public class ImmutableNode<KEY, VALUE> extends Node<KEY, VALUE> {
210 // 3. no subnode found, move up 210 // 3. no subnode found, move up
211 cursor.nodeStack.pop(); 211 cursor.nodeStack.pop();
212 cursor.nodeIndexStack.pop(); 212 cursor.nodeIndexStack.pop();
213 if(!cursor.nodeStack.empty()) { 213 if(!cursor.nodeStack.isEmpty()) {
214 Node<KEY, VALUE> supernode = cursor.nodeStack.peek(); 214 Node<KEY, VALUE> supernode = cursor.nodeStack.peek();
215 return supernode.moveToNext(cursor); 215 return supernode.moveToNext(cursor);
216 } else { 216 } else {
diff --git a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/ImmutableNodeIterator.java b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/ImmutableNodeIterator.java
deleted file mode 100644
index 7715bc72..00000000
--- a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/ImmutableNodeIterator.java
+++ /dev/null
@@ -1,5 +0,0 @@
1package org.eclipse.viatra.solver.data.map.internal;
2
3public class ImmutableNodeIterator {
4
5}
diff --git a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/MapCursor.java b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/MapCursor.java
index 40ba55fa..9489d110 100644
--- a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/MapCursor.java
+++ b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/MapCursor.java
@@ -1,15 +1,18 @@
1package org.eclipse.viatra.solver.data.map.internal; 1package org.eclipse.viatra.solver.data.map.internal;
2 2
3import java.util.Stack; 3import java.util.ArrayDeque;
4import java.util.Deque;
4 5
5public class MapCursor<KEY,VALUE> { 6import org.eclipse.viatra.solver.data.map.Cursor;
7
8public class MapCursor<KEY,VALUE> implements Cursor<KEY,VALUE> {
6 // Constants 9 // Constants
7 static int IndexStart = -1; 10 static int IndexStart = -1;
8 static int IndexFinish = -2; 11 static int IndexFinish = -2;
9 12
10 // Tree stack 13 // Tree stack
11 Stack<Node<KEY,VALUE>> nodeStack; 14 Deque<Node<KEY,VALUE>> nodeStack;
12 Stack<Integer> nodeIndexStack; 15 Deque<Integer> nodeIndexStack;
13 int dataIndex; 16 int dataIndex;
14 17
15 // Values 18 // Values
@@ -19,11 +22,11 @@ public class MapCursor<KEY,VALUE> {
19 public MapCursor(Node<KEY, VALUE> root) { 22 public MapCursor(Node<KEY, VALUE> root) {
20 // Initializing tree stack 23 // Initializing tree stack
21 super(); 24 super();
22 this.nodeStack = new Stack<>(); 25 this.nodeStack = new ArrayDeque<>();
23 if(root != null) { 26 if(root != null) {
24 this.nodeStack.add(root); 27 this.nodeStack.add(root);
25 } 28 }
26 this.nodeIndexStack = new Stack<>(); 29 this.nodeIndexStack = new ArrayDeque<>();
27 this.nodeIndexStack.push(IndexStart); 30 this.nodeIndexStack.push(IndexStart);
28 this.dataIndex = IndexStart; 31 this.dataIndex = IndexStart;
29 32
@@ -44,7 +47,7 @@ public class MapCursor<KEY,VALUE> {
44 } 47 }
45 48
46 public boolean isTerminated() { 49 public boolean isTerminated() {
47 return this.nodeStack.empty(); 50 return this.nodeStack.isEmpty();
48 } 51 }
49 52
50 public boolean move() { 53 public boolean move() {
diff --git a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/MutableNode.java b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/MutableNode.java
index 4c764f2b..b22c7b14 100644
--- a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/MutableNode.java
+++ b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/MutableNode.java
@@ -208,7 +208,7 @@ public class MutableNode<KEY,VALUE> extends Node<KEY,VALUE> {
208 } 208 }
209 209
210 @Override 210 @Override
211 protected ImmutableNode<KEY,VALUE> toImmutable() { 211 public ImmutableNode<KEY,VALUE> toImmutable() {
212 return new ImmutableNode<KEY,VALUE>(this); 212 return new ImmutableNode<KEY,VALUE>(this);
213 } 213 }
214 214
@@ -236,9 +236,11 @@ public class MutableNode<KEY,VALUE> extends Node<KEY,VALUE> {
236 Node<KEY, VALUE> subnode = (Node<KEY, VALUE>) this.content[index*2+1]; 236 Node<KEY, VALUE> subnode = (Node<KEY, VALUE>) this.content[index*2+1];
237 237
238 cursor.dataIndex = MapCursor.IndexStart; 238 cursor.dataIndex = MapCursor.IndexStart;
239 cursor.nodeIndexStack.set(0,index); 239 cursor.nodeIndexStack.pop();
240 cursor.nodeStack.push(subnode); 240 cursor.nodeIndexStack.push(index);
241 cursor.nodeIndexStack.push(MapCursor.IndexStart); 241 cursor.nodeIndexStack.push(MapCursor.IndexStart);
242 cursor.nodeStack.push(subnode);
243
242 244
243 return subnode.moveToNext(cursor); 245 return subnode.moveToNext(cursor);
244 } 246 }
@@ -246,7 +248,7 @@ public class MutableNode<KEY,VALUE> extends Node<KEY,VALUE> {
246 // 3. no subnode found, move up 248 // 3. no subnode found, move up
247 cursor.nodeStack.pop(); 249 cursor.nodeStack.pop();
248 cursor.nodeIndexStack.pop(); 250 cursor.nodeIndexStack.pop();
249 if(!cursor.nodeStack.empty()) { 251 if(!cursor.nodeStack.isEmpty()) {
250 Node<KEY, VALUE> supernode = cursor.nodeStack.peek(); 252 Node<KEY, VALUE> supernode = cursor.nodeStack.peek();
251 return supernode.moveToNext(cursor); 253 return supernode.moveToNext(cursor);
252 } else { 254 } else {
diff --git a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/Node.java b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/Node.java
index 9b01cfcf..ee81493f 100644
--- a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/Node.java
+++ b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/Node.java
@@ -52,8 +52,8 @@ public abstract class Node<KEY,VALUE>{
52 abstract public Node<KEY,VALUE> putValue(KEY key, VALUE value, ContinousHashProvider<? super KEY> hashProvider, VALUE defaultValue, int hash, int depth); 52 abstract public Node<KEY,VALUE> putValue(KEY key, VALUE value, ContinousHashProvider<? super KEY> hashProvider, VALUE defaultValue, int hash, int depth);
53 abstract public int getSize(); 53 abstract public int getSize();
54 54
55 abstract protected MutableNode<KEY, VALUE> toMutable(); 55 abstract MutableNode<KEY, VALUE> toMutable();
56 abstract protected ImmutableNode<KEY, VALUE> toImmutable(); 56 public abstract ImmutableNode<KEY, VALUE> toImmutable();
57 57
58 /** 58 /**
59 * Moves a {@link MapCursor} to its next position. 59 * Moves a {@link MapCursor} to its next position.
diff --git a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/VersionedMapImpl.java b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/VersionedMapImpl.java
new file mode 100644
index 00000000..3ea905f3
--- /dev/null
+++ b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/internal/VersionedMapImpl.java
@@ -0,0 +1,114 @@
1package org.eclipse.viatra.solver.data.map.internal;
2
3import java.util.Iterator;
4import java.util.Map;
5
6import org.eclipse.viatra.solver.data.map.ContinousHashProvider;
7import org.eclipse.viatra.solver.data.map.Cursor;
8import org.eclipse.viatra.solver.data.map.VersionedMap;
9import org.eclipse.viatra.solver.data.map.VersionedMapStore;
10import org.eclipse.viatra.solver.data.map.VersionedMapStoreImpl;
11
12/**
13 * Not threadSafe in itself
14 * @author Oszkar Semerath
15 *
16 * @param <KEY>
17 * @param <VALUE>
18 */
19public class VersionedMapImpl<KEY,VALUE> implements VersionedMap<KEY,VALUE>{
20 protected final VersionedMapStoreImpl<KEY,VALUE> store;
21
22 protected final ContinousHashProvider<? super KEY> hashProvider;
23 protected final VALUE defaultValue;
24 protected Node<KEY,VALUE> root;
25 //TODO: protected final iterators
26
27 public VersionedMapImpl(
28 VersionedMapStoreImpl<KEY,VALUE> store,
29 ContinousHashProvider<? super KEY> hashProvider,
30 VALUE defaultValue)
31 {
32 this.store = store;
33 this.hashProvider = hashProvider;
34 this.defaultValue = defaultValue;
35 this.root = null;
36 }
37 public VersionedMapImpl(
38 VersionedMapStoreImpl<KEY,VALUE> store,
39 ContinousHashProvider<? super KEY> hashProvider,
40 VALUE defaultValue, Node<KEY,VALUE> data)
41 {
42 this.store = store;
43 this.hashProvider = hashProvider;
44 this.defaultValue = defaultValue;
45 this.root = data;
46 }
47
48 public VALUE getDefaultValue() {
49 return defaultValue;
50 }
51 public ContinousHashProvider<? super KEY> getHashProvider() {
52 return hashProvider;
53 }
54 @Override
55 public void put(KEY key, VALUE value) {
56 if(root!=null) {
57 root = root.putValue(key, value, hashProvider, defaultValue, hashProvider.getHash(key, 0), 0);
58 } else {
59 root = MutableNode.initialize(key, value, hashProvider, defaultValue);
60 }
61 }
62 @Override
63 public VALUE get(KEY key) {
64 if(root!=null) {
65 return root.getValue(key, hashProvider, defaultValue, hashProvider.getHash(key, 0), 0);
66 } else {
67 return defaultValue;
68 }
69 }
70 @Override
71 public int getSize() {
72 if(root == null) {
73 return 0;
74 } else {
75 return root.getSize();
76 }
77 }
78 @Override
79 public
80 Iterator<Map.Entry<KEY,VALUE>> getIterator() {
81 return new MapEntryIterator<>(this.root);
82 }
83 @Override
84 public Cursor<KEY, VALUE> getCursor() {
85 return new MapEntryIterator<>(this.root);
86 }
87
88 @Override
89 public long commit() {
90 ImmutableNode<KEY,VALUE> immutable;
91 if(this.root != null) {
92 immutable = root.toImmutable();
93 } else {
94 immutable = null;
95 }
96 long result = this.store.addState(immutable);
97 return result;
98 }
99
100 @Override
101 public void restore(long state) {
102 // TODO Auto-generated method stub
103 }
104
105 public void prettyPrint() {
106 StringBuilder s = new StringBuilder();
107 if(this.root != null) {
108 this.root.prettyPrint(s, 0, -1);
109 System.out.println(s.toString());
110 } else {
111 System.out.println("empty tree");
112 }
113 }
114}
diff --git a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/MapSmokeTest.java b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/MapSmokeTest.java
index 161f3f1f..8532da63 100644
--- a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/MapSmokeTest.java
+++ b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/MapSmokeTest.java
@@ -4,6 +4,7 @@ import static org.junit.Assert.fail;
4 4
5import java.util.Random; 5import java.util.Random;
6 6
7import org.eclipse.viatra.solver.data.map.internal.VersionedMapImpl;
7import org.junit.jupiter.api.Test; 8import org.junit.jupiter.api.Test;
8 9
9public class MapSmokeTest { 10public class MapSmokeTest {
@@ -12,7 +13,8 @@ public class MapSmokeTest {
12 String[] values = prepareValues(maxValue); 13 String[] values = prepareValues(maxValue);
13 ContinousHashProvider<Integer> chp = prepareHashProvider(); 14 ContinousHashProvider<Integer> chp = prepareHashProvider();
14 15
15 VersionedMap<Integer, String> sut = new VersionedMap<Integer, String>(chp, values[0]); 16 VersionedMapStore<Integer, String> store = new VersionedMapStoreImpl<Integer, String>(chp, values[0]);
17 VersionedMapImpl<Integer, String> sut = (VersionedMapImpl<Integer, String>) store.createMap();
16 MapTestEnvironment<Integer, String> e = new MapTestEnvironment<Integer, String>(sut); 18 MapTestEnvironment<Integer, String> e = new MapTestEnvironment<Integer, String>(sut);
17 19
18 Random r = new Random(seed); 20 Random r = new Random(seed);
diff --git a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/MapTestEnvironment.java b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/MapTestEnvironment.java
index 04ae6bd0..507e8dc2 100644
--- a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/MapTestEnvironment.java
+++ b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/tests/org/eclipse/viatra/solver/data/map/MapTestEnvironment.java
@@ -5,21 +5,22 @@ import static org.junit.Assert.fail;
5import java.util.HashMap; 5import java.util.HashMap;
6import java.util.Iterator; 6import java.util.Iterator;
7import java.util.Map; 7import java.util.Map;
8import java.util.TreeMap;
9import java.util.Map.Entry; 8import java.util.Map.Entry;
10import java.util.TreeSet; 9import java.util.TreeMap;
10
11import org.eclipse.viatra.solver.data.map.internal.VersionedMapImpl;
11 12
12public class MapTestEnvironment<KEY,VALUE> { 13public class MapTestEnvironment<KEY,VALUE> {
13 VersionedMap<KEY, VALUE> sut; 14 VersionedMapImpl<KEY, VALUE> sut;
14 Map<KEY,VALUE> oracle = new HashMap<KEY, VALUE>(); 15 Map<KEY,VALUE> oracle = new HashMap<KEY, VALUE>();
15 16
16 public MapTestEnvironment(VersionedMap<KEY, VALUE> sut) { 17 public MapTestEnvironment(VersionedMapImpl<KEY, VALUE> sut) {
17 this.sut = sut; 18 this.sut = sut;
18 } 19 }
19 20
20 public void put(KEY key, VALUE value) { 21 public void put(KEY key, VALUE value) {
21 sut.put(key, value); 22 sut.put(key, value);
22 if(value != sut.defaultValue) { 23 if(value != sut.getDefaultValue()) {
23 oracle.put(key, value); 24 oracle.put(key, value);
24 } else { 25 } else {
25 oracle.remove(key); 26 oracle.remove(key);