aboutsummaryrefslogtreecommitdiffstats
path: root/Solvers
diff options
context:
space:
mode:
authorLibravatar OszkarSemerath <Oszkar Semerath@DESKTOP-DNR7JQ7>2021-07-29 17:05:30 +0200
committerLibravatar OszkarSemerath <Oszkar Semerath@DESKTOP-DNR7JQ7>2021-07-29 17:05:30 +0200
commitb414e8b64871a13782a0e5a73fcc29229159cf08 (patch)
treeca5323d2d2f0f262cc5285f9f617672b1ca628e7 /Solvers
parentDiffcursor fixes & continuous hash provider compare service. (diff)
downloadVIATRA-Generator-b414e8b64871a13782a0e5a73fcc29229159cf08.tar.gz
VIATRA-Generator-b414e8b64871a13782a0e5a73fcc29229159cf08.tar.zst
VIATRA-Generator-b414e8b64871a13782a0e5a73fcc29229159cf08.zip
Config updated and createSharedVersionedMapStores service
Diffstat (limited to 'Solvers')
-rw-r--r--Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/VersionedMapStoreConfiguration.java28
-rw-r--r--Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/VersionedMapStoreImpl.java56
2 files changed, 72 insertions, 12 deletions
diff --git a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/VersionedMapStoreConfiguration.java b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/VersionedMapStoreConfiguration.java
index 3dda98df..196adf2c 100644
--- a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/VersionedMapStoreConfiguration.java
+++ b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/VersionedMapStoreConfiguration.java
@@ -2,18 +2,26 @@ package org.eclipse.viatra.solver.data.map;
2 2
3public class VersionedMapStoreConfiguration { 3public class VersionedMapStoreConfiguration {
4 /** 4 /**
5 * If true root is replaced with immutable node when committed. 5 * If true root is replaced with immutable node when committed. Frees up memory
6 * Frees up memory by releasing immutable nodes, 6 * by releasing immutable nodes, but it may decrease performance by recreating
7 * but it may decrease performance by recreating immutable nodes upon changes (some evidence). 7 * immutable nodes upon changes (some evidence).
8 */ 8 */
9 public boolean immutableWhenCommiting = true; 9 public boolean immutableWhenCommiting = true;
10 10
11 /**
12 * If true, all subnodes are cached within a {@link VersionedMapStore}. It
13 * decreases the memory requirements. It may increase performance by discovering
14 * existing immutable copy of a node (some evidence). Additional overhead may
15 * decrease performance (no example found). The option permits the efficient
16 * implementation of version deletion.
17 */
18 public boolean sharedNodeCacheInStore = true;
19
11 /** 20 /**
12 * If true, all subnodes are cached. 21 * If true, all subnodes are cached within a group of
13 * It decreases the memory requirements. 22 * {@link VersionedMapStoreImpl#createSharedVersionedMapStores(int, ContinousHashProvider, Object, VersionedMapStoreConfiguration)}.
14 * It may increase performance by discovering existing immutable copy of a node (some evidence). 23 * If {@link VersionedMapStoreConfiguration#sharedNodeCacheInStore} is
15 * Additional overhead may decrease performance (no example found). 24 * <code>false</code>, then it has currently no impact.
16 * The option permits the efficient implementation of version deletion.
17 */ 25 */
18 public boolean sharedNodeCache = true; 26 public boolean sharedNodeCacheInStoreGroups = true;
19} 27}
diff --git a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/VersionedMapStoreImpl.java b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/VersionedMapStoreImpl.java
index 09607d4a..c551ffe7 100644
--- a/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/VersionedMapStoreImpl.java
+++ b/Solvers/VIATRA-Solver/org.eclipse.viatra.solver.data/src/org/eclipse/viatra/solver/data/map/VersionedMapStoreImpl.java
@@ -3,6 +3,7 @@ package org.eclipse.viatra.solver.data.map;
3import java.util.ArrayList; 3import java.util.ArrayList;
4import java.util.Collections; 4import java.util.Collections;
5import java.util.HashMap; 5import java.util.HashMap;
6import java.util.List;
6import java.util.Map; 7import java.util.Map;
7import java.util.Set; 8import java.util.Set;
8 9
@@ -24,7 +25,11 @@ public class VersionedMapStoreImpl<KEY,VALUE> implements VersionedMapStore<KEY,
24 final protected Map<Node<KEY,VALUE>, ImmutableNode<KEY,VALUE>> nodeCache; 25 final protected Map<Node<KEY,VALUE>, ImmutableNode<KEY,VALUE>> nodeCache;
25 protected long nextID; 26 protected long nextID;
26 27
27 public VersionedMapStoreImpl(ContinousHashProvider<? super KEY> hashProvider, VALUE defaultValue, VersionedMapStoreConfiguration config) { 28 public VersionedMapStoreImpl(
29 ContinousHashProvider<? super KEY> hashProvider,
30 VALUE defaultValue,
31 VersionedMapStoreConfiguration config)
32 {
28 this.immutableWhenCommiting = config.immutableWhenCommiting; 33 this.immutableWhenCommiting = config.immutableWhenCommiting;
29 34
30 this.hashProvider = hashProvider; 35 this.hashProvider = hashProvider;
@@ -32,17 +37,64 @@ public class VersionedMapStoreImpl<KEY,VALUE> implements VersionedMapStore<KEY,
32 37
33 states = new HashMap<>(); 38 states = new HashMap<>();
34 nextID = 0; 39 nextID = 0;
35 if(config.sharedNodeCache) { 40 if(config.sharedNodeCacheInStore) {
36 nodeCache = new HashMap<>(); 41 nodeCache = new HashMap<>();
37 } else { 42 } else {
38 nodeCache = null; 43 nodeCache = null;
39 } 44 }
40 } 45 }
46 private VersionedMapStoreImpl(
47 ContinousHashProvider<? super KEY> hashProvider,
48 VALUE defaultValue,
49 Map<Node<KEY,VALUE>, ImmutableNode<KEY,VALUE>> nodeCache,
50 VersionedMapStoreConfiguration config)
51 {
52 this.immutableWhenCommiting = config.immutableWhenCommiting;
53
54 this.hashProvider = hashProvider;
55 this.defaultValue = defaultValue;
56
57 states = new HashMap<>();
58 nextID = 0;
59 this.nodeCache = nodeCache;
60 }
41 61
42 public VersionedMapStoreImpl(ContinousHashProvider<KEY> hashProvider, VALUE defaultValue) { 62 public VersionedMapStoreImpl(ContinousHashProvider<KEY> hashProvider, VALUE defaultValue) {
43 this(hashProvider,defaultValue,new VersionedMapStoreConfiguration()); 63 this(hashProvider,defaultValue,new VersionedMapStoreConfiguration());
44 } 64 }
45 65
66 public static <MAP,KEY,VALUE> List<VersionedMapStore<KEY,VALUE>> createSharedVersionedMapStores(
67 int amount,
68 ContinousHashProvider<? super KEY> hashProvider,
69 VALUE defaultValue,
70 VersionedMapStoreConfiguration config)
71 {
72 List<VersionedMapStore<KEY,VALUE>> result = new ArrayList<>(amount);
73 if(config.sharedNodeCacheInStoreGroups) {
74 Map<Node<KEY,VALUE>, ImmutableNode<KEY,VALUE>> nodeCache;
75 if(config.sharedNodeCacheInStore) {
76 nodeCache = new HashMap<>();
77 } else {
78 nodeCache = null;
79 }
80 for (int i = 0; i < amount; i++) {
81 result.add(new VersionedMapStoreImpl<KEY, VALUE>(hashProvider, defaultValue, nodeCache, config));
82 }
83 } else {
84 for (int i = 0; i < amount; i++) {
85 result.add(new VersionedMapStoreImpl<KEY, VALUE>(hashProvider, defaultValue, config));
86 }
87 }
88 return result;
89 }
90 public static <MAP,KEY,VALUE> List<VersionedMapStore<KEY,VALUE>> createSharedVersionedMapStores(
91 int amount,
92 ContinousHashProvider<? super KEY> hashProvider,
93 VALUE defaultValue)
94 {
95 return createSharedVersionedMapStores(amount,hashProvider,defaultValue,new VersionedMapStoreConfiguration());
96 }
97
46 synchronized Set<Long> getStates() { 98 synchronized Set<Long> getStates() {
47 return states.keySet(); 99 return states.keySet();
48 } 100 }