aboutsummaryrefslogtreecommitdiffstats
path: root/Solvers/VIATRA-Solver/org.eclipse.viatra.dse/src/org/eclipse/viatra/dse/designspace/api/DesignSpace.java
diff options
context:
space:
mode:
Diffstat (limited to 'Solvers/VIATRA-Solver/org.eclipse.viatra.dse/src/org/eclipse/viatra/dse/designspace/api/DesignSpace.java')
-rw-r--r--Solvers/VIATRA-Solver/org.eclipse.viatra.dse/src/org/eclipse/viatra/dse/designspace/api/DesignSpace.java106
1 files changed, 106 insertions, 0 deletions
diff --git a/Solvers/VIATRA-Solver/org.eclipse.viatra.dse/src/org/eclipse/viatra/dse/designspace/api/DesignSpace.java b/Solvers/VIATRA-Solver/org.eclipse.viatra.dse/src/org/eclipse/viatra/dse/designspace/api/DesignSpace.java
new file mode 100644
index 00000000..bc0f08d4
--- /dev/null
+++ b/Solvers/VIATRA-Solver/org.eclipse.viatra.dse/src/org/eclipse/viatra/dse/designspace/api/DesignSpace.java
@@ -0,0 +1,106 @@
1/*******************************************************************************
2 * Copyright (c) 2010-2016, Andras Szabolcs Nagy and Daniel Varro
3 * This program and the accompanying materials are made available under the
4 * terms of the Eclipse Public License v. 2.0 which is available at
5 * http://www.eclipse.org/legal/epl-v20.html.
6 *
7 * SPDX-License-Identifier: EPL-2.0
8 *******************************************************************************/
9package org.eclipse.viatra.dse.designspace.api;
10
11import java.util.ArrayList;
12import java.util.Collection;
13import java.util.Collections;
14import java.util.HashMap;
15import java.util.HashSet;
16import java.util.List;
17import java.util.Map;
18import java.util.Random;
19import java.util.Set;
20
21public class DesignSpace implements IDesignSpace {
22
23 Set<Object> statesView;
24
25 Set<Object> rootStates;
26 Set<Object> rootStatesView;
27
28 Map<Object, List<Object>> statesAndActivations;
29
30 Random random = new Random();
31
32 public DesignSpace() {
33 rootStates = new HashSet<>();
34 rootStatesView = Collections.unmodifiableSet(rootStates);
35
36 statesAndActivations = new HashMap<>();
37 statesView = statesAndActivations.keySet();
38 }
39
40 @Override
41 public synchronized Collection<Object> getStates() {
42 return statesView;
43 }
44
45 @Override
46 public synchronized Collection<Object> getRoots() {
47 return rootStatesView;
48 }
49
50 @Override
51 public synchronized void addState(Object sourceStateId, Object firedActivationId, Object newStateId) {
52
53 List<Object> activationIds = statesAndActivations.get(newStateId);
54
55 if (activationIds == null) {
56 activationIds = new ArrayList<Object>();
57 statesAndActivations.put(newStateId, activationIds);
58
59 if (sourceStateId == null) {
60 rootStates.add(newStateId);
61 return;
62 }
63 }
64
65 activationIds = statesAndActivations.get(sourceStateId);
66
67 if (activationIds == null) {
68 activationIds = new ArrayList<Object>();
69 activationIds.add(firedActivationId);
70 statesAndActivations.put(sourceStateId, activationIds);
71 } else {
72 activationIds.add(firedActivationId);
73 }
74 }
75
76 public synchronized boolean isTraversed(Object stateId) {
77 return statesAndActivations.containsKey(stateId);
78 }
79
80 @Override
81 public synchronized Collection<Object> getActivationIds(Object stateId) {
82 return statesAndActivations.get(stateId);
83 }
84
85 @Override
86 public synchronized Object getRandomActivationId(Object stateId) {
87 List<Object> activations = statesAndActivations.get(stateId);
88 int index = random.nextInt(activations.size());
89 return activations.get(index);
90 }
91
92 @Override
93 public synchronized long getNumberOfStates() {
94 return statesAndActivations.size();
95 }
96
97 @Override
98 public synchronized long getNumberOfTransitions() {
99 int numberOfTransitions = 0;
100 for (List<Object> activations : statesAndActivations.values()) {
101 numberOfTransitions += activations.size();
102 }
103 return numberOfTransitions;
104 }
105
106}