diff options
Diffstat (limited to 'subprojects/store-dse/src/main/java/tools/refinery/store/dse/internal/action/InsertAction.java')
-rw-r--r-- | subprojects/store-dse/src/main/java/tools/refinery/store/dse/internal/action/InsertAction.java | 94 |
1 files changed, 0 insertions, 94 deletions
diff --git a/subprojects/store-dse/src/main/java/tools/refinery/store/dse/internal/action/InsertAction.java b/subprojects/store-dse/src/main/java/tools/refinery/store/dse/internal/action/InsertAction.java deleted file mode 100644 index 90fcc5ac..00000000 --- a/subprojects/store-dse/src/main/java/tools/refinery/store/dse/internal/action/InsertAction.java +++ /dev/null | |||
@@ -1,94 +0,0 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
6 | package tools.refinery.store.dse.internal.action; | ||
7 | |||
8 | import tools.refinery.store.model.Interpretation; | ||
9 | import tools.refinery.store.model.Model; | ||
10 | import tools.refinery.store.tuple.Tuple; | ||
11 | import tools.refinery.store.tuple.Tuple0; | ||
12 | |||
13 | import java.util.Arrays; | ||
14 | |||
15 | public class InsertAction<T> implements AtomicAction { | ||
16 | |||
17 | private final Interpretation<T> interpretation; | ||
18 | private final T value; | ||
19 | private final int arity; | ||
20 | private final ActionVariable[] variables; | ||
21 | |||
22 | public InsertAction(Interpretation<T> interpretation, T value, ActionVariable... variables) { | ||
23 | this.interpretation = interpretation; | ||
24 | this.value = value; | ||
25 | this.variables = variables; | ||
26 | this.arity = interpretation.getSymbol().arity(); | ||
27 | if (variables.length != arity) { | ||
28 | throw new IllegalArgumentException("Expected " + arity + " variables, but got " + variables.length); | ||
29 | } | ||
30 | } | ||
31 | |||
32 | @Override | ||
33 | public void fire(Tuple activation) { | ||
34 | Tuple tuple; | ||
35 | if (arity == 0) { | ||
36 | tuple = Tuple0.INSTANCE; | ||
37 | } | ||
38 | else if (arity == 1) { | ||
39 | tuple = variables[0].getValue(); | ||
40 | } | ||
41 | else if (arity == 2) { | ||
42 | tuple = Tuple.of(variables[0].getValue().get(0), variables[1].getValue().get(0)); | ||
43 | } | ||
44 | else if (arity == 3) { | ||
45 | tuple = Tuple.of(variables[0].getValue().get(0), variables[1].getValue().get(0), variables[2].getValue().get(0)); | ||
46 | } | ||
47 | else { | ||
48 | tuple = Tuple.of(Arrays.stream(variables).map(variable -> variable.getValue().get(0)) | ||
49 | .mapToInt(Integer::intValue).toArray()); | ||
50 | } | ||
51 | interpretation.put(tuple, value); | ||
52 | } | ||
53 | |||
54 | public void put(Tuple tuple) { | ||
55 | interpretation.put(tuple, value); | ||
56 | } | ||
57 | |||
58 | @Override | ||
59 | public InsertAction<T> prepare(Model model) { | ||
60 | return this; | ||
61 | } | ||
62 | |||
63 | public ActionVariable[] getVariables() { | ||
64 | return variables; | ||
65 | } | ||
66 | |||
67 | @Override | ||
68 | public boolean equalsWithSubstitution(AtomicAction other) { | ||
69 | if (other == null || getClass() != other.getClass()) { | ||
70 | return false; | ||
71 | } | ||
72 | var otherAction = (InsertAction<?>) other; | ||
73 | if (variables.length != otherAction.variables.length) { | ||
74 | return false; | ||
75 | } | ||
76 | if (!interpretation.equals(otherAction.interpretation)) { | ||
77 | return false; | ||
78 | } | ||
79 | if (value == null) { | ||
80 | if (otherAction.value != null) { | ||
81 | return false; | ||
82 | } | ||
83 | } | ||
84 | else if (!value.equals(otherAction.value)) { | ||
85 | return false; | ||
86 | } | ||
87 | for (var i = 0; i < variables.length; i++) { | ||
88 | if (!variables[i].equalsWithSubstitution(otherAction.variables[i])) { | ||
89 | return false; | ||
90 | } | ||
91 | } | ||
92 | return true; | ||
93 | } | ||
94 | } | ||