diff options
author | OszkarSemerath <Oszkar Semerath@DESKTOP-DNR7JQ7> | 2021-07-29 17:05:30 +0200 |
---|---|---|
committer | OszkarSemerath <Oszkar Semerath@DESKTOP-DNR7JQ7> | 2021-07-29 17:05:30 +0200 |
commit | b414e8b64871a13782a0e5a73fcc29229159cf08 (patch) | |
tree | ca5323d2d2f0f262cc5285f9f617672b1ca628e7 /Solvers/VIATRA-Solver | |
parent | Diffcursor fixes & continuous hash provider compare service. (diff) | |
download | VIATRA-Generator-b414e8b64871a13782a0e5a73fcc29229159cf08.tar.gz VIATRA-Generator-b414e8b64871a13782a0e5a73fcc29229159cf08.tar.zst VIATRA-Generator-b414e8b64871a13782a0e5a73fcc29229159cf08.zip |
Config updated and createSharedVersionedMapStores service
Diffstat (limited to 'Solvers/VIATRA-Solver')
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 | ||
3 | public class VersionedMapStoreConfiguration { | 3 | public 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; | |||
3 | import java.util.ArrayList; | 3 | import java.util.ArrayList; |
4 | import java.util.Collections; | 4 | import java.util.Collections; |
5 | import java.util.HashMap; | 5 | import java.util.HashMap; |
6 | import java.util.List; | ||
6 | import java.util.Map; | 7 | import java.util.Map; |
7 | import java.util.Set; | 8 | import 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 | } |