diff options
Diffstat (limited to 'subprojects/logic/src/main/java/tools/refinery/logic/term/uppercardinality/UnboundedUpperCardinality.java')
-rw-r--r-- | subprojects/logic/src/main/java/tools/refinery/logic/term/uppercardinality/UnboundedUpperCardinality.java | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/subprojects/logic/src/main/java/tools/refinery/logic/term/uppercardinality/UnboundedUpperCardinality.java b/subprojects/logic/src/main/java/tools/refinery/logic/term/uppercardinality/UnboundedUpperCardinality.java new file mode 100644 index 00000000..b6ecc1bd --- /dev/null +++ b/subprojects/logic/src/main/java/tools/refinery/logic/term/uppercardinality/UnboundedUpperCardinality.java | |||
@@ -0,0 +1,66 @@ | |||
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.logic.term.uppercardinality; | ||
7 | |||
8 | import org.jetbrains.annotations.NotNull; | ||
9 | |||
10 | // Singleton implementation, because there is only a single countable infinity. | ||
11 | @SuppressWarnings("squid:S6548") | ||
12 | public final class UnboundedUpperCardinality implements UpperCardinality { | ||
13 | static final UnboundedUpperCardinality INSTANCE = new UnboundedUpperCardinality(); | ||
14 | |||
15 | private UnboundedUpperCardinality() { | ||
16 | // Singleton constructor. | ||
17 | } | ||
18 | |||
19 | @Override | ||
20 | public UpperCardinality add(UpperCardinality other) { | ||
21 | return this; | ||
22 | } | ||
23 | |||
24 | @Override | ||
25 | public UpperCardinality take(int count) { | ||
26 | return this; | ||
27 | } | ||
28 | |||
29 | @Override | ||
30 | public UpperCardinality multiply(UpperCardinality other) { | ||
31 | return this; | ||
32 | } | ||
33 | |||
34 | // This should always be greater than any finite cardinality. | ||
35 | @SuppressWarnings("ComparatorMethodParameterNotUsed") | ||
36 | @Override | ||
37 | public int compareTo(@NotNull UpperCardinality upperCardinality) { | ||
38 | if (upperCardinality instanceof FiniteUpperCardinality) { | ||
39 | return 1; | ||
40 | } | ||
41 | if (upperCardinality instanceof UnboundedUpperCardinality) { | ||
42 | return 0; | ||
43 | } | ||
44 | throw new IllegalArgumentException("Unknown UpperCardinality: " + upperCardinality); | ||
45 | } | ||
46 | |||
47 | @Override | ||
48 | public int compareToInt(int value) { | ||
49 | return 1; | ||
50 | } | ||
51 | |||
52 | @Override | ||
53 | public String toString() { | ||
54 | return "*"; | ||
55 | } | ||
56 | |||
57 | @Override | ||
58 | public boolean equals(Object obj) { | ||
59 | return this == obj || (obj != null && getClass() == obj.getClass()); | ||
60 | } | ||
61 | |||
62 | @Override | ||
63 | public int hashCode() { | ||
64 | return -1; | ||
65 | } | ||
66 | } | ||