diff options
Diffstat (limited to 'store/src/main/java/org/eclipse/viatra/solver/data/model/ModelStoreImpl.java')
-rw-r--r-- | store/src/main/java/org/eclipse/viatra/solver/data/model/ModelStoreImpl.java | 121 |
1 files changed, 0 insertions, 121 deletions
diff --git a/store/src/main/java/org/eclipse/viatra/solver/data/model/ModelStoreImpl.java b/store/src/main/java/org/eclipse/viatra/solver/data/model/ModelStoreImpl.java deleted file mode 100644 index a97fb27a..00000000 --- a/store/src/main/java/org/eclipse/viatra/solver/data/model/ModelStoreImpl.java +++ /dev/null | |||
@@ -1,121 +0,0 @@ | |||
1 | package org.eclipse.viatra.solver.data.model; | ||
2 | |||
3 | import java.util.HashMap; | ||
4 | import java.util.LinkedList; | ||
5 | import java.util.List; | ||
6 | import java.util.Map; | ||
7 | import java.util.Map.Entry; | ||
8 | import java.util.Set; | ||
9 | |||
10 | import org.eclipse.viatra.solver.data.map.ContinousHashProvider; | ||
11 | import org.eclipse.viatra.solver.data.map.DiffCursor; | ||
12 | import org.eclipse.viatra.solver.data.map.VersionedMap; | ||
13 | import org.eclipse.viatra.solver.data.map.VersionedMapStore; | ||
14 | import org.eclipse.viatra.solver.data.map.VersionedMapStoreImpl; | ||
15 | import org.eclipse.viatra.solver.data.model.internal.ModelImpl; | ||
16 | import org.eclipse.viatra.solver.data.model.internal.SimilarRelationEquivalenceClass; | ||
17 | import org.eclipse.viatra.solver.data.model.representation.AuxilaryData; | ||
18 | import org.eclipse.viatra.solver.data.model.representation.DataRepresentation; | ||
19 | import org.eclipse.viatra.solver.data.model.representation.Relation; | ||
20 | |||
21 | public class ModelStoreImpl implements ModelStore { | ||
22 | |||
23 | private final Map<DataRepresentation<?, ?>, VersionedMapStore<?, ?>> stores; | ||
24 | |||
25 | public ModelStoreImpl(Set<DataRepresentation<?, ?>> dataRepresentations) { | ||
26 | stores = initStores(dataRepresentations); | ||
27 | } | ||
28 | |||
29 | private Map<DataRepresentation<?, ?>, VersionedMapStore<?, ?>> initStores( | ||
30 | Set<DataRepresentation<?, ?>> dataRepresentations) { | ||
31 | Map<DataRepresentation<?, ?>, VersionedMapStore<?, ?>> result = new HashMap<>(); | ||
32 | |||
33 | Map<SimilarRelationEquivalenceClass, List<Relation<?>>> symbolRepresentationsPerHashPerArity = new HashMap<>(); | ||
34 | |||
35 | for (DataRepresentation<?, ?> dataRepresentation : dataRepresentations) { | ||
36 | if (dataRepresentation instanceof Relation<?> symbolRepresentation) { | ||
37 | addOrCreate(symbolRepresentationsPerHashPerArity, | ||
38 | new SimilarRelationEquivalenceClass(symbolRepresentation), symbolRepresentation); | ||
39 | } else if (dataRepresentation instanceof AuxilaryData<?, ?>) { | ||
40 | VersionedMapStoreImpl<?, ?> store = new VersionedMapStoreImpl<>(dataRepresentation.getHashProvider(), | ||
41 | dataRepresentation.getDefaultValue()); | ||
42 | result.put(dataRepresentation, store); | ||
43 | } else { | ||
44 | throw new UnsupportedOperationException( | ||
45 | "Model store does not have strategy to use " + dataRepresentation.getClass() + "!"); | ||
46 | } | ||
47 | } | ||
48 | for (List<Relation<?>> symbolGroup : symbolRepresentationsPerHashPerArity.values()) { | ||
49 | initRepresentationGroup(result, symbolGroup); | ||
50 | } | ||
51 | |||
52 | return result; | ||
53 | } | ||
54 | |||
55 | private void initRepresentationGroup(Map<DataRepresentation<?, ?>, VersionedMapStore<?, ?>> result, | ||
56 | List<Relation<?>> symbolGroup) { | ||
57 | final ContinousHashProvider<Tuple> hashProvider = symbolGroup.get(0).getHashProvider(); | ||
58 | final Object defaultValue = symbolGroup.get(0).getDefaultValue(); | ||
59 | |||
60 | List<VersionedMapStore<Tuple, Object>> maps = VersionedMapStoreImpl | ||
61 | .createSharedVersionedMapStores(symbolGroup.size(), hashProvider, defaultValue); | ||
62 | |||
63 | for (int i = 0; i < symbolGroup.size(); i++) { | ||
64 | result.put(symbolGroup.get(i), maps.get(i)); | ||
65 | } | ||
66 | } | ||
67 | |||
68 | private static <K, V> void addOrCreate(Map<K, List<V>> map, K key, V value) { | ||
69 | List<V> list; | ||
70 | if (map.containsKey(key)) { | ||
71 | list = map.get(key); | ||
72 | } else { | ||
73 | list = new LinkedList<>(); | ||
74 | map.put(key, list); | ||
75 | } | ||
76 | list.add(value); | ||
77 | } | ||
78 | |||
79 | @Override | ||
80 | public Set<DataRepresentation<?, ?>> getDataRepresentations() { | ||
81 | return this.stores.keySet(); | ||
82 | } | ||
83 | |||
84 | @Override | ||
85 | public ModelImpl createModel() { | ||
86 | Map<DataRepresentation<?, ?>, VersionedMap<?, ?>> maps = new HashMap<>(); | ||
87 | for (Entry<DataRepresentation<?, ?>, VersionedMapStore<?, ?>> entry : this.stores.entrySet()) { | ||
88 | maps.put(entry.getKey(), entry.getValue().createMap()); | ||
89 | } | ||
90 | return new ModelImpl(this, maps); | ||
91 | } | ||
92 | |||
93 | @Override | ||
94 | public synchronized ModelImpl createModel(long state) { | ||
95 | Map<DataRepresentation<?, ?>, VersionedMap<?, ?>> maps = new HashMap<>(); | ||
96 | for (Entry<DataRepresentation<?, ?>, VersionedMapStore<?, ?>> entry : this.stores.entrySet()) { | ||
97 | maps.put(entry.getKey(), entry.getValue().createMap(state)); | ||
98 | } | ||
99 | return new ModelImpl(this, maps); | ||
100 | } | ||
101 | |||
102 | @Override | ||
103 | public synchronized Set<Long> getStates() { | ||
104 | var iterator = stores.values().iterator(); | ||
105 | if (iterator.hasNext()) { | ||
106 | return Set.copyOf(iterator.next().getStates()); | ||
107 | } | ||
108 | return Set.of(0l); | ||
109 | } | ||
110 | |||
111 | @Override | ||
112 | public synchronized ModelDiffCursor getDiffCursor(long from, long to) { | ||
113 | Map<DataRepresentation<?, ?>, DiffCursor<?, ?>> diffcursors = new HashMap<>(); | ||
114 | for (Entry<DataRepresentation<?, ?>, VersionedMapStore<?, ?>> entry : stores.entrySet()) { | ||
115 | DataRepresentation<?, ?> representation = entry.getKey(); | ||
116 | DiffCursor<?, ?> diffCursor = entry.getValue().getDiffCursor(from, to); | ||
117 | diffcursors.put(representation, diffCursor); | ||
118 | } | ||
119 | return new ModelDiffCursor(diffcursors); | ||
120 | } | ||
121 | } | ||