aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects
diff options
context:
space:
mode:
authorLibravatar OszkarSemerath <semerath@mit.bme.hu>2023-07-24 16:51:47 +0200
committerLibravatar OszkarSemerath <semerath@mit.bme.hu>2023-07-24 16:51:47 +0200
commit26592fc70a026b850616fc4bc9be5a46ab1179a9 (patch)
tree0e1f22a451122169f5efd2bc683c7787c666ddd6 /subprojects
parentEnabled QueryTransactionTest (diff)
downloadrefinery-26592fc70a026b850616fc4bc9be5a46ab1179a9.tar.gz
refinery-26592fc70a026b850616fc4bc9be5a46ab1179a9.tar.zst
refinery-26592fc70a026b850616fc4bc9be5a46ab1179a9.zip
Refactoring packages related to VersionedMapDeltaImpl + VersionedMapStoreStateImpl, update builder.
- details of the maps goes to internal packages - ModelStoreBuilderImpl uses VersionedMapStoreFactoryBuilder
Diffstat (limited to 'subprojects')
-rw-r--r--subprojects/store/src/jmh/java/tools/refinery/store/map/benchmarks/ImmutablePutExecutionPlan.java17
-rw-r--r--subprojects/store/src/main/java/tools/refinery/store/map/ContinuousHashProvider.java (renamed from subprojects/store/src/main/java/tools/refinery/store/map/ContinousHashProvider.java)14
-rw-r--r--subprojects/store/src/main/java/tools/refinery/store/map/IteratorAsCursor.java (renamed from subprojects/store/src/main/java/tools/refinery/store/map/internal/IteratorAsCursor.java)12
-rw-r--r--subprojects/store/src/main/java/tools/refinery/store/map/VersionedMapStoreFactoryBuilder.java2
-rw-r--r--subprojects/store/src/main/java/tools/refinery/store/map/internal/HashClash.java23
-rw-r--r--subprojects/store/src/main/java/tools/refinery/store/map/internal/VersionedMapStoreFactoryBuilderImpl.java18
-rw-r--r--subprojects/store/src/main/java/tools/refinery/store/map/internal/delta/DeltaBasedVersionedMapStoreFactory.java (renamed from subprojects/store/src/main/java/tools/refinery/store/map/internal/DeltaBasedVersionedMapStoreFactory.java)5
-rw-r--r--subprojects/store/src/main/java/tools/refinery/store/map/internal/delta/DeltaDiffCursor.java (renamed from subprojects/store/src/main/java/tools/refinery/store/map/internal/DeltaDiffCursor.java)4
-rw-r--r--subprojects/store/src/main/java/tools/refinery/store/map/internal/delta/MapDelta.java (renamed from subprojects/store/src/main/java/tools/refinery/store/map/internal/MapDelta.java)4
-rw-r--r--subprojects/store/src/main/java/tools/refinery/store/map/internal/delta/MapTransaction.java (renamed from subprojects/store/src/main/java/tools/refinery/store/map/internal/MapTransaction.java)4
-rw-r--r--subprojects/store/src/main/java/tools/refinery/store/map/internal/delta/UncommittedDeltaArrayStore.java (renamed from subprojects/store/src/main/java/tools/refinery/store/map/internal/UncommittedDeltaArrayStore.java)4
-rw-r--r--subprojects/store/src/main/java/tools/refinery/store/map/internal/delta/UncommittedDeltaMapStore.java (renamed from subprojects/store/src/main/java/tools/refinery/store/map/internal/UncommittedDeltaMapStore.java)4
-rw-r--r--subprojects/store/src/main/java/tools/refinery/store/map/internal/delta/UncommittedDeltaStore.java (renamed from subprojects/store/src/main/java/tools/refinery/store/map/internal/UncommittedDeltaStore.java)4
-rw-r--r--subprojects/store/src/main/java/tools/refinery/store/map/internal/delta/VersionedMapDeltaImpl.java (renamed from subprojects/store/src/main/java/tools/refinery/store/map/internal/VersionedMapDeltaImpl.java)5
-rw-r--r--subprojects/store/src/main/java/tools/refinery/store/map/internal/delta/VersionedMapStoreDeltaImpl.java (renamed from subprojects/store/src/main/java/tools/refinery/store/map/VersionedMapStoreDeltaImpl.java)10
-rw-r--r--subprojects/store/src/main/java/tools/refinery/store/map/internal/state/ImmutableNode.java (renamed from subprojects/store/src/main/java/tools/refinery/store/map/internal/ImmutableNode.java)16
-rw-r--r--subprojects/store/src/main/java/tools/refinery/store/map/internal/state/InOrderMapCursor.java (renamed from subprojects/store/src/main/java/tools/refinery/store/map/internal/InOrderMapCursor.java)6
-rw-r--r--subprojects/store/src/main/java/tools/refinery/store/map/internal/state/MapCursor.java (renamed from subprojects/store/src/main/java/tools/refinery/store/map/internal/MapCursor.java)4
-rw-r--r--subprojects/store/src/main/java/tools/refinery/store/map/internal/state/MapDiffCursor.java (renamed from subprojects/store/src/main/java/tools/refinery/store/map/internal/MapDiffCursor.java)4
-rw-r--r--subprojects/store/src/main/java/tools/refinery/store/map/internal/state/MutableNode.java (renamed from subprojects/store/src/main/java/tools/refinery/store/map/internal/MutableNode.java)18
-rw-r--r--subprojects/store/src/main/java/tools/refinery/store/map/internal/state/Node.java (renamed from subprojects/store/src/main/java/tools/refinery/store/map/internal/Node.java)18
-rw-r--r--subprojects/store/src/main/java/tools/refinery/store/map/internal/state/OldValueBox.java (renamed from subprojects/store/src/main/java/tools/refinery/store/map/internal/OldValueBox.java)6
-rw-r--r--subprojects/store/src/main/java/tools/refinery/store/map/internal/state/StateBasedVersionedMapStoreFactory.java (renamed from subprojects/store/src/main/java/tools/refinery/store/map/internal/StateBasedVersionedMapStoreFactory.java)18
-rw-r--r--subprojects/store/src/main/java/tools/refinery/store/map/internal/state/VersionedMapStateImpl.java (renamed from subprojects/store/src/main/java/tools/refinery/store/map/internal/VersionedMapImpl.java)28
-rw-r--r--subprojects/store/src/main/java/tools/refinery/store/map/internal/state/VersionedMapStoreStateConfiguration.java (renamed from subprojects/store/src/main/java/tools/refinery/store/map/VersionedMapStoreConfiguration.java)19
-rw-r--r--subprojects/store/src/main/java/tools/refinery/store/map/internal/state/VersionedMapStoreStateImpl.java (renamed from subprojects/store/src/main/java/tools/refinery/store/map/VersionedMapStoreImpl.java)44
-rw-r--r--subprojects/store/src/main/java/tools/refinery/store/model/TupleHashProvider.java4
-rw-r--r--subprojects/store/src/main/java/tools/refinery/store/model/TupleHashProviderBitMagic.java34
-rw-r--r--subprojects/store/src/main/java/tools/refinery/store/model/internal/ModelStoreBuilderImpl.java12
-rw-r--r--subprojects/store/src/test/java/tools/refinery/store/map/tests/InOrderCursorTest.java8
-rw-r--r--subprojects/store/src/test/java/tools/refinery/store/map/tests/MapUnitTests.java4
-rw-r--r--subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/MutableImmutableCompareFuzzTest.java18
-rw-r--r--subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/SharedStoreFuzzTest.java18
-rw-r--r--subprojects/store/src/test/java/tools/refinery/store/map/tests/utils/MapTestEnvironment.java6
-rw-r--r--subprojects/store/src/test/java/tools/refinery/store/model/hashtests/HashEfficiencyTest.java13
35 files changed, 189 insertions, 239 deletions
diff --git a/subprojects/store/src/jmh/java/tools/refinery/store/map/benchmarks/ImmutablePutExecutionPlan.java b/subprojects/store/src/jmh/java/tools/refinery/store/map/benchmarks/ImmutablePutExecutionPlan.java
index 7e89cd06..4708e6d3 100644
--- a/subprojects/store/src/jmh/java/tools/refinery/store/map/benchmarks/ImmutablePutExecutionPlan.java
+++ b/subprojects/store/src/jmh/java/tools/refinery/store/map/benchmarks/ImmutablePutExecutionPlan.java
@@ -5,12 +5,13 @@
5 */ 5 */
6package tools.refinery.store.map.benchmarks; 6package tools.refinery.store.map.benchmarks;
7 7
8import java.util.Objects;
8import java.util.Random; 9import java.util.Random;
9 10
10import tools.refinery.store.map.ContinousHashProvider; 11import tools.refinery.store.map.ContinuousHashProvider;
11import tools.refinery.store.map.VersionedMapStore; 12import tools.refinery.store.map.VersionedMapStore;
12import tools.refinery.store.map.VersionedMapStoreImpl; 13import tools.refinery.store.map.internal.state.VersionedMapStoreStateImpl;
13import tools.refinery.store.map.internal.VersionedMapImpl; 14import tools.refinery.store.map.internal.state.VersionedMapStateImpl;
14import tools.refinery.store.map.tests.utils.MapTestEnvironment; 15import tools.refinery.store.map.tests.utils.MapTestEnvironment;
15 16
16import org.openjdk.jmh.annotations.Level; 17import org.openjdk.jmh.annotations.Level;
@@ -35,7 +36,7 @@ public class ImmutablePutExecutionPlan {
35 36
36 private String[] values; 37 private String[] values;
37 38
38 private ContinousHashProvider<Integer> hashProvider = MapTestEnvironment.prepareHashProvider(false); 39 private ContinuousHashProvider<Integer> hashProvider = MapTestEnvironment.prepareHashProvider(false);
39 40
40 @Setup(Level.Trial) 41 @Setup(Level.Trial)
41 public void setUpTrial() { 42 public void setUpTrial() {
@@ -43,9 +44,9 @@ public class ImmutablePutExecutionPlan {
43 values = MapTestEnvironment.prepareValues(nValues, true); 44 values = MapTestEnvironment.prepareValues(nValues, true);
44 } 45 }
45 46
46 public VersionedMapImpl<Integer, String> createSut() { 47 public VersionedMapStateImpl<Integer, String> createSut() {
47 VersionedMapStore<Integer, String> store = new VersionedMapStoreImpl<Integer, String>(hashProvider, values[0]); 48 VersionedMapStore<Integer, String> store = new VersionedMapStoreStateImpl<>(hashProvider, values[0]);
48 return (VersionedMapImpl<Integer, String>) store.createMap(); 49 return (VersionedMapStateImpl<Integer, String>) store.createMap();
49 } 50 }
50 51
51 public Integer nextKey() { 52 public Integer nextKey() {
@@ -53,7 +54,7 @@ public class ImmutablePutExecutionPlan {
53 } 54 }
54 55
55 public boolean isDefault(String value) { 56 public boolean isDefault(String value) {
56 return value == values[0]; 57 return Objects.equals(value,values[0]);
57 } 58 }
58 59
59 public String nextValue() { 60 public String nextValue() {
diff --git a/subprojects/store/src/main/java/tools/refinery/store/map/ContinousHashProvider.java b/subprojects/store/src/main/java/tools/refinery/store/map/ContinuousHashProvider.java
index 8e451230..abc044d0 100644
--- a/subprojects/store/src/main/java/tools/refinery/store/map/ContinousHashProvider.java
+++ b/subprojects/store/src/main/java/tools/refinery/store/map/ContinuousHashProvider.java
@@ -5,17 +5,17 @@
5 */ 5 */
6package tools.refinery.store.map; 6package tools.refinery.store.map;
7 7
8import tools.refinery.store.map.internal.Node; 8import tools.refinery.store.map.internal.state.Node;
9 9
10/** 10/**
11 * A class representing an equivalence relation for a type {@code K} with a 11 * A class representing an equivalence relation for a type {@code K} with a
12 * continuous hash function. 12 * continuous hash function.
13 * 13 *
14 * @author Oszkar Semerath 14 * @author Oszkar Semerath
15 * 15 *
16 * @param <K> Target java type. 16 * @param <K> Target java type.
17 */ 17 */
18public interface ContinousHashProvider<K> { 18public interface ContinuousHashProvider<K> {
19 public static final int EFFECTIVE_BITS = Node.EFFECTIVE_BITS; 19 public static final int EFFECTIVE_BITS = Node.EFFECTIVE_BITS;
20 public static final int EFFECTIVE_BIT_MASK = (1 << (EFFECTIVE_BITS)) - 1; 20 public static final int EFFECTIVE_BIT_MASK = (1 << (EFFECTIVE_BITS)) - 1;
21 21
@@ -38,9 +38,9 @@ public interface ContinousHashProvider<K> {
38 * {@link #EFFECTIVE_BITS} 38 * {@link #EFFECTIVE_BITS}
39 * </ul> 39 * </ul>
40 * Check {@link #equals} for further details. 40 * Check {@link #equals} for further details.
41 * 41 *
42 * @param key The target data object. 42 * @param key The target data object.
43 * @param index The depth of the the hash code. Needs to be non-negative. 43 * @param index The depth of the hash code. Needs to be non-negative.
44 * @return A hash code. 44 * @return A hash code.
45 */ 45 */
46 public int getHash(K key, int index); 46 public int getHash(K key, int index);
@@ -53,7 +53,7 @@ public interface ContinousHashProvider<K> {
53 if (key1.equals(key2)) { 53 if (key1.equals(key2)) {
54 return 0; 54 return 0;
55 } else { 55 } else {
56 for (int i = 0; i < ContinousHashProvider.MAX_PRACTICAL_DEPTH; i++) { 56 for (int i = 0; i < ContinuousHashProvider.MAX_PRACTICAL_DEPTH; i++) {
57 int hash1 = getEffectiveHash(key1, i); 57 int hash1 = getEffectiveHash(key1, i);
58 int hash2 = getEffectiveHash(key2, i); 58 int hash2 = getEffectiveHash(key2, i);
59 for(int j = 0; j<Integer.SIZE/Node.BRANCHING_FACTOR_BITS; j++) { 59 for(int j = 0; j<Integer.SIZE/Node.BRANCHING_FACTOR_BITS; j++) {
@@ -68,7 +68,7 @@ public interface ContinousHashProvider<K> {
68 } 68 }
69 throw new IllegalArgumentException("Two different keys (" + key1 + " and " + key2 69 throw new IllegalArgumentException("Two different keys (" + key1 + " and " + key2
70 + ") have the same hashcode over the practical depth limitation (" 70 + ") have the same hashcode over the practical depth limitation ("
71 + ContinousHashProvider.MAX_PRACTICAL_DEPTH + ")!"); 71 + ContinuousHashProvider.MAX_PRACTICAL_DEPTH + ")!");
72 } 72 }
73 } 73 }
74} 74}
diff --git a/subprojects/store/src/main/java/tools/refinery/store/map/internal/IteratorAsCursor.java b/subprojects/store/src/main/java/tools/refinery/store/map/IteratorAsCursor.java
index d1ab8bb1..29b03edf 100644
--- a/subprojects/store/src/main/java/tools/refinery/store/map/internal/IteratorAsCursor.java
+++ b/subprojects/store/src/main/java/tools/refinery/store/map/IteratorAsCursor.java
@@ -1,16 +1,14 @@
1/* 1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> 2 * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/>
3 * 3 *
4 * SPDX-License-Identifier: EPL-2.0 4 * SPDX-License-Identifier: EPL-2.0
5 */ 5 */
6package tools.refinery.store.map.internal; 6package tools.refinery.store.map;
7 7
8import java.util.*; 8import java.util.Iterator;
9import java.util.Map;
9import java.util.Map.Entry; 10import java.util.Map.Entry;
10 11import java.util.Set;
11import tools.refinery.store.map.AnyVersionedMap;
12import tools.refinery.store.map.Cursor;
13import tools.refinery.store.map.VersionedMap;
14 12
15public class IteratorAsCursor<K, V> implements Cursor<K, V> { 13public class IteratorAsCursor<K, V> implements Cursor<K, V> {
16 final Iterator<Entry<K, V>> iterator; 14 final Iterator<Entry<K, V>> iterator;
diff --git a/subprojects/store/src/main/java/tools/refinery/store/map/VersionedMapStoreFactoryBuilder.java b/subprojects/store/src/main/java/tools/refinery/store/map/VersionedMapStoreFactoryBuilder.java
index 6329a2f6..6b4fc2a0 100644
--- a/subprojects/store/src/main/java/tools/refinery/store/map/VersionedMapStoreFactoryBuilder.java
+++ b/subprojects/store/src/main/java/tools/refinery/store/map/VersionedMapStoreFactoryBuilder.java
@@ -22,7 +22,7 @@ public interface VersionedMapStoreFactoryBuilder<K,V> {
22 VersionedMapStoreFactoryBuilder<K,V> strategy(StoreStrategy strategy); 22 VersionedMapStoreFactoryBuilder<K,V> strategy(StoreStrategy strategy);
23 VersionedMapStoreFactoryBuilder<K,V> stateBasedImmutableWhenCommitting(boolean transformToImmutable); 23 VersionedMapStoreFactoryBuilder<K,V> stateBasedImmutableWhenCommitting(boolean transformToImmutable);
24 VersionedMapStoreFactoryBuilder<K,V> stateBasedSharingStrategy(SharingStrategy sharingStrategy); 24 VersionedMapStoreFactoryBuilder<K,V> stateBasedSharingStrategy(SharingStrategy sharingStrategy);
25 VersionedMapStoreFactoryBuilder<K,V> stateBasedHashProvider(ContinousHashProvider<K> hashProvider); 25 VersionedMapStoreFactoryBuilder<K,V> stateBasedHashProvider(ContinuousHashProvider<K> hashProvider);
26 VersionedMapStoreFactoryBuilder<K,V> deltaTransactionStrategy(DeltaTransactionStrategy deltaStrategy); 26 VersionedMapStoreFactoryBuilder<K,V> deltaTransactionStrategy(DeltaTransactionStrategy deltaStrategy);
27 27
28 VersionedMapStoreFactory<K,V> build(); 28 VersionedMapStoreFactory<K,V> build();
diff --git a/subprojects/store/src/main/java/tools/refinery/store/map/internal/HashClash.java b/subprojects/store/src/main/java/tools/refinery/store/map/internal/HashClash.java
deleted file mode 100644
index a357fbce..00000000
--- a/subprojects/store/src/main/java/tools/refinery/store/map/internal/HashClash.java
+++ /dev/null
@@ -1,23 +0,0 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
6package tools.refinery.store.map.internal;
7
8enum HashClash {
9 /**
10 * Not stuck.
11 */
12 NONE,
13
14 /**
15 * Clashed, next we should return the key of cursor 1.
16 */
17 STUCK_CURSOR_1,
18
19 /**
20 * Clashed, next we should return the key of cursor 2.
21 */
22 STUCK_CURSOR_2
23}
diff --git a/subprojects/store/src/main/java/tools/refinery/store/map/internal/VersionedMapStoreFactoryBuilderImpl.java b/subprojects/store/src/main/java/tools/refinery/store/map/internal/VersionedMapStoreFactoryBuilderImpl.java
index cf117d95..47470236 100644
--- a/subprojects/store/src/main/java/tools/refinery/store/map/internal/VersionedMapStoreFactoryBuilderImpl.java
+++ b/subprojects/store/src/main/java/tools/refinery/store/map/internal/VersionedMapStoreFactoryBuilderImpl.java
@@ -5,9 +5,11 @@
5 */ 5 */
6package tools.refinery.store.map.internal; 6package tools.refinery.store.map.internal;
7 7
8import tools.refinery.store.map.ContinousHashProvider; 8import tools.refinery.store.map.ContinuousHashProvider;
9import tools.refinery.store.map.VersionedMapStoreFactory; 9import tools.refinery.store.map.VersionedMapStoreFactory;
10import tools.refinery.store.map.VersionedMapStoreFactoryBuilder; 10import tools.refinery.store.map.VersionedMapStoreFactoryBuilder;
11import tools.refinery.store.map.internal.delta.DeltaBasedVersionedMapStoreFactory;
12import tools.refinery.store.map.internal.state.StateBasedVersionedMapStoreFactory;
11 13
12public class VersionedMapStoreFactoryBuilderImpl<K, V> implements VersionedMapStoreFactoryBuilder<K, V> { 14public class VersionedMapStoreFactoryBuilderImpl<K, V> implements VersionedMapStoreFactoryBuilder<K, V> {
13 15
@@ -16,14 +18,14 @@ public class VersionedMapStoreFactoryBuilderImpl<K, V> implements VersionedMapSt
16 private StoreStrategy strategy = null; 18 private StoreStrategy strategy = null;
17 private Boolean transformToImmutable = null; 19 private Boolean transformToImmutable = null;
18 private SharingStrategy sharingStrategy = null; 20 private SharingStrategy sharingStrategy = null;
19 private ContinousHashProvider<K> continousHashProvider = null; 21 private ContinuousHashProvider<K> continuousHashProvider = null;
20 private DeltaTransactionStrategy deltaTransactionStrategy = null; 22 private DeltaTransactionStrategy deltaTransactionStrategy = null;
21 23
22 private StoreStrategy checkStrategy() { 24 private StoreStrategy checkStrategy() {
23 StoreStrategy currentStrategy = strategy; 25 StoreStrategy currentStrategy = strategy;
24 currentStrategy = mergeStrategies(currentStrategy, transformToImmutable, StoreStrategy.STATE); 26 currentStrategy = mergeStrategies(currentStrategy, transformToImmutable, StoreStrategy.STATE);
25 currentStrategy = mergeStrategies(currentStrategy, sharingStrategy, StoreStrategy.STATE); 27 currentStrategy = mergeStrategies(currentStrategy, sharingStrategy, StoreStrategy.STATE);
26 currentStrategy = mergeStrategies(currentStrategy, continousHashProvider, StoreStrategy.STATE); 28 currentStrategy = mergeStrategies(currentStrategy, continuousHashProvider, StoreStrategy.STATE);
27 currentStrategy = mergeStrategies(currentStrategy, deltaTransactionStrategy, StoreStrategy.DELTA); 29 currentStrategy = mergeStrategies(currentStrategy, deltaTransactionStrategy, StoreStrategy.DELTA);
28 return currentStrategy; 30 return currentStrategy;
29 } 31 }
@@ -77,8 +79,8 @@ public class VersionedMapStoreFactoryBuilderImpl<K, V> implements VersionedMapSt
77 } 79 }
78 80
79 @Override 81 @Override
80 public VersionedMapStoreFactoryBuilder<K, V> stateBasedHashProvider(ContinousHashProvider<K> hashProvider) { 82 public VersionedMapStoreFactoryBuilder<K, V> stateBasedHashProvider(ContinuousHashProvider<K> hashProvider) {
81 this.continousHashProvider = hashProvider; 83 this.continuousHashProvider = hashProvider;
82 checkStrategy(); 84 checkStrategy();
83 return this; 85 return this;
84 } 86 }
@@ -110,13 +112,13 @@ public class VersionedMapStoreFactoryBuilderImpl<K, V> implements VersionedMapSt
110 } 112 }
111 return switch (strategyToUse) { 113 return switch (strategyToUse) {
112 case STATE -> { 114 case STATE -> {
113 if(continousHashProvider == null) { 115 if(continuousHashProvider == null) {
114 throw new IllegalArgumentException("Continuous hash provider is missing!"); 116 throw new IllegalArgumentException("Continuous hash provider is missing!");
115 } 117 }
116 yield new StateBasedVersionedMapStoreFactory<>(defaultValue, 118 yield new StateBasedVersionedMapStoreFactory<>(defaultValue,
117 getOrDefault(transformToImmutable,true), 119 getOrDefault(transformToImmutable,true),
118 getOrDefault(sharingStrategy, SharingStrategy.SHARED_NODE_CACHE_IN_GROUP), 120 getOrDefault(sharingStrategy, SharingStrategy.SHARED_NODE_CACHE_IN_GROUP),
119 continousHashProvider); 121 continuousHashProvider);
120 } 122 }
121 case DELTA -> new DeltaBasedVersionedMapStoreFactory<>(defaultValue, 123 case DELTA -> new DeltaBasedVersionedMapStoreFactory<>(defaultValue,
122 getOrDefault(deltaTransactionStrategy, DeltaTransactionStrategy.LIST)); 124 getOrDefault(deltaTransactionStrategy, DeltaTransactionStrategy.LIST));
@@ -130,7 +132,7 @@ public class VersionedMapStoreFactoryBuilderImpl<K, V> implements VersionedMapSt
130 ", strategy=" + strategy + 132 ", strategy=" + strategy +
131 ", stateBasedImmutableWhenCommitting=" + transformToImmutable + 133 ", stateBasedImmutableWhenCommitting=" + transformToImmutable +
132 ", stateBasedNodeSharingStrategy=" + sharingStrategy + 134 ", stateBasedNodeSharingStrategy=" + sharingStrategy +
133 ", hashProvider=" + continousHashProvider + 135 ", hashProvider=" + continuousHashProvider +
134 ", deltaStorageStrategy=" + deltaTransactionStrategy + 136 ", deltaStorageStrategy=" + deltaTransactionStrategy +
135 '}'; 137 '}';
136 } 138 }
diff --git a/subprojects/store/src/main/java/tools/refinery/store/map/internal/DeltaBasedVersionedMapStoreFactory.java b/subprojects/store/src/main/java/tools/refinery/store/map/internal/delta/DeltaBasedVersionedMapStoreFactory.java
index fe490f46..cedcdc0b 100644
--- a/subprojects/store/src/main/java/tools/refinery/store/map/internal/DeltaBasedVersionedMapStoreFactory.java
+++ b/subprojects/store/src/main/java/tools/refinery/store/map/internal/delta/DeltaBasedVersionedMapStoreFactory.java
@@ -1,12 +1,11 @@
1/* 1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> 2 * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/>
3 * 3 *
4 * SPDX-License-Identifier: EPL-2.0 4 * SPDX-License-Identifier: EPL-2.0
5 */ 5 */
6package tools.refinery.store.map.internal; 6package tools.refinery.store.map.internal.delta;
7 7
8import tools.refinery.store.map.VersionedMapStore; 8import tools.refinery.store.map.VersionedMapStore;
9import tools.refinery.store.map.VersionedMapStoreDeltaImpl;
10import tools.refinery.store.map.VersionedMapStoreFactory; 9import tools.refinery.store.map.VersionedMapStoreFactory;
11import tools.refinery.store.map.VersionedMapStoreFactoryBuilder; 10import tools.refinery.store.map.VersionedMapStoreFactoryBuilder;
12 11
diff --git a/subprojects/store/src/main/java/tools/refinery/store/map/internal/DeltaDiffCursor.java b/subprojects/store/src/main/java/tools/refinery/store/map/internal/delta/DeltaDiffCursor.java
index cc9003e3..ce10b246 100644
--- a/subprojects/store/src/main/java/tools/refinery/store/map/internal/DeltaDiffCursor.java
+++ b/subprojects/store/src/main/java/tools/refinery/store/map/internal/delta/DeltaDiffCursor.java
@@ -1,9 +1,9 @@
1/* 1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> 2 * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/>
3 * 3 *
4 * SPDX-License-Identifier: EPL-2.0 4 * SPDX-License-Identifier: EPL-2.0
5 */ 5 */
6package tools.refinery.store.map.internal; 6package tools.refinery.store.map.internal.delta;
7 7
8import tools.refinery.store.map.AnyVersionedMap; 8import tools.refinery.store.map.AnyVersionedMap;
9import tools.refinery.store.map.DiffCursor; 9import tools.refinery.store.map.DiffCursor;
diff --git a/subprojects/store/src/main/java/tools/refinery/store/map/internal/MapDelta.java b/subprojects/store/src/main/java/tools/refinery/store/map/internal/delta/MapDelta.java
index 2674236c..0c0cc906 100644
--- a/subprojects/store/src/main/java/tools/refinery/store/map/internal/MapDelta.java
+++ b/subprojects/store/src/main/java/tools/refinery/store/map/internal/delta/MapDelta.java
@@ -1,9 +1,9 @@
1/* 1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> 2 * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/>
3 * 3 *
4 * SPDX-License-Identifier: EPL-2.0 4 * SPDX-License-Identifier: EPL-2.0
5 */ 5 */
6package tools.refinery.store.map.internal; 6package tools.refinery.store.map.internal.delta;
7 7
8public record MapDelta<K, V>(K key, V oldValue, V newValue) { 8public record MapDelta<K, V>(K key, V oldValue, V newValue) {
9 public K getKey() { 9 public K getKey() {
diff --git a/subprojects/store/src/main/java/tools/refinery/store/map/internal/MapTransaction.java b/subprojects/store/src/main/java/tools/refinery/store/map/internal/delta/MapTransaction.java
index d63522cd..7f9ccd7f 100644
--- a/subprojects/store/src/main/java/tools/refinery/store/map/internal/MapTransaction.java
+++ b/subprojects/store/src/main/java/tools/refinery/store/map/internal/delta/MapTransaction.java
@@ -1,9 +1,9 @@
1/* 1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> 2 * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/>
3 * 3 *
4 * SPDX-License-Identifier: EPL-2.0 4 * SPDX-License-Identifier: EPL-2.0
5 */ 5 */
6package tools.refinery.store.map.internal; 6package tools.refinery.store.map.internal.delta;
7 7
8import java.util.Arrays; 8import java.util.Arrays;
9import java.util.Objects; 9import java.util.Objects;
diff --git a/subprojects/store/src/main/java/tools/refinery/store/map/internal/UncommittedDeltaArrayStore.java b/subprojects/store/src/main/java/tools/refinery/store/map/internal/delta/UncommittedDeltaArrayStore.java
index ba59cfef..1f6a9000 100644
--- a/subprojects/store/src/main/java/tools/refinery/store/map/internal/UncommittedDeltaArrayStore.java
+++ b/subprojects/store/src/main/java/tools/refinery/store/map/internal/delta/UncommittedDeltaArrayStore.java
@@ -1,9 +1,9 @@
1/* 1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> 2 * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/>
3 * 3 *
4 * SPDX-License-Identifier: EPL-2.0 4 * SPDX-License-Identifier: EPL-2.0
5 */ 5 */
6package tools.refinery.store.map.internal; 6package tools.refinery.store.map.internal.delta;
7 7
8import java.util.ArrayList; 8import java.util.ArrayList;
9import java.util.List; 9import java.util.List;
diff --git a/subprojects/store/src/main/java/tools/refinery/store/map/internal/UncommittedDeltaMapStore.java b/subprojects/store/src/main/java/tools/refinery/store/map/internal/delta/UncommittedDeltaMapStore.java
index 61a34351..644884a6 100644
--- a/subprojects/store/src/main/java/tools/refinery/store/map/internal/UncommittedDeltaMapStore.java
+++ b/subprojects/store/src/main/java/tools/refinery/store/map/internal/delta/UncommittedDeltaMapStore.java
@@ -1,9 +1,9 @@
1/* 1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> 2 * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/>
3 * 3 *
4 * SPDX-License-Identifier: EPL-2.0 4 * SPDX-License-Identifier: EPL-2.0
5 */ 5 */
6package tools.refinery.store.map.internal; 6package tools.refinery.store.map.internal.delta;
7 7
8import java.util.*; 8import java.util.*;
9import java.util.Map.Entry; 9import java.util.Map.Entry;
diff --git a/subprojects/store/src/main/java/tools/refinery/store/map/internal/UncommittedDeltaStore.java b/subprojects/store/src/main/java/tools/refinery/store/map/internal/delta/UncommittedDeltaStore.java
index 438b5561..ecd33c5f 100644
--- a/subprojects/store/src/main/java/tools/refinery/store/map/internal/UncommittedDeltaStore.java
+++ b/subprojects/store/src/main/java/tools/refinery/store/map/internal/delta/UncommittedDeltaStore.java
@@ -1,9 +1,9 @@
1/* 1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> 2 * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/>
3 * 3 *
4 * SPDX-License-Identifier: EPL-2.0 4 * SPDX-License-Identifier: EPL-2.0
5 */ 5 */
6package tools.refinery.store.map.internal; 6package tools.refinery.store.map.internal.delta;
7 7
8public interface UncommittedDeltaStore<K, V> { 8public interface UncommittedDeltaStore<K, V> {
9 void processChange(K key, V oldValue, V newValue); 9 void processChange(K key, V oldValue, V newValue);
diff --git a/subprojects/store/src/main/java/tools/refinery/store/map/internal/VersionedMapDeltaImpl.java b/subprojects/store/src/main/java/tools/refinery/store/map/internal/delta/VersionedMapDeltaImpl.java
index ae47feda..5bb864ac 100644
--- a/subprojects/store/src/main/java/tools/refinery/store/map/internal/VersionedMapDeltaImpl.java
+++ b/subprojects/store/src/main/java/tools/refinery/store/map/internal/delta/VersionedMapDeltaImpl.java
@@ -1,13 +1,14 @@
1/* 1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> 2 * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/>
3 * 3 *
4 * SPDX-License-Identifier: EPL-2.0 4 * SPDX-License-Identifier: EPL-2.0
5 */ 5 */
6package tools.refinery.store.map.internal; 6package tools.refinery.store.map.internal.delta;
7 7
8import java.util.*; 8import java.util.*;
9 9
10import tools.refinery.store.map.*; 10import tools.refinery.store.map.*;
11import tools.refinery.store.map.IteratorAsCursor;
11 12
12public class VersionedMapDeltaImpl<K, V> implements VersionedMap<K, V> { 13public class VersionedMapDeltaImpl<K, V> implements VersionedMap<K, V> {
13 protected final VersionedMapStoreDeltaImpl<K, V> store; 14 protected final VersionedMapStoreDeltaImpl<K, V> store;
diff --git a/subprojects/store/src/main/java/tools/refinery/store/map/VersionedMapStoreDeltaImpl.java b/subprojects/store/src/main/java/tools/refinery/store/map/internal/delta/VersionedMapStoreDeltaImpl.java
index 0c61bd09..7f56ea77 100644
--- a/subprojects/store/src/main/java/tools/refinery/store/map/VersionedMapStoreDeltaImpl.java
+++ b/subprojects/store/src/main/java/tools/refinery/store/map/internal/delta/VersionedMapStoreDeltaImpl.java
@@ -1,13 +1,15 @@
1/* 1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> 2 * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/>
3 * 3 *
4 * SPDX-License-Identifier: EPL-2.0 4 * SPDX-License-Identifier: EPL-2.0
5 */ 5 */
6package tools.refinery.store.map; 6package tools.refinery.store.map.internal.delta;
7 7
8import java.util.*; 8import tools.refinery.store.map.DiffCursor;
9import tools.refinery.store.map.VersionedMap;
10import tools.refinery.store.map.VersionedMapStore;
9 11
10import tools.refinery.store.map.internal.*; 12import java.util.*;
11 13
12public class VersionedMapStoreDeltaImpl<K, V> implements VersionedMapStore<K, V> { 14public class VersionedMapStoreDeltaImpl<K, V> implements VersionedMapStore<K, V> {
13 // Configuration 15 // Configuration
diff --git a/subprojects/store/src/main/java/tools/refinery/store/map/internal/ImmutableNode.java b/subprojects/store/src/main/java/tools/refinery/store/map/internal/state/ImmutableNode.java
index d052318f..722f9ed7 100644
--- a/subprojects/store/src/main/java/tools/refinery/store/map/internal/ImmutableNode.java
+++ b/subprojects/store/src/main/java/tools/refinery/store/map/internal/state/ImmutableNode.java
@@ -1,14 +1,14 @@
1/* 1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> 2 * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/>
3 * 3 *
4 * SPDX-License-Identifier: EPL-2.0 4 * SPDX-License-Identifier: EPL-2.0
5 */ 5 */
6package tools.refinery.store.map.internal; 6package tools.refinery.store.map.internal.state;
7 7
8import java.util.Arrays; 8import java.util.Arrays;
9import java.util.Map; 9import java.util.Map;
10 10
11import tools.refinery.store.map.ContinousHashProvider; 11import tools.refinery.store.map.ContinuousHashProvider;
12 12
13public class ImmutableNode<K, V> extends Node<K, V> { 13public class ImmutableNode<K, V> extends Node<K, V> {
14 /** 14 /**
@@ -104,7 +104,7 @@ public class ImmutableNode<K, V> extends Node<K, V> {
104 } 104 }
105 105
106 @Override 106 @Override
107 public V getValue(K key, ContinousHashProvider<? super K> hashProvider, V defaultValue, int hash, int depth) { 107 public V getValue(K key, ContinuousHashProvider<? super K> hashProvider, V defaultValue, int hash, int depth) {
108 int selectedHashFragment = hashFragment(hash, shiftDepth(depth)); 108 int selectedHashFragment = hashFragment(hash, shiftDepth(depth));
109 int bitposition = 1 << selectedHashFragment; 109 int bitposition = 1 << selectedHashFragment;
110 // If the key is stored as a data 110 // If the key is stored as a data
@@ -133,7 +133,7 @@ public class ImmutableNode<K, V> extends Node<K, V> {
133 } 133 }
134 134
135 @Override 135 @Override
136 public Node<K, V> putValue(K key, V value, OldValueBox<V> oldValue, ContinousHashProvider<? super K> hashProvider, V defaultValue, int hash, int depth) { 136 public Node<K, V> putValue(K key, V value, OldValueBox<V> oldValue, ContinuousHashProvider<? super K> hashProvider, V defaultValue, int hash, int depth) {
137 int selectedHashFragment = hashFragment(hash, shiftDepth(depth)); 137 int selectedHashFragment = hashFragment(hash, shiftDepth(depth));
138 int bitPosition = 1 << selectedHashFragment; 138 int bitPosition = 1 << selectedHashFragment;
139 if ((dataMap & bitPosition) != 0) { 139 if ((dataMap & bitPosition) != 0) {
@@ -145,7 +145,7 @@ public class ImmutableNode<K, V> extends Node<K, V> {
145 MutableNode<K, V> mutable = this.toMutable(); 145 MutableNode<K, V> mutable = this.toMutable();
146 return mutable.removeEntry(selectedHashFragment, oldValue); 146 return mutable.removeEntry(selectedHashFragment, oldValue);
147 } else if (value == content[keyIndex + 1]) { 147 } else if (value == content[keyIndex + 1]) {
148 // dont change 148 // don't change
149 oldValue.setOldValue(value); 149 oldValue.setOldValue(value);
150 return this; 150 return this;
151 } else { 151 } else {
@@ -155,7 +155,7 @@ public class ImmutableNode<K, V> extends Node<K, V> {
155 } 155 }
156 } else { 156 } else {
157 if (value == defaultValue) { 157 if (value == defaultValue) {
158 // dont change 158 // don't change
159 oldValue.setOldValue(defaultValue); 159 oldValue.setOldValue(defaultValue);
160 return this; 160 return this;
161 } else { 161 } else {
@@ -339,7 +339,7 @@ public class ImmutableNode<K, V> extends Node<K, V> {
339 } 339 }
340 340
341 @Override 341 @Override
342 public void checkIntegrity(ContinousHashProvider<? super K> hashProvider, V defaultValue, int depth) { 342 public void checkIntegrity(ContinuousHashProvider<? super K> hashProvider, V defaultValue, int depth) {
343 if (depth > 0) { 343 if (depth > 0) {
344 boolean orphaned = Integer.bitCount(dataMap) == 1 && nodeMap == 0; 344 boolean orphaned = Integer.bitCount(dataMap) == 1 && nodeMap == 0;
345 if (orphaned) { 345 if (orphaned) {
diff --git a/subprojects/store/src/main/java/tools/refinery/store/map/internal/InOrderMapCursor.java b/subprojects/store/src/main/java/tools/refinery/store/map/internal/state/InOrderMapCursor.java
index cb3f366f..7cc91004 100644
--- a/subprojects/store/src/main/java/tools/refinery/store/map/internal/InOrderMapCursor.java
+++ b/subprojects/store/src/main/java/tools/refinery/store/map/internal/state/InOrderMapCursor.java
@@ -1,9 +1,9 @@
1/* 1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> 2 * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/>
3 * 3 *
4 * SPDX-License-Identifier: EPL-2.0 4 * SPDX-License-Identifier: EPL-2.0
5 */ 5 */
6package tools.refinery.store.map.internal; 6package tools.refinery.store.map.internal.state;
7 7
8import tools.refinery.store.map.AnyVersionedMap; 8import tools.refinery.store.map.AnyVersionedMap;
9import tools.refinery.store.map.ContentHashCode; 9import tools.refinery.store.map.ContentHashCode;
@@ -29,7 +29,7 @@ public class InOrderMapCursor<K, V> implements Cursor<K, V> {
29 final VersionedMap<K, V> map; 29 final VersionedMap<K, V> map;
30 final int creationHash; 30 final int creationHash;
31 31
32 public InOrderMapCursor(VersionedMapImpl<K, V> map) { 32 public InOrderMapCursor(VersionedMapStateImpl<K, V> map) {
33 // Initializing tree stack 33 // Initializing tree stack
34 super(); 34 super();
35 this.nodeStack = new ArrayDeque<>(); 35 this.nodeStack = new ArrayDeque<>();
diff --git a/subprojects/store/src/main/java/tools/refinery/store/map/internal/MapCursor.java b/subprojects/store/src/main/java/tools/refinery/store/map/internal/state/MapCursor.java
index d42519b2..0db50d04 100644
--- a/subprojects/store/src/main/java/tools/refinery/store/map/internal/MapCursor.java
+++ b/subprojects/store/src/main/java/tools/refinery/store/map/internal/state/MapCursor.java
@@ -1,9 +1,9 @@
1/* 1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> 2 * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/>
3 * 3 *
4 * SPDX-License-Identifier: EPL-2.0 4 * SPDX-License-Identifier: EPL-2.0
5 */ 5 */
6package tools.refinery.store.map.internal; 6package tools.refinery.store.map.internal.state;
7 7
8import tools.refinery.store.map.AnyVersionedMap; 8import tools.refinery.store.map.AnyVersionedMap;
9import tools.refinery.store.map.ContentHashCode; 9import tools.refinery.store.map.ContentHashCode;
diff --git a/subprojects/store/src/main/java/tools/refinery/store/map/internal/MapDiffCursor.java b/subprojects/store/src/main/java/tools/refinery/store/map/internal/state/MapDiffCursor.java
index fb1d5d2b..083bf8cf 100644
--- a/subprojects/store/src/main/java/tools/refinery/store/map/internal/MapDiffCursor.java
+++ b/subprojects/store/src/main/java/tools/refinery/store/map/internal/state/MapDiffCursor.java
@@ -1,9 +1,9 @@
1/* 1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> 2 * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/>
3 * 3 *
4 * SPDX-License-Identifier: EPL-2.0 4 * SPDX-License-Identifier: EPL-2.0
5 */ 5 */
6package tools.refinery.store.map.internal; 6package tools.refinery.store.map.internal.state;
7 7
8import tools.refinery.store.map.AnyVersionedMap; 8import tools.refinery.store.map.AnyVersionedMap;
9import tools.refinery.store.map.Cursor; 9import tools.refinery.store.map.Cursor;
diff --git a/subprojects/store/src/main/java/tools/refinery/store/map/internal/MutableNode.java b/subprojects/store/src/main/java/tools/refinery/store/map/internal/state/MutableNode.java
index bb85deb9..408ed62c 100644
--- a/subprojects/store/src/main/java/tools/refinery/store/map/internal/MutableNode.java
+++ b/subprojects/store/src/main/java/tools/refinery/store/map/internal/state/MutableNode.java
@@ -1,11 +1,11 @@
1/* 1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> 2 * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/>
3 * 3 *
4 * SPDX-License-Identifier: EPL-2.0 4 * SPDX-License-Identifier: EPL-2.0
5 */ 5 */
6package tools.refinery.store.map.internal; 6package tools.refinery.store.map.internal.state;
7 7
8import tools.refinery.store.map.ContinousHashProvider; 8import tools.refinery.store.map.ContinuousHashProvider;
9 9
10import java.util.Arrays; 10import java.util.Arrays;
11import java.util.Map; 11import java.util.Map;
@@ -20,7 +20,7 @@ public class MutableNode<K, V> extends Node<K, V> {
20 invalidateHash(); 20 invalidateHash();
21 } 21 }
22 22
23 public static <K, V> MutableNode<K, V> initialize(K key, V value, ContinousHashProvider<? super K> hashProvider, V defaultValue) { 23 public static <K, V> MutableNode<K, V> initialize(K key, V value, ContinuousHashProvider<? super K> hashProvider, V defaultValue) {
24 if (value == defaultValue) { 24 if (value == defaultValue) {
25 return null; 25 return null;
26 } else { 26 } else {
@@ -58,7 +58,7 @@ public class MutableNode<K, V> extends Node<K, V> {
58 } 58 }
59 59
60 @Override 60 @Override
61 public V getValue(K key, ContinousHashProvider<? super K> hashProvider, V defaultValue, int hash, int depth) { 61 public V getValue(K key, ContinuousHashProvider<? super K> hashProvider, V defaultValue, int hash, int depth) {
62 int selectedHashFragment = hashFragment(hash, shiftDepth(depth)); 62 int selectedHashFragment = hashFragment(hash, shiftDepth(depth));
63 @SuppressWarnings("unchecked") K keyCandidate = (K) this.content[2 * selectedHashFragment]; 63 @SuppressWarnings("unchecked") K keyCandidate = (K) this.content[2 * selectedHashFragment];
64 if (keyCandidate != null) { 64 if (keyCandidate != null) {
@@ -81,7 +81,7 @@ public class MutableNode<K, V> extends Node<K, V> {
81 } 81 }
82 82
83 @Override 83 @Override
84 public Node<K, V> putValue(K key, V value, OldValueBox<V> oldValueBox, ContinousHashProvider<? super K> hashProvider, V defaultValue, int hash, int depth) { 84 public Node<K, V> putValue(K key, V value, OldValueBox<V> oldValueBox, ContinuousHashProvider<? super K> hashProvider, V defaultValue, int hash, int depth) {
85 int selectedHashFragment = hashFragment(hash, shiftDepth(depth)); 85 int selectedHashFragment = hashFragment(hash, shiftDepth(depth));
86 @SuppressWarnings("unchecked") K keyCandidate = (K) content[2 * selectedHashFragment]; 86 @SuppressWarnings("unchecked") K keyCandidate = (K) content[2 * selectedHashFragment];
87 if (keyCandidate != null) { 87 if (keyCandidate != null) {
@@ -217,7 +217,7 @@ public class MutableNode<K, V> extends Node<K, V> {
217 } 217 }
218 218
219 @SuppressWarnings("unchecked") 219 @SuppressWarnings("unchecked")
220 private Node<K, V> moveDownAndSplit(ContinousHashProvider<? super K> hashProvider, K newKey, V newValue, K previousKey, int hashOfNewKey, int depth, int selectedHashFragmentOfCurrentDepth) { 220 private Node<K, V> moveDownAndSplit(ContinuousHashProvider<? super K> hashProvider, K newKey, V newValue, K previousKey, int hashOfNewKey, int depth, int selectedHashFragmentOfCurrentDepth) {
221 V previousValue = (V) content[2 * selectedHashFragmentOfCurrentDepth + 1]; 221 V previousValue = (V) content[2 * selectedHashFragmentOfCurrentDepth + 1];
222 222
223 MutableNode<K, V> newSubNode = newNodeWithTwoEntries(hashProvider, previousKey, previousValue, hashProvider.getHash(previousKey, hashDepth(depth)), newKey, newValue, hashOfNewKey, incrementDepth(depth)); 223 MutableNode<K, V> newSubNode = newNodeWithTwoEntries(hashProvider, previousKey, previousValue, hashProvider.getHash(previousKey, hashDepth(depth)), newKey, newValue, hashOfNewKey, incrementDepth(depth));
@@ -230,7 +230,7 @@ public class MutableNode<K, V> extends Node<K, V> {
230 230
231 // Pass everything as parameters for performance. 231 // Pass everything as parameters for performance.
232 @SuppressWarnings("squid:S107") 232 @SuppressWarnings("squid:S107")
233 private MutableNode<K, V> newNodeWithTwoEntries(ContinousHashProvider<? super K> hashProvider, K key1, V value1, int oldHash1, K key2, V value2, int oldHash2, int newDepth) { 233 private MutableNode<K, V> newNodeWithTwoEntries(ContinuousHashProvider<? super K> hashProvider, K key1, V value1, int oldHash1, K key2, V value2, int oldHash2, int newDepth) {
234 int newHash1 = newHash(hashProvider, key1, oldHash1, newDepth); 234 int newHash1 = newHash(hashProvider, key1, oldHash1, newDepth);
235 int newHash2 = newHash(hashProvider, key2, oldHash2, newDepth); 235 int newHash2 = newHash(hashProvider, key2, oldHash2, newDepth);
236 int newFragment1 = hashFragment(newHash1, shiftDepth(newDepth)); 236 int newFragment1 = hashFragment(newHash1, shiftDepth(newDepth));
@@ -418,7 +418,7 @@ public class MutableNode<K, V> extends Node<K, V> {
418 } 418 }
419 419
420 @Override 420 @Override
421 public void checkIntegrity(ContinousHashProvider<? super K> hashProvider, V defaultValue, int depth) { 421 public void checkIntegrity(ContinuousHashProvider<? super K> hashProvider, V defaultValue, int depth) {
422 // check for orphan nodes 422 // check for orphan nodes
423 if (depth > 0) { 423 if (depth > 0) {
424 int orphaned = isOrphaned(); 424 int orphaned = isOrphaned();
diff --git a/subprojects/store/src/main/java/tools/refinery/store/map/internal/Node.java b/subprojects/store/src/main/java/tools/refinery/store/map/internal/state/Node.java
index 4b44f760..0ecf2712 100644
--- a/subprojects/store/src/main/java/tools/refinery/store/map/internal/Node.java
+++ b/subprojects/store/src/main/java/tools/refinery/store/map/internal/state/Node.java
@@ -1,13 +1,13 @@
1/* 1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> 2 * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/>
3 * 3 *
4 * SPDX-License-Identifier: EPL-2.0 4 * SPDX-License-Identifier: EPL-2.0
5 */ 5 */
6package tools.refinery.store.map.internal; 6package tools.refinery.store.map.internal.state;
7 7
8import java.util.Map; 8import java.util.Map;
9 9
10import tools.refinery.store.map.ContinousHashProvider; 10import tools.refinery.store.map.ContinuousHashProvider;
11 11
12public abstract class Node<K, V> { 12public abstract class Node<K, V> {
13 public static final int BRANCHING_FACTOR_BITS = 5; 13 public static final int BRANCHING_FACTOR_BITS = 5;
@@ -77,14 +77,14 @@ public abstract class Node<K, V> {
77 * @param depth The depth. 77 * @param depth The depth.
78 * @return The new hash code. 78 * @return The new hash code.
79 */ 79 */
80 protected int newHash(final ContinousHashProvider<? super K> hashProvider, K key, int hash, int depth) { 80 protected int newHash(final ContinuousHashProvider<? super K> hashProvider, K key, int hash, int depth) {
81 final int shiftDepth = shiftDepth(depth); 81 final int shiftDepth = shiftDepth(depth);
82 if (shiftDepth == 0) { 82 if (shiftDepth == 0) {
83 final int hashDepth = hashDepth(depth); 83 final int hashDepth = hashDepth(depth);
84 if (hashDepth >= ContinousHashProvider.MAX_PRACTICAL_DEPTH) { 84 if (hashDepth >= ContinuousHashProvider.MAX_PRACTICAL_DEPTH) {
85 throw new IllegalArgumentException( 85 throw new IllegalArgumentException(
86 "Key " + key + " have the clashing hashcode over the practical depth limitation (" 86 "Key " + key + " have the clashing hashcode over the practical depth limitation ("
87 + ContinousHashProvider.MAX_PRACTICAL_DEPTH + ")!"); 87 + ContinuousHashProvider.MAX_PRACTICAL_DEPTH + ")!");
88 } 88 }
89 return hashProvider.getHash(key, hashDepth); 89 return hashProvider.getHash(key, hashDepth);
90 } else { 90 } else {
@@ -92,11 +92,11 @@ public abstract class Node<K, V> {
92 } 92 }
93 } 93 }
94 94
95 public abstract V getValue(K key, ContinousHashProvider<? super K> hashProvider, V defaultValue, int hash, 95 public abstract V getValue(K key, ContinuousHashProvider<? super K> hashProvider, V defaultValue, int hash,
96 int depth); 96 int depth);
97 97
98 public abstract Node<K, V> putValue(K key, V value, OldValueBox<V> old, 98 public abstract Node<K, V> putValue(K key, V value, OldValueBox<V> old,
99 ContinousHashProvider<? super K> hashProvider, V defaultValue, int hash, int depth); 99 ContinuousHashProvider<? super K> hashProvider, V defaultValue, int hash, int depth);
100 100
101 public abstract long getSize(); 101 public abstract long getSize();
102 102
@@ -126,6 +126,6 @@ public abstract class Node<K, V> {
126 return stringBuilder.toString(); 126 return stringBuilder.toString();
127 } 127 }
128 128
129 public void checkIntegrity(ContinousHashProvider<? super K> hashProvider, V defaultValue, int depth) { 129 public void checkIntegrity(ContinuousHashProvider<? super K> hashProvider, V defaultValue, int depth) {
130 } 130 }
131} 131}
diff --git a/subprojects/store/src/main/java/tools/refinery/store/map/internal/OldValueBox.java b/subprojects/store/src/main/java/tools/refinery/store/map/internal/state/OldValueBox.java
index 354af51d..1b0a4b0c 100644
--- a/subprojects/store/src/main/java/tools/refinery/store/map/internal/OldValueBox.java
+++ b/subprojects/store/src/main/java/tools/refinery/store/map/internal/state/OldValueBox.java
@@ -1,9 +1,9 @@
1/* 1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> 2 * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/>
3 * 3 *
4 * SPDX-License-Identifier: EPL-2.0 4 * SPDX-License-Identifier: EPL-2.0
5 */ 5 */
6package tools.refinery.store.map.internal; 6package tools.refinery.store.map.internal.state;
7 7
8public class OldValueBox<V>{ 8public class OldValueBox<V>{
9 V oldValue; 9 V oldValue;
@@ -20,5 +20,5 @@ public class OldValueBox<V>{
20 this.oldValue = ouldValue; 20 this.oldValue = ouldValue;
21 isSet = true; 21 isSet = true;
22 } 22 }
23 23
24} 24}
diff --git a/subprojects/store/src/main/java/tools/refinery/store/map/internal/StateBasedVersionedMapStoreFactory.java b/subprojects/store/src/main/java/tools/refinery/store/map/internal/state/StateBasedVersionedMapStoreFactory.java
index 1c3ab27b..9409ace0 100644
--- a/subprojects/store/src/main/java/tools/refinery/store/map/internal/StateBasedVersionedMapStoreFactory.java
+++ b/subprojects/store/src/main/java/tools/refinery/store/map/internal/state/StateBasedVersionedMapStoreFactory.java
@@ -1,9 +1,9 @@
1/* 1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> 2 * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/>
3 * 3 *
4 * SPDX-License-Identifier: EPL-2.0 4 * SPDX-License-Identifier: EPL-2.0
5 */ 5 */
6package tools.refinery.store.map.internal; 6package tools.refinery.store.map.internal.state;
7 7
8import tools.refinery.store.map.*; 8import tools.refinery.store.map.*;
9 9
@@ -11,14 +11,14 @@ import java.util.List;
11 11
12public class StateBasedVersionedMapStoreFactory<K, V> implements VersionedMapStoreFactory<K, V> { 12public class StateBasedVersionedMapStoreFactory<K, V> implements VersionedMapStoreFactory<K, V> {
13 private final V defaultValue; 13 private final V defaultValue;
14 private final ContinousHashProvider<K> continousHashProvider; 14 private final ContinuousHashProvider<K> continuousHashProvider;
15 private final VersionedMapStoreConfiguration config; 15 private final VersionedMapStoreStateConfiguration config;
16 16
17 public StateBasedVersionedMapStoreFactory(V defaultValue, Boolean transformToImmutable, VersionedMapStoreFactoryBuilder.SharingStrategy sharingStrategy, ContinousHashProvider<K> continousHashProvider) { 17 public StateBasedVersionedMapStoreFactory(V defaultValue, Boolean transformToImmutable, VersionedMapStoreFactoryBuilder.SharingStrategy sharingStrategy, ContinuousHashProvider<K> continuousHashProvider) {
18 this.defaultValue = defaultValue; 18 this.defaultValue = defaultValue;
19 this.continousHashProvider = continousHashProvider; 19 this.continuousHashProvider = continuousHashProvider;
20 20
21 this.config = new VersionedMapStoreConfiguration( 21 this.config = new VersionedMapStoreStateConfiguration(
22 transformToImmutable, 22 transformToImmutable,
23 sharingStrategy == VersionedMapStoreFactoryBuilder.SharingStrategy.SHARED_NODE_CACHE || sharingStrategy == VersionedMapStoreFactoryBuilder.SharingStrategy.SHARED_NODE_CACHE_IN_GROUP, 23 sharingStrategy == VersionedMapStoreFactoryBuilder.SharingStrategy.SHARED_NODE_CACHE || sharingStrategy == VersionedMapStoreFactoryBuilder.SharingStrategy.SHARED_NODE_CACHE_IN_GROUP,
24 sharingStrategy == VersionedMapStoreFactoryBuilder.SharingStrategy.SHARED_NODE_CACHE_IN_GROUP); 24 sharingStrategy == VersionedMapStoreFactoryBuilder.SharingStrategy.SHARED_NODE_CACHE_IN_GROUP);
@@ -26,13 +26,13 @@ public class StateBasedVersionedMapStoreFactory<K, V> implements VersionedMapSto
26 26
27 @Override 27 @Override
28 public VersionedMapStore<K, V> createOne() { 28 public VersionedMapStore<K, V> createOne() {
29 return new VersionedMapStoreImpl<>(continousHashProvider, defaultValue, config); 29 return new VersionedMapStoreStateImpl<>(continuousHashProvider, defaultValue, config);
30 30
31 } 31 }
32 32
33 @Override 33 @Override
34 public List<VersionedMapStore<K, V>> createGroup(int amount) { 34 public List<VersionedMapStore<K, V>> createGroup(int amount) {
35 return VersionedMapStoreImpl.createSharedVersionedMapStores(amount, continousHashProvider, defaultValue, 35 return VersionedMapStoreStateImpl.createSharedVersionedMapStores(amount, continuousHashProvider, defaultValue,
36 config); 36 config);
37 } 37 }
38} 38}
diff --git a/subprojects/store/src/main/java/tools/refinery/store/map/internal/VersionedMapImpl.java b/subprojects/store/src/main/java/tools/refinery/store/map/internal/state/VersionedMapStateImpl.java
index c107f7e0..817fc70b 100644
--- a/subprojects/store/src/main/java/tools/refinery/store/map/internal/VersionedMapImpl.java
+++ b/subprojects/store/src/main/java/tools/refinery/store/map/internal/state/VersionedMapStateImpl.java
@@ -1,9 +1,9 @@
1/* 1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> 2 * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/>
3 * 3 *
4 * SPDX-License-Identifier: EPL-2.0 4 * SPDX-License-Identifier: EPL-2.0
5 */ 5 */
6package tools.refinery.store.map.internal; 6package tools.refinery.store.map.internal.state;
7 7
8import tools.refinery.store.map.*; 8import tools.refinery.store.map.*;
9 9
@@ -19,18 +19,18 @@ import java.util.Objects;
19 * @param <V> 19 * @param <V>
20 * @author Oszkar Semerath 20 * @author Oszkar Semerath
21 */ 21 */
22public class VersionedMapImpl<K, V> implements VersionedMap<K, V> { 22public class VersionedMapStateImpl<K, V> implements VersionedMap<K, V> {
23 protected final VersionedMapStoreImpl<K, V> store; 23 protected final VersionedMapStoreStateImpl<K, V> store;
24 24
25 protected final ContinousHashProvider<K> hashProvider; 25 protected final ContinuousHashProvider<K> hashProvider;
26 protected final V defaultValue; 26 protected final V defaultValue;
27 protected Node<K, V> root; 27 protected Node<K, V> root;
28 28
29 private final OldValueBox<V> oldValueBox = new OldValueBox<>(); 29 private final OldValueBox<V> oldValueBox = new OldValueBox<>();
30 30
31 public VersionedMapImpl( 31 public VersionedMapStateImpl(
32 VersionedMapStoreImpl<K, V> store, 32 VersionedMapStoreStateImpl<K, V> store,
33 ContinousHashProvider<K> hashProvider, 33 ContinuousHashProvider<K> hashProvider,
34 V defaultValue) { 34 V defaultValue) {
35 this.store = store; 35 this.store = store;
36 this.hashProvider = hashProvider; 36 this.hashProvider = hashProvider;
@@ -38,9 +38,9 @@ public class VersionedMapImpl<K, V> implements VersionedMap<K, V> {
38 this.root = null; 38 this.root = null;
39 } 39 }
40 40
41 public VersionedMapImpl( 41 public VersionedMapStateImpl(
42 VersionedMapStoreImpl<K, V> store, 42 VersionedMapStoreStateImpl<K, V> store,
43 ContinousHashProvider<K> hashProvider, 43 ContinuousHashProvider<K> hashProvider,
44 V defaultValue, Node<K, V> data) { 44 V defaultValue, Node<K, V> data) {
45 this.store = store; 45 this.store = store;
46 this.hashProvider = hashProvider; 46 this.hashProvider = hashProvider;
@@ -53,7 +53,7 @@ public class VersionedMapImpl<K, V> implements VersionedMap<K, V> {
53 return defaultValue; 53 return defaultValue;
54 } 54 }
55 55
56 public ContinousHashProvider<K> getHashProvider() { 56 public ContinuousHashProvider<K> getHashProvider() {
57 return hashProvider; 57 return hashProvider;
58 } 58 }
59 59
@@ -117,7 +117,7 @@ public class VersionedMapImpl<K, V> implements VersionedMap<K, V> {
117 @Override 117 @Override
118 public DiffCursor<K, V> getDiffCursor(long toVersion) { 118 public DiffCursor<K, V> getDiffCursor(long toVersion) {
119 InOrderMapCursor<K, V> fromCursor = new InOrderMapCursor<>(this); 119 InOrderMapCursor<K, V> fromCursor = new InOrderMapCursor<>(this);
120 VersionedMapImpl<K, V> toMap = (VersionedMapImpl<K, V>) this.store.createMap(toVersion); 120 VersionedMapStateImpl<K, V> toMap = (VersionedMapStateImpl<K, V>) this.store.createMap(toVersion);
121 InOrderMapCursor<K, V> toCursor = new InOrderMapCursor<>(toMap); 121 InOrderMapCursor<K, V> toCursor = new InOrderMapCursor<>(toMap);
122 return new MapDiffCursor<>(this.defaultValue, fromCursor, toCursor); 122 return new MapDiffCursor<>(this.defaultValue, fromCursor, toCursor);
123 } 123 }
@@ -166,6 +166,6 @@ public class VersionedMapImpl<K, V> implements VersionedMap<K, V> {
166 166
167 @Override 167 @Override
168 public boolean contentEquals(AnyVersionedMap other) { 168 public boolean contentEquals(AnyVersionedMap other) {
169 return other instanceof VersionedMapImpl<?, ?> otherImpl && Objects.equals(root, otherImpl.root); 169 return other instanceof VersionedMapStateImpl<?, ?> otherImpl && Objects.equals(root, otherImpl.root);
170 } 170 }
171} 171}
diff --git a/subprojects/store/src/main/java/tools/refinery/store/map/VersionedMapStoreConfiguration.java b/subprojects/store/src/main/java/tools/refinery/store/map/internal/state/VersionedMapStoreStateConfiguration.java
index b00cd961..45f30cc7 100644
--- a/subprojects/store/src/main/java/tools/refinery/store/map/VersionedMapStoreConfiguration.java
+++ b/subprojects/store/src/main/java/tools/refinery/store/map/internal/state/VersionedMapStoreStateConfiguration.java
@@ -1,17 +1,20 @@
1/* 1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> 2 * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/>
3 * 3 *
4 * SPDX-License-Identifier: EPL-2.0 4 * SPDX-License-Identifier: EPL-2.0
5 */ 5 */
6package tools.refinery.store.map; 6package tools.refinery.store.map.internal.state;
7 7
8public class VersionedMapStoreConfiguration { 8import tools.refinery.store.map.ContinuousHashProvider;
9import tools.refinery.store.map.VersionedMapStore;
9 10
10 public VersionedMapStoreConfiguration() { 11public class VersionedMapStoreStateConfiguration {
12
13 public VersionedMapStoreStateConfiguration() {
11 14
12 } 15 }
13 public VersionedMapStoreConfiguration(boolean immutableWhenCommitting, boolean sharedNodeCacheInStore, 16 public VersionedMapStoreStateConfiguration(boolean immutableWhenCommitting, boolean sharedNodeCacheInStore,
14 boolean sharedNodeCacheInStoreGroups) { 17 boolean sharedNodeCacheInStoreGroups) {
15 super(); 18 super();
16 this.immutableWhenCommitting = immutableWhenCommitting; 19 this.immutableWhenCommitting = immutableWhenCommitting;
17 this.sharedNodeCacheInStore = sharedNodeCacheInStore; 20 this.sharedNodeCacheInStore = sharedNodeCacheInStore;
@@ -42,8 +45,8 @@ public class VersionedMapStoreConfiguration {
42 45
43 /** 46 /**
44 * If true, all sub-nodes are cached within a group of 47 * If true, all sub-nodes are cached within a group of
45 * {@link VersionedMapStoreImpl#createSharedVersionedMapStores(int, ContinousHashProvider, Object, VersionedMapStoreConfiguration)}. 48 * {@link VersionedMapStoreStateImpl#createSharedVersionedMapStores(int, ContinuousHashProvider, Object, VersionedMapStoreStateConfiguration)}.
46 * If {@link VersionedMapStoreConfiguration#sharedNodeCacheInStore} is 49 * If {@link VersionedMapStoreStateConfiguration#sharedNodeCacheInStore} is
47 * <code>false</code>, then it has currently no impact. 50 * <code>false</code>, then it has currently no impact.
48 */ 51 */
49 private boolean sharedNodeCacheInStoreGroups = true; 52 private boolean sharedNodeCacheInStoreGroups = true;
diff --git a/subprojects/store/src/main/java/tools/refinery/store/map/VersionedMapStoreImpl.java b/subprojects/store/src/main/java/tools/refinery/store/map/internal/state/VersionedMapStoreStateImpl.java
index a934d59e..0651772a 100644
--- a/subprojects/store/src/main/java/tools/refinery/store/map/VersionedMapStoreImpl.java
+++ b/subprojects/store/src/main/java/tools/refinery/store/map/internal/state/VersionedMapStoreStateImpl.java
@@ -1,20 +1,20 @@
1/* 1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> 2 * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/>
3 * 3 *
4 * SPDX-License-Identifier: EPL-2.0 4 * SPDX-License-Identifier: EPL-2.0
5 */ 5 */
6package tools.refinery.store.map; 6package tools.refinery.store.map.internal.state;
7 7
8import tools.refinery.store.map.internal.*; 8import tools.refinery.store.map.*;
9 9
10import java.util.*; 10import java.util.*;
11 11
12public class VersionedMapStoreImpl<K, V> implements VersionedMapStore<K, V> { 12public class VersionedMapStoreStateImpl<K, V> implements VersionedMapStore<K, V> {
13 // Configuration 13 // Configuration
14 private final boolean immutableWhenCommitting; 14 private final boolean immutableWhenCommitting;
15 15
16 // Static data 16 // Static data
17 protected final ContinousHashProvider<K> hashProvider; 17 protected final ContinuousHashProvider<K> hashProvider;
18 protected final V defaultValue; 18 protected final V defaultValue;
19 19
20 // Dynamic data 20 // Dynamic data
@@ -22,8 +22,8 @@ public class VersionedMapStoreImpl<K, V> implements VersionedMapStore<K, V> {
22 protected final Map<Node<K, V>, ImmutableNode<K, V>> nodeCache; 22 protected final Map<Node<K, V>, ImmutableNode<K, V>> nodeCache;
23 protected long nextID = 0; 23 protected long nextID = 0;
24 24
25 public VersionedMapStoreImpl(ContinousHashProvider<K> hashProvider, V defaultValue, 25 public VersionedMapStoreStateImpl(ContinuousHashProvider<K> hashProvider, V defaultValue,
26 VersionedMapStoreConfiguration config) { 26 VersionedMapStoreStateConfiguration config) {
27 this.immutableWhenCommitting = config.isImmutableWhenCommitting(); 27 this.immutableWhenCommitting = config.isImmutableWhenCommitting();
28 this.hashProvider = hashProvider; 28 this.hashProvider = hashProvider;
29 this.defaultValue = defaultValue; 29 this.defaultValue = defaultValue;
@@ -34,21 +34,21 @@ public class VersionedMapStoreImpl<K, V> implements VersionedMapStore<K, V> {
34 } 34 }
35 } 35 }
36 36
37 private VersionedMapStoreImpl(ContinousHashProvider<K> hashProvider, V defaultValue, 37 private VersionedMapStoreStateImpl(ContinuousHashProvider<K> hashProvider, V defaultValue,
38 Map<Node<K, V>, ImmutableNode<K, V>> nodeCache, VersionedMapStoreConfiguration config) { 38 Map<Node<K, V>, ImmutableNode<K, V>> nodeCache, VersionedMapStoreStateConfiguration config) {
39 this.immutableWhenCommitting = config.isImmutableWhenCommitting(); 39 this.immutableWhenCommitting = config.isImmutableWhenCommitting();
40 this.hashProvider = hashProvider; 40 this.hashProvider = hashProvider;
41 this.defaultValue = defaultValue; 41 this.defaultValue = defaultValue;
42 this.nodeCache = nodeCache; 42 this.nodeCache = nodeCache;
43 } 43 }
44 44
45 public VersionedMapStoreImpl(ContinousHashProvider<K> hashProvider, V defaultValue) { 45 public VersionedMapStoreStateImpl(ContinuousHashProvider<K> hashProvider, V defaultValue) {
46 this(hashProvider, defaultValue, new VersionedMapStoreConfiguration()); 46 this(hashProvider, defaultValue, new VersionedMapStoreStateConfiguration());
47 } 47 }
48 48
49 public static <K, V> List<VersionedMapStore<K, V>> createSharedVersionedMapStores(int amount, 49 public static <K, V> List<VersionedMapStore<K, V>> createSharedVersionedMapStores(int amount,
50 ContinousHashProvider<K> hashProvider, V defaultValue, 50 ContinuousHashProvider<K> hashProvider, V defaultValue,
51 VersionedMapStoreConfiguration config) { 51 VersionedMapStoreStateConfiguration config) {
52 List<VersionedMapStore<K, V>> result = new ArrayList<>(amount); 52 List<VersionedMapStore<K, V>> result = new ArrayList<>(amount);
53 if (config.isSharedNodeCacheInStoreGroups()) { 53 if (config.isSharedNodeCacheInStoreGroups()) {
54 Map<Node<K, V>, ImmutableNode<K, V>> nodeCache; 54 Map<Node<K, V>, ImmutableNode<K, V>> nodeCache;
@@ -58,19 +58,19 @@ public class VersionedMapStoreImpl<K, V> implements VersionedMapStore<K, V> {
58 nodeCache = null; 58 nodeCache = null;
59 } 59 }
60 for (int i = 0; i < amount; i++) { 60 for (int i = 0; i < amount; i++) {
61 result.add(new VersionedMapStoreImpl<>(hashProvider, defaultValue, nodeCache, config)); 61 result.add(new VersionedMapStoreStateImpl<>(hashProvider, defaultValue, nodeCache, config));
62 } 62 }
63 } else { 63 } else {
64 for (int i = 0; i < amount; i++) { 64 for (int i = 0; i < amount; i++) {
65 result.add(new VersionedMapStoreImpl<>(hashProvider, defaultValue, config)); 65 result.add(new VersionedMapStoreStateImpl<>(hashProvider, defaultValue, config));
66 } 66 }
67 } 67 }
68 return result; 68 return result;
69 } 69 }
70 70
71 public static <K, V> List<VersionedMapStore<K, V>> createSharedVersionedMapStores(int amount, 71 public static <K, V> List<VersionedMapStore<K, V>> createSharedVersionedMapStores(int amount,
72 ContinousHashProvider<K> hashProvider, V defaultValue) { 72 ContinuousHashProvider<K> hashProvider, V defaultValue) {
73 return createSharedVersionedMapStores(amount, hashProvider, defaultValue, new VersionedMapStoreConfiguration()); 73 return createSharedVersionedMapStores(amount, hashProvider, defaultValue, new VersionedMapStoreStateConfiguration());
74 } 74 }
75 75
76 @Override 76 @Override
@@ -80,13 +80,13 @@ public class VersionedMapStoreImpl<K, V> implements VersionedMapStore<K, V> {
80 80
81 @Override 81 @Override
82 public VersionedMap<K, V> createMap() { 82 public VersionedMap<K, V> createMap() {
83 return new VersionedMapImpl<>(this, hashProvider, defaultValue); 83 return new VersionedMapStateImpl<>(this, hashProvider, defaultValue);
84 } 84 }
85 85
86 @Override 86 @Override
87 public VersionedMap<K, V> createMap(long state) { 87 public VersionedMap<K, V> createMap(long state) {
88 ImmutableNode<K, V> data = revert(state); 88 ImmutableNode<K, V> data = revert(state);
89 return new VersionedMapImpl<>(this, hashProvider, defaultValue, data); 89 return new VersionedMapStateImpl<>(this, hashProvider, defaultValue, data);
90 } 90 }
91 91
92 public synchronized ImmutableNode<K, V> revert(long state) { 92 public synchronized ImmutableNode<K, V> revert(long state) {
@@ -100,7 +100,7 @@ public class VersionedMapStoreImpl<K, V> implements VersionedMapStore<K, V> {
100 } 100 }
101 } 101 }
102 102
103 public synchronized long commit(Node<K, V> data, VersionedMapImpl<K, V> mapToUpdateRoot) { 103 public synchronized long commit(Node<K, V> data, VersionedMapStateImpl<K, V> mapToUpdateRoot) {
104 ImmutableNode<K, V> immutable; 104 ImmutableNode<K, V> immutable;
105 if (data != null) { 105 if (data != null) {
106 immutable = data.toImmutable(this.nodeCache); 106 immutable = data.toImmutable(this.nodeCache);
@@ -120,8 +120,8 @@ public class VersionedMapStoreImpl<K, V> implements VersionedMapStore<K, V> {
120 120
121 @Override 121 @Override
122 public DiffCursor<K, V> getDiffCursor(long fromState, long toState) { 122 public DiffCursor<K, V> getDiffCursor(long fromState, long toState) {
123 VersionedMapImpl<K, V> map1 = (VersionedMapImpl<K, V>) createMap(fromState); 123 VersionedMapStateImpl<K, V> map1 = (VersionedMapStateImpl<K, V>) createMap(fromState);
124 VersionedMapImpl<K, V> map2 = (VersionedMapImpl<K, V>) createMap(toState); 124 VersionedMapStateImpl<K, V> map2 = (VersionedMapStateImpl<K, V>) createMap(toState);
125 InOrderMapCursor<K, V> cursor1 = new InOrderMapCursor<>(map1); 125 InOrderMapCursor<K, V> cursor1 = new InOrderMapCursor<>(map1);
126 InOrderMapCursor<K, V> cursor2 = new InOrderMapCursor<>(map2); 126 InOrderMapCursor<K, V> cursor2 = new InOrderMapCursor<>(map2);
127 return new MapDiffCursor<>(this.defaultValue, cursor1, cursor2); 127 return new MapDiffCursor<>(this.defaultValue, cursor1, cursor2);
diff --git a/subprojects/store/src/main/java/tools/refinery/store/model/TupleHashProvider.java b/subprojects/store/src/main/java/tools/refinery/store/model/TupleHashProvider.java
index fdd4425e..3c94541f 100644
--- a/subprojects/store/src/main/java/tools/refinery/store/model/TupleHashProvider.java
+++ b/subprojects/store/src/main/java/tools/refinery/store/model/TupleHashProvider.java
@@ -5,12 +5,12 @@
5 */ 5 */
6package tools.refinery.store.model; 6package tools.refinery.store.model;
7 7
8import tools.refinery.store.map.ContinousHashProvider; 8import tools.refinery.store.map.ContinuousHashProvider;
9import tools.refinery.store.tuple.Tuple; 9import tools.refinery.store.tuple.Tuple;
10import tools.refinery.store.tuple.Tuple1; 10import tools.refinery.store.tuple.Tuple1;
11import tools.refinery.store.tuple.Tuple2; 11import tools.refinery.store.tuple.Tuple2;
12 12
13public class TupleHashProvider implements ContinousHashProvider<Tuple> { 13public class TupleHashProvider implements ContinuousHashProvider<Tuple> {
14 protected static final int[] primes = new int[] { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 14 protected static final int[] primes = new int[] { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59,
15 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 15 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173,
16 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 16 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283,
diff --git a/subprojects/store/src/main/java/tools/refinery/store/model/TupleHashProviderBitMagic.java b/subprojects/store/src/main/java/tools/refinery/store/model/TupleHashProviderBitMagic.java
deleted file mode 100644
index 14116a90..00000000
--- a/subprojects/store/src/main/java/tools/refinery/store/model/TupleHashProviderBitMagic.java
+++ /dev/null
@@ -1,34 +0,0 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
6package tools.refinery.store.model;
7
8import tools.refinery.store.map.ContinousHashProvider;
9import tools.refinery.store.tuple.Tuple;
10
11public class TupleHashProviderBitMagic implements ContinousHashProvider<Tuple> {
12
13 @Override
14 public int getHash(Tuple key, int index) {
15 if(key.getSize() == 1) {
16 return key.get(0);
17 }
18
19 int result = 0;
20 final int startBitIndex = index*30;
21 final int finalBitIndex = startBitIndex+30;
22 final int arity = key.getSize();
23
24 for(int i = startBitIndex; i<=finalBitIndex; i++) {
25 final int selectedKey = key.get(i%arity);
26 final int selectedPosition = 1<<(i/arity);
27 if((selectedKey&selectedPosition) != 0) {
28 result |= 1<<(i%30);
29 }
30 }
31
32 return result;
33 }
34}
diff --git a/subprojects/store/src/main/java/tools/refinery/store/model/internal/ModelStoreBuilderImpl.java b/subprojects/store/src/main/java/tools/refinery/store/model/internal/ModelStoreBuilderImpl.java
index aafbe130..2cc7b19c 100644
--- a/subprojects/store/src/main/java/tools/refinery/store/model/internal/ModelStoreBuilderImpl.java
+++ b/subprojects/store/src/main/java/tools/refinery/store/model/internal/ModelStoreBuilderImpl.java
@@ -8,10 +8,10 @@ package tools.refinery.store.model.internal;
8import tools.refinery.store.adapter.AdapterUtils; 8import tools.refinery.store.adapter.AdapterUtils;
9import tools.refinery.store.adapter.ModelAdapterBuilder; 9import tools.refinery.store.adapter.ModelAdapterBuilder;
10import tools.refinery.store.map.VersionedMapStore; 10import tools.refinery.store.map.VersionedMapStore;
11import tools.refinery.store.map.VersionedMapStoreImpl; 11import tools.refinery.store.map.VersionedMapStoreFactory;
12import tools.refinery.store.map.VersionedMapStoreFactoryBuilder;
12import tools.refinery.store.model.ModelStore; 13import tools.refinery.store.model.ModelStore;
13import tools.refinery.store.model.ModelStoreBuilder; 14import tools.refinery.store.model.ModelStoreBuilder;
14import tools.refinery.store.model.TupleHashProvider;
15import tools.refinery.store.representation.AnySymbol; 15import tools.refinery.store.representation.AnySymbol;
16import tools.refinery.store.representation.Symbol; 16import tools.refinery.store.representation.Symbol;
17import tools.refinery.store.tuple.Tuple; 17import tools.refinery.store.tuple.Tuple;
@@ -77,8 +77,12 @@ public class ModelStoreBuilderImpl implements ModelStoreBuilder {
77 private <T> void createStores(Map<AnySymbol, VersionedMapStore<Tuple, ?>> stores, 77 private <T> void createStores(Map<AnySymbol, VersionedMapStore<Tuple, ?>> stores,
78 SymbolEquivalenceClass<T> equivalenceClass, List<AnySymbol> symbols) { 78 SymbolEquivalenceClass<T> equivalenceClass, List<AnySymbol> symbols) {
79 int size = symbols.size(); 79 int size = symbols.size();
80 var storeGroup = VersionedMapStoreImpl.createSharedVersionedMapStores(size, TupleHashProvider.INSTANCE, 80 VersionedMapStoreFactory<Tuple,T> mapFactory = VersionedMapStore
81 equivalenceClass.defaultValue()); 81 .<Tuple,T>builder()
82 .strategy(VersionedMapStoreFactoryBuilder.StoreStrategy.DELTA)
83 .defaultValue(equivalenceClass.defaultValue())
84 .build();
85 var storeGroup = mapFactory.createGroup(size);
82 for (int i = 0; i < size; i++) { 86 for (int i = 0; i < size; i++) {
83 stores.put(symbols.get(i), storeGroup.get(i)); 87 stores.put(symbols.get(i), storeGroup.get(i));
84 } 88 }
diff --git a/subprojects/store/src/test/java/tools/refinery/store/map/tests/InOrderCursorTest.java b/subprojects/store/src/test/java/tools/refinery/store/map/tests/InOrderCursorTest.java
index 4ada4ea4..98756460 100644
--- a/subprojects/store/src/test/java/tools/refinery/store/map/tests/InOrderCursorTest.java
+++ b/subprojects/store/src/test/java/tools/refinery/store/map/tests/InOrderCursorTest.java
@@ -8,8 +8,8 @@ package tools.refinery.store.map.tests;
8import org.junit.jupiter.api.Test; 8import org.junit.jupiter.api.Test;
9import tools.refinery.store.map.VersionedMapStore; 9import tools.refinery.store.map.VersionedMapStore;
10import tools.refinery.store.map.VersionedMapStoreFactoryBuilder; 10import tools.refinery.store.map.VersionedMapStoreFactoryBuilder;
11import tools.refinery.store.map.internal.InOrderMapCursor; 11import tools.refinery.store.map.internal.state.InOrderMapCursor;
12import tools.refinery.store.map.internal.VersionedMapImpl; 12import tools.refinery.store.map.internal.state.VersionedMapStateImpl;
13import tools.refinery.store.map.tests.utils.MapTestEnvironment; 13import tools.refinery.store.map.tests.utils.MapTestEnvironment;
14 14
15import static org.junit.jupiter.api.Assertions.*; 15import static org.junit.jupiter.api.Assertions.*;
@@ -26,7 +26,7 @@ class InOrderCursorTest {
26 .build() 26 .build()
27 .createOne(); 27 .createOne();
28 28
29 VersionedMapImpl<Integer,String> map = (VersionedMapImpl<Integer,String>) store.createMap(); 29 VersionedMapStateImpl<Integer,String> map = (VersionedMapStateImpl<Integer,String>) store.createMap();
30 checkMove(map,0); 30 checkMove(map,0);
31 31
32 map.put(1,"A"); 32 map.put(1,"A");
@@ -44,7 +44,7 @@ class InOrderCursorTest {
44 44
45 } 45 }
46 46
47 private void checkMove(VersionedMapImpl<Integer,String> map, int num) { 47 private void checkMove(VersionedMapStateImpl<Integer,String> map, int num) {
48 InOrderMapCursor<Integer,String> cursor = new InOrderMapCursor<>(map); 48 InOrderMapCursor<Integer,String> cursor = new InOrderMapCursor<>(map);
49 for(int i=0; i<num; i++) { 49 for(int i=0; i<num; i++) {
50 assertTrue(cursor.move()); 50 assertTrue(cursor.move());
diff --git a/subprojects/store/src/test/java/tools/refinery/store/map/tests/MapUnitTests.java b/subprojects/store/src/test/java/tools/refinery/store/map/tests/MapUnitTests.java
index 2be49bd9..cc2e425c 100644
--- a/subprojects/store/src/test/java/tools/refinery/store/map/tests/MapUnitTests.java
+++ b/subprojects/store/src/test/java/tools/refinery/store/map/tests/MapUnitTests.java
@@ -7,7 +7,7 @@ package tools.refinery.store.map.tests;
7 7
8import org.junit.jupiter.api.Test; 8import org.junit.jupiter.api.Test;
9import tools.refinery.store.map.VersionedMapStore; 9import tools.refinery.store.map.VersionedMapStore;
10import tools.refinery.store.map.VersionedMapStoreImpl; 10import tools.refinery.store.map.internal.state.VersionedMapStoreStateImpl;
11import tools.refinery.store.model.TupleHashProvider; 11import tools.refinery.store.model.TupleHashProvider;
12import tools.refinery.store.tuple.Tuple; 12import tools.refinery.store.tuple.Tuple;
13 13
@@ -16,7 +16,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
16class MapUnitTests { 16class MapUnitTests {
17 @Test 17 @Test
18 void defaultTest() { 18 void defaultTest() {
19 VersionedMapStore<Tuple, Boolean> store = new VersionedMapStoreImpl<>(TupleHashProvider.INSTANCE, false); 19 VersionedMapStore<Tuple, Boolean> store = new VersionedMapStoreStateImpl<>(TupleHashProvider.INSTANCE, false);
20 var map = store.createMap(); 20 var map = store.createMap();
21 var out1 = map.put(Tuple.of(0), true); 21 var out1 = map.put(Tuple.of(0), true);
22 assertEquals(false, out1); 22 assertEquals(false, out1);
diff --git a/subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/MutableImmutableCompareFuzzTest.java b/subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/MutableImmutableCompareFuzzTest.java
index 420dade6..abfb4791 100644
--- a/subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/MutableImmutableCompareFuzzTest.java
+++ b/subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/MutableImmutableCompareFuzzTest.java
@@ -17,10 +17,10 @@ import org.junit.jupiter.params.ParameterizedTest;
17import org.junit.jupiter.params.provider.Arguments; 17import org.junit.jupiter.params.provider.Arguments;
18import org.junit.jupiter.params.provider.MethodSource; 18import org.junit.jupiter.params.provider.MethodSource;
19 19
20import tools.refinery.store.map.ContinousHashProvider; 20import tools.refinery.store.map.ContinuousHashProvider;
21import tools.refinery.store.map.VersionedMapStore; 21import tools.refinery.store.map.VersionedMapStore;
22import tools.refinery.store.map.VersionedMapStoreImpl; 22import tools.refinery.store.map.internal.state.VersionedMapStoreStateImpl;
23import tools.refinery.store.map.internal.VersionedMapImpl; 23import tools.refinery.store.map.internal.state.VersionedMapStateImpl;
24import tools.refinery.store.map.tests.fuzz.utils.FuzzTestUtils; 24import tools.refinery.store.map.tests.fuzz.utils.FuzzTestUtils;
25import tools.refinery.store.map.tests.utils.MapTestEnvironment; 25import tools.refinery.store.map.tests.utils.MapTestEnvironment;
26 26
@@ -28,11 +28,11 @@ class MutableImmutableCompareFuzzTest {
28 private void runFuzzTest(String scenario, int seed, int steps, int maxKey, int maxValue, 28 private void runFuzzTest(String scenario, int seed, int steps, int maxKey, int maxValue,
29 boolean nullDefault, int commitFrequency, boolean evilHash) { 29 boolean nullDefault, int commitFrequency, boolean evilHash) {
30 String[] values = MapTestEnvironment.prepareValues(maxValue, nullDefault); 30 String[] values = MapTestEnvironment.prepareValues(maxValue, nullDefault);
31 ContinousHashProvider<Integer> chp = MapTestEnvironment.prepareHashProvider(evilHash); 31 ContinuousHashProvider<Integer> chp = MapTestEnvironment.prepareHashProvider(evilHash);
32 32
33 VersionedMapStore<Integer, String> store = new VersionedMapStoreImpl<>(chp, values[0]); 33 VersionedMapStore<Integer, String> store = new VersionedMapStoreStateImpl<>(chp, values[0]);
34 VersionedMapImpl<Integer, String> immutable = (VersionedMapImpl<Integer, String>) store.createMap(); 34 VersionedMapStateImpl<Integer, String> immutable = (VersionedMapStateImpl<Integer, String>) store.createMap();
35 VersionedMapImpl<Integer, String> mutable = (VersionedMapImpl<Integer, String>) store.createMap(); 35 VersionedMapStateImpl<Integer, String> mutable = (VersionedMapStateImpl<Integer, String>) store.createMap();
36 36
37 Random r = new Random(seed); 37 Random r = new Random(seed);
38 38
@@ -40,8 +40,8 @@ class MutableImmutableCompareFuzzTest {
40 commitFrequency); 40 commitFrequency);
41 } 41 }
42 42
43 private void iterativeRandomPutsAndCommitsAndCompare(String scenario, VersionedMapImpl<Integer, String> immutable, 43 private void iterativeRandomPutsAndCommitsAndCompare(String scenario, VersionedMapStateImpl<Integer, String> immutable,
44 VersionedMapImpl<Integer, String> mutable, int steps, int maxKey, String[] values, Random r, 44 VersionedMapStateImpl<Integer, String> mutable, int steps, int maxKey, String[] values, Random r,
45 int commitFrequency) { 45 int commitFrequency) {
46 for (int i = 0; i < steps; i++) { 46 for (int i = 0; i < steps; i++) {
47 int index = i + 1; 47 int index = i + 1;
diff --git a/subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/SharedStoreFuzzTest.java b/subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/SharedStoreFuzzTest.java
index 680d962d..b17766b7 100644
--- a/subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/SharedStoreFuzzTest.java
+++ b/subprojects/store/src/test/java/tools/refinery/store/map/tests/fuzz/SharedStoreFuzzTest.java
@@ -18,10 +18,10 @@ import org.junit.jupiter.params.ParameterizedTest;
18import org.junit.jupiter.params.provider.Arguments; 18import org.junit.jupiter.params.provider.Arguments;
19import org.junit.jupiter.params.provider.MethodSource; 19import org.junit.jupiter.params.provider.MethodSource;
20 20
21import tools.refinery.store.map.ContinousHashProvider; 21import tools.refinery.store.map.ContinuousHashProvider;
22import tools.refinery.store.map.VersionedMapStore; 22import tools.refinery.store.map.VersionedMapStore;
23import tools.refinery.store.map.VersionedMapStoreImpl; 23import tools.refinery.store.map.internal.state.VersionedMapStoreStateImpl;
24import tools.refinery.store.map.internal.VersionedMapImpl; 24import tools.refinery.store.map.internal.state.VersionedMapStateImpl;
25import tools.refinery.store.map.tests.fuzz.utils.FuzzTestUtils; 25import tools.refinery.store.map.tests.fuzz.utils.FuzzTestUtils;
26import tools.refinery.store.map.tests.utils.MapTestEnvironment; 26import tools.refinery.store.map.tests.utils.MapTestEnvironment;
27 27
@@ -31,9 +31,9 @@ class SharedStoreFuzzTest {
31 private void runFuzzTest(String scenario, int seed, int steps, int maxKey, int maxValue, 31 private void runFuzzTest(String scenario, int seed, int steps, int maxKey, int maxValue,
32 boolean nullDefault, int commitFrequency, boolean evilHash) { 32 boolean nullDefault, int commitFrequency, boolean evilHash) {
33 String[] values = MapTestEnvironment.prepareValues(maxValue, nullDefault); 33 String[] values = MapTestEnvironment.prepareValues(maxValue, nullDefault);
34 ContinousHashProvider<Integer> chp = MapTestEnvironment.prepareHashProvider(evilHash); 34 ContinuousHashProvider<Integer> chp = MapTestEnvironment.prepareHashProvider(evilHash);
35 35
36 List<VersionedMapStore<Integer, String>> stores = VersionedMapStoreImpl.createSharedVersionedMapStores(5, chp, values[0]); 36 List<VersionedMapStore<Integer, String>> stores = VersionedMapStoreStateImpl.createSharedVersionedMapStores(5, chp, values[0]);
37 37
38 iterativeRandomPutsAndCommitsThenRestore(scenario, stores, steps, maxKey, values, seed, commitFrequency); 38 iterativeRandomPutsAndCommitsThenRestore(scenario, stores, steps, maxKey, values, seed, commitFrequency);
39 } 39 }
@@ -42,9 +42,9 @@ class SharedStoreFuzzTest {
42 int steps, int maxKey, String[] values, int seed, int commitFrequency) { 42 int steps, int maxKey, String[] values, int seed, int commitFrequency) {
43 // 1. maps with versions 43 // 1. maps with versions
44 Random r = new Random(seed); 44 Random r = new Random(seed);
45 List<VersionedMapImpl<Integer, String>> versioneds = new LinkedList<>(); 45 List<VersionedMapStateImpl<Integer, String>> versioneds = new LinkedList<>();
46 for (VersionedMapStore<Integer, String> store : stores) { 46 for (VersionedMapStore<Integer, String> store : stores) {
47 versioneds.add((VersionedMapImpl<Integer, String>) store.createMap()); 47 versioneds.add((VersionedMapStateImpl<Integer, String>) store.createMap());
48 } 48 }
49 49
50 List<Map<Integer, Long>> index2Version = new LinkedList<>(); 50 List<Map<Integer, Long>> index2Version = new LinkedList<>();
@@ -66,9 +66,9 @@ class SharedStoreFuzzTest {
66 } 66 }
67 } 67 }
68 // 2. create a non-versioned and 68 // 2. create a non-versioned and
69 List<VersionedMapImpl<Integer, String>> reference = new LinkedList<>(); 69 List<VersionedMapStateImpl<Integer, String>> reference = new LinkedList<>();
70 for (VersionedMapStore<Integer, String> store : stores) { 70 for (VersionedMapStore<Integer, String> store : stores) {
71 reference.add((VersionedMapImpl<Integer, String>) store.createMap()); 71 reference.add((VersionedMapStateImpl<Integer, String>) store.createMap());
72 } 72 }
73 r = new Random(seed); 73 r = new Random(seed);
74 74
diff --git a/subprojects/store/src/test/java/tools/refinery/store/map/tests/utils/MapTestEnvironment.java b/subprojects/store/src/test/java/tools/refinery/store/map/tests/utils/MapTestEnvironment.java
index e7348370..401f2866 100644
--- a/subprojects/store/src/test/java/tools/refinery/store/map/tests/utils/MapTestEnvironment.java
+++ b/subprojects/store/src/test/java/tools/refinery/store/map/tests/utils/MapTestEnvironment.java
@@ -6,7 +6,7 @@
6package tools.refinery.store.map.tests.utils; 6package tools.refinery.store.map.tests.utils;
7 7
8import tools.refinery.store.map.*; 8import tools.refinery.store.map.*;
9import tools.refinery.store.map.internal.VersionedMapImpl; 9import tools.refinery.store.map.internal.state.VersionedMapStateImpl;
10 10
11import java.util.*; 11import java.util.*;
12import java.util.Map.Entry; 12import java.util.Map.Entry;
@@ -28,7 +28,7 @@ public class MapTestEnvironment<K, V> {
28 return values; 28 return values;
29 } 29 }
30 30
31 public static ContinousHashProvider<Integer> prepareHashProvider(final boolean evil) { 31 public static ContinuousHashProvider<Integer> prepareHashProvider(final boolean evil) {
32 // Use maxPrime = 2147483629 32 // Use maxPrime = 2147483629
33 33
34 return (key, index) -> { 34 return (key, index) -> {
@@ -187,7 +187,7 @@ public class MapTestEnvironment<K, V> {
187 //System.out.println(cursor.getKey() + " " + ((VersionedMapImpl<K, V>) versionedMap).getHashProvider() 187 //System.out.println(cursor.getKey() + " " + ((VersionedMapImpl<K, V>) versionedMap).getHashProvider()
188 // .getHash(cursor.getKey(), 0)); 188 // .getHash(cursor.getKey(), 0));
189 if (previous != null) { 189 if (previous != null) {
190 int comparisonResult = ((VersionedMapImpl<K, V>) versionedMap).getHashProvider().compare(previous, 190 int comparisonResult = ((VersionedMapStateImpl<K, V>) versionedMap).getHashProvider().compare(previous,
191 cursor.getKey()); 191 cursor.getKey());
192 assertTrue(comparisonResult < 0, scenario + " Cursor order is not incremental!"); 192 assertTrue(comparisonResult < 0, scenario + " Cursor order is not incremental!");
193 } 193 }
diff --git a/subprojects/store/src/test/java/tools/refinery/store/model/hashtests/HashEfficiencyTest.java b/subprojects/store/src/test/java/tools/refinery/store/model/hashtests/HashEfficiencyTest.java
index 4d4f5e26..5b595da7 100644
--- a/subprojects/store/src/test/java/tools/refinery/store/model/hashtests/HashEfficiencyTest.java
+++ b/subprojects/store/src/test/java/tools/refinery/store/model/hashtests/HashEfficiencyTest.java
@@ -3,7 +3,7 @@
3 * 3 *
4 * SPDX-License-Identifier: EPL-2.0 4 * SPDX-License-Identifier: EPL-2.0
5 */ 5 */
6package tools.refinery.store.model.hashtests; 6package tools.refinery.store.model.hashTests;
7 7
8import static org.junit.jupiter.api.Assertions.assertEquals; 8import static org.junit.jupiter.api.Assertions.assertEquals;
9 9
@@ -14,10 +14,9 @@ import java.util.Random;
14 14
15import org.junit.jupiter.api.Test; 15import org.junit.jupiter.api.Test;
16 16
17import tools.refinery.store.map.ContinousHashProvider; 17import tools.refinery.store.map.ContinuousHashProvider;
18import tools.refinery.store.tuple.Tuple; 18import tools.refinery.store.tuple.Tuple;
19import tools.refinery.store.model.TupleHashProvider; 19import tools.refinery.store.model.TupleHashProvider;
20import tools.refinery.store.model.TupleHashProviderBitMagic;
21 20
22class HashEfficiencyTest { 21class HashEfficiencyTest {
23 22
@@ -95,7 +94,7 @@ class HashEfficiencyTest {
95 List<Tuple> p = nRandoms(2, amount, 1);; 94 List<Tuple> p = nRandoms(2, amount, 1);;
96 assertEquals(amount,p.size()); 95 assertEquals(amount,p.size());
97 } 96 }
98 private static double calculateHashClashes(List<Tuple> tuples, ContinousHashProvider<Tuple> chp) { 97 private static double calculateHashClashes(List<Tuple> tuples, ContinuousHashProvider<Tuple> chp) {
99 int sumClashes = 0; 98 int sumClashes = 0;
100 99
101 for(int i = 0; i<tuples.size(); i++) { 100 for(int i = 0; i<tuples.size(); i++) {
@@ -108,7 +107,7 @@ class HashEfficiencyTest {
108 } 107 }
109 return (sumClashes+0.0) / tuples.size(); 108 return (sumClashes+0.0) / tuples.size();
110 } 109 }
111 private static int calculateHashClash(ContinousHashProvider<Tuple> chp, Tuple a, Tuple b) { 110 private static int calculateHashClash(ContinuousHashProvider<Tuple> chp, Tuple a, Tuple b) {
112 if(a.equals(b)) return 0; 111 if(a.equals(b)) return 0;
113 final int bits = 5; 112 final int bits = 5;
114 final int segments = Integer.SIZE/bits; 113 final int segments = Integer.SIZE/bits;
@@ -131,11 +130,9 @@ class HashEfficiencyTest {
131 } 130 }
132 public static void main(String[] args) { 131 public static void main(String[] args) {
133 List<String> hashNames = new LinkedList<>(); 132 List<String> hashNames = new LinkedList<>();
134 List<ContinousHashProvider<Tuple>> hashes = new LinkedList<>(); 133 List<ContinuousHashProvider<Tuple>> hashes = new LinkedList<>();
135 hashNames.add("PrimeGroup"); 134 hashNames.add("PrimeGroup");
136 hashes.add(new TupleHashProvider()); 135 hashes.add(new TupleHashProvider());
137 hashNames.add("BitMagic");
138 hashes.add(new TupleHashProviderBitMagic());
139 136
140 int[] arities = new int[] {2,3,4,5}; 137 int[] arities = new int[] {2,3,4,5};
141 int[] sizes = new int[] {32*32,32*32*8}; 138 int[] sizes = new int[] {32*32,32*32*8};