aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/store/src/main/java/tools
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/store/src/main/java/tools
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/store/src/main/java/tools')
-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
28 files changed, 148 insertions, 196 deletions
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 }