diff options
Diffstat (limited to 'subprojects/store')
3 files changed, 17 insertions, 6 deletions
diff --git a/subprojects/store/src/main/java/tools/refinery/store/map/internal/delta/VersionedMapDeltaImpl.java b/subprojects/store/src/main/java/tools/refinery/store/map/internal/delta/VersionedMapDeltaImpl.java index d530ae87..8be42712 100644 --- a/subprojects/store/src/main/java/tools/refinery/store/map/internal/delta/VersionedMapDeltaImpl.java +++ b/subprojects/store/src/main/java/tools/refinery/store/map/internal/delta/VersionedMapDeltaImpl.java | |||
@@ -23,7 +23,7 @@ public class VersionedMapDeltaImpl<K, V> implements VersionedMap<K, V> { | |||
23 | this.store = store; | 23 | this.store = store; |
24 | this.defaultValue = defaultValue; | 24 | this.defaultValue = defaultValue; |
25 | 25 | ||
26 | current = new HashMap<>(); | 26 | current = new LinkedHashMap<>(); |
27 | if (summarizeChanges) { | 27 | if (summarizeChanges) { |
28 | this.uncommittedStore = new UncommittedDeltaMapStore<>(this); | 28 | this.uncommittedStore = new UncommittedDeltaMapStore<>(this); |
29 | } else { | 29 | } else { |
diff --git a/subprojects/store/src/main/java/tools/refinery/store/statecoding/neighbourhood/NeighbourhoodCalculator.java b/subprojects/store/src/main/java/tools/refinery/store/statecoding/neighbourhood/NeighbourhoodCalculator.java index 785fda7a..1442c915 100644 --- a/subprojects/store/src/main/java/tools/refinery/store/statecoding/neighbourhood/NeighbourhoodCalculator.java +++ b/subprojects/store/src/main/java/tools/refinery/store/statecoding/neighbourhood/NeighbourhoodCalculator.java | |||
@@ -18,21 +18,25 @@ import java.util.List; | |||
18 | import java.util.Objects; | 18 | import java.util.Objects; |
19 | 19 | ||
20 | public class NeighbourhoodCalculator extends AbstractNeighbourhoodCalculator implements StateCodeCalculator { | 20 | public class NeighbourhoodCalculator extends AbstractNeighbourhoodCalculator implements StateCodeCalculator { |
21 | private ObjectCodeImpl previousObjectCode = new ObjectCodeImpl(); | ||
22 | private ObjectCodeImpl nextObjectCode = new ObjectCodeImpl(); | ||
23 | |||
21 | public NeighbourhoodCalculator(List<? extends Interpretation<?>> interpretations, IntSet individuals) { | 24 | public NeighbourhoodCalculator(List<? extends Interpretation<?>> interpretations, IntSet individuals) { |
22 | super(interpretations, individuals); | 25 | super(interpretations, individuals); |
23 | } | 26 | } |
24 | 27 | ||
25 | public StateCoderResult calculateCodes() { | 28 | public StateCoderResult calculateCodes() { |
26 | ObjectCodeImpl previousObjectCode = new ObjectCodeImpl(); | 29 | previousObjectCode.clear(); |
30 | nextObjectCode.clear(); | ||
27 | initializeWithIndividuals(previousObjectCode); | 31 | initializeWithIndividuals(previousObjectCode); |
28 | 32 | ||
29 | int rounds = 0; | 33 | int rounds = 0; |
30 | do { | 34 | do { |
31 | final ObjectCodeImpl nextObjectCode = rounds == 0 ? new ObjectCodeImpl() : | ||
32 | new ObjectCodeImpl(previousObjectCode.getSize()); | ||
33 | |||
34 | constructNextObjectCodes(previousObjectCode, nextObjectCode); | 35 | constructNextObjectCodes(previousObjectCode, nextObjectCode); |
36 | var tempObjectCode = previousObjectCode; | ||
35 | previousObjectCode = nextObjectCode; | 37 | previousObjectCode = nextObjectCode; |
38 | nextObjectCode = tempObjectCode; | ||
39 | nextObjectCode.clear(); | ||
36 | rounds++; | 40 | rounds++; |
37 | } while (rounds <= 7 && rounds <= previousObjectCode.getEffectiveSize()); | 41 | } while (rounds <= 7 && rounds <= previousObjectCode.getEffectiveSize()); |
38 | 42 | ||
@@ -43,7 +47,7 @@ public class NeighbourhoodCalculator extends AbstractNeighbourhoodCalculator imp | |||
43 | private long calculateLastSum(ObjectCode codes) { | 47 | private long calculateLastSum(ObjectCode codes) { |
44 | long result = 0; | 48 | long result = 0; |
45 | for (var nullImpactValue : nullImpactValues) { | 49 | for (var nullImpactValue : nullImpactValues) { |
46 | result = result * 31 + Objects.hashCode(((Interpretation<?>) nullImpactValue).get(Tuple0.INSTANCE)); | 50 | result = result * PRIME + Objects.hashCode(((Interpretation<?>) nullImpactValue).get(Tuple0.INSTANCE)); |
47 | } | 51 | } |
48 | 52 | ||
49 | for (int i = 0; i < codes.getSize(); i++) { | 53 | for (int i = 0; i < codes.getSize(); i++) { |
diff --git a/subprojects/store/src/main/java/tools/refinery/store/statecoding/neighbourhood/ObjectCodeImpl.java b/subprojects/store/src/main/java/tools/refinery/store/statecoding/neighbourhood/ObjectCodeImpl.java index 0cd7ff58..422e1d73 100644 --- a/subprojects/store/src/main/java/tools/refinery/store/statecoding/neighbourhood/ObjectCodeImpl.java +++ b/subprojects/store/src/main/java/tools/refinery/store/statecoding/neighbourhood/ObjectCodeImpl.java | |||
@@ -32,6 +32,13 @@ public class ObjectCodeImpl implements ObjectCode { | |||
32 | effectiveSize = copy.effectiveSize; | 32 | effectiveSize = copy.effectiveSize; |
33 | } | 33 | } |
34 | 34 | ||
35 | public void clear() { | ||
36 | effectiveSize = 0; | ||
37 | for (int i = 0; i < size; i++) { | ||
38 | vector[i] = 0; | ||
39 | } | ||
40 | } | ||
41 | |||
35 | public void ensureSize(int object) { | 42 | public void ensureSize(int object) { |
36 | if (object >= size) { | 43 | if (object >= size) { |
37 | size = object + 1; | 44 | size = object + 1; |