aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/store/src/main/java/tools/refinery/store/representation/cardinality/FiniteUpperCardinality.java
diff options
context:
space:
mode:
Diffstat (limited to 'subprojects/store/src/main/java/tools/refinery/store/representation/cardinality/FiniteUpperCardinality.java')
-rw-r--r--subprojects/store/src/main/java/tools/refinery/store/representation/cardinality/FiniteUpperCardinality.java25
1 files changed, 24 insertions, 1 deletions
diff --git a/subprojects/store/src/main/java/tools/refinery/store/representation/cardinality/FiniteUpperCardinality.java b/subprojects/store/src/main/java/tools/refinery/store/representation/cardinality/FiniteUpperCardinality.java
index 82afdbbc..b63a8637 100644
--- a/subprojects/store/src/main/java/tools/refinery/store/representation/cardinality/FiniteUpperCardinality.java
+++ b/subprojects/store/src/main/java/tools/refinery/store/representation/cardinality/FiniteUpperCardinality.java
@@ -6,6 +6,7 @@
6package tools.refinery.store.representation.cardinality; 6package tools.refinery.store.representation.cardinality;
7 7
8import org.jetbrains.annotations.NotNull; 8import org.jetbrains.annotations.NotNull;
9import org.jetbrains.annotations.Nullable;
9 10
10import java.util.function.IntBinaryOperator; 11import java.util.function.IntBinaryOperator;
11 12
@@ -22,6 +23,15 @@ public record FiniteUpperCardinality(int finiteUpperBound) implements UpperCardi
22 } 23 }
23 24
24 @Override 25 @Override
26 @Nullable
27 public UpperCardinality take(int count) {
28 if (finiteUpperBound < count) {
29 return null;
30 }
31 return new FiniteUpperCardinality(finiteUpperBound - count);
32 }
33
34 @Override
25 public UpperCardinality multiply(UpperCardinality other) { 35 public UpperCardinality multiply(UpperCardinality other) {
26 return lift(other, (a, b) -> a * b); 36 return lift(other, (a, b) -> a * b);
27 } 37 }
@@ -49,7 +59,7 @@ public record FiniteUpperCardinality(int finiteUpperBound) implements UpperCardi
49 59
50 private UpperCardinality lift(@NotNull UpperCardinality other, IntBinaryOperator operator) { 60 private UpperCardinality lift(@NotNull UpperCardinality other, IntBinaryOperator operator) {
51 if (other instanceof FiniteUpperCardinality finiteUpperCardinality) { 61 if (other instanceof FiniteUpperCardinality finiteUpperCardinality) {
52 return UpperCardinalities.valueOf(operator.applyAsInt(finiteUpperBound, 62 return UpperCardinalities.atMost(operator.applyAsInt(finiteUpperBound,
53 finiteUpperCardinality.finiteUpperBound)); 63 finiteUpperCardinality.finiteUpperBound));
54 } 64 }
55 if (other instanceof UnboundedUpperCardinality) { 65 if (other instanceof UnboundedUpperCardinality) {
@@ -57,4 +67,17 @@ public record FiniteUpperCardinality(int finiteUpperBound) implements UpperCardi
57 } 67 }
58 throw new IllegalArgumentException("Unknown UpperCardinality: " + other); 68 throw new IllegalArgumentException("Unknown UpperCardinality: " + other);
59 } 69 }
70
71 @Override
72 public boolean equals(Object o) {
73 if (this == o) return true;
74 if (o == null || getClass() != o.getClass()) return false;
75 FiniteUpperCardinality that = (FiniteUpperCardinality) o;
76 return finiteUpperBound == that.finiteUpperBound;
77 }
78
79 @Override
80 public int hashCode() {
81 return finiteUpperBound;
82 }
60} 83}