diff options
Diffstat (limited to 'subprojects/viatra-runtime/src/main/java/tools/refinery/viatra/runtime/matchers/psystem/basicenumerables/PositivePatternCall.java')
-rw-r--r-- | subprojects/viatra-runtime/src/main/java/tools/refinery/viatra/runtime/matchers/psystem/basicenumerables/PositivePatternCall.java | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/subprojects/viatra-runtime/src/main/java/tools/refinery/viatra/runtime/matchers/psystem/basicenumerables/PositivePatternCall.java b/subprojects/viatra-runtime/src/main/java/tools/refinery/viatra/runtime/matchers/psystem/basicenumerables/PositivePatternCall.java new file mode 100644 index 00000000..25ab34b4 --- /dev/null +++ b/subprojects/viatra-runtime/src/main/java/tools/refinery/viatra/runtime/matchers/psystem/basicenumerables/PositivePatternCall.java | |||
@@ -0,0 +1,76 @@ | |||
1 | /******************************************************************************* | ||
2 | * Copyright (c) 2004-2010 Gabor Bergmann 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 | *******************************************************************************/ | ||
9 | |||
10 | package tools.refinery.viatra.runtime.matchers.psystem.basicenumerables; | ||
11 | |||
12 | import java.util.HashSet; | ||
13 | import java.util.Set; | ||
14 | |||
15 | import tools.refinery.viatra.runtime.matchers.context.IInputKey; | ||
16 | import tools.refinery.viatra.runtime.matchers.context.IQueryMetaContext; | ||
17 | import tools.refinery.viatra.runtime.matchers.psystem.IQueryReference; | ||
18 | import tools.refinery.viatra.runtime.matchers.psystem.ITypeInfoProviderConstraint; | ||
19 | import tools.refinery.viatra.runtime.matchers.psystem.KeyedEnumerablePConstraint; | ||
20 | import tools.refinery.viatra.runtime.matchers.psystem.PBody; | ||
21 | import tools.refinery.viatra.runtime.matchers.psystem.TypeJudgement; | ||
22 | import tools.refinery.viatra.runtime.matchers.psystem.queries.PQuery; | ||
23 | import tools.refinery.viatra.runtime.matchers.tuple.Tuple; | ||
24 | import tools.refinery.viatra.runtime.matchers.tuple.Tuples; | ||
25 | |||
26 | /** | ||
27 | * @author Gabor Bergmann | ||
28 | * | ||
29 | */ | ||
30 | public class PositivePatternCall extends KeyedEnumerablePConstraint<PQuery> implements IQueryReference, ITypeInfoProviderConstraint { | ||
31 | |||
32 | public PositivePatternCall(PBody pBody, Tuple variablesTuple, | ||
33 | PQuery pattern) { | ||
34 | super(pBody, variablesTuple, pattern); | ||
35 | } | ||
36 | |||
37 | @Override | ||
38 | protected String keyToString() { | ||
39 | return supplierKey.getFullyQualifiedName(); | ||
40 | } | ||
41 | |||
42 | // Note: #getFunctionalDependencies is intentionally not implemented - use QueryAnalyzer instead! | ||
43 | // @Override | ||
44 | // public Map<Set<PVariable>, Set<PVariable>> getFunctionalDependencies(IQueryMetaContext context) { | ||
45 | // return super.getFunctionalDependencies(context); | ||
46 | // } | ||
47 | |||
48 | @Override | ||
49 | public PQuery getReferredQuery() { | ||
50 | return supplierKey; | ||
51 | } | ||
52 | |||
53 | @Override | ||
54 | public Set<TypeJudgement> getImpliedJudgements(IQueryMetaContext context) { | ||
55 | return getTypesImpliedByCall(supplierKey, variablesTuple); | ||
56 | } | ||
57 | |||
58 | /** | ||
59 | * @since 1.3 | ||
60 | */ | ||
61 | public static Set<TypeJudgement> getTypesImpliedByCall(PQuery calledQuery, Tuple actualParametersTuple) { | ||
62 | Set<TypeJudgement> result = new HashSet<TypeJudgement>(); | ||
63 | for (TypeJudgement parameterJudgement : calledQuery.getTypeGuarantees()) { | ||
64 | IInputKey inputKey = parameterJudgement.getInputKey(); | ||
65 | Tuple judgementIndexTuple = parameterJudgement.getVariablesTuple(); | ||
66 | |||
67 | Object[] judgementVariables = new Object[judgementIndexTuple.getSize()]; | ||
68 | for (int i=0; i<judgementVariables.length; ++i) | ||
69 | judgementVariables[i] = actualParametersTuple.get((int) judgementIndexTuple.get(i)); | ||
70 | |||
71 | result.add(new TypeJudgement(inputKey, Tuples.flatTupleOf(judgementVariables))); | ||
72 | } | ||
73 | return result; | ||
74 | } | ||
75 | |||
76 | } | ||