summaryrefslogtreecommitdiff
path: root/dice/src/main/java/bjc/dicelang/neodice/diepool/TransformDiePool.java
diff options
context:
space:
mode:
Diffstat (limited to 'dice/src/main/java/bjc/dicelang/neodice/diepool/TransformDiePool.java')
-rw-r--r--dice/src/main/java/bjc/dicelang/neodice/diepool/TransformDiePool.java52
1 files changed, 52 insertions, 0 deletions
diff --git a/dice/src/main/java/bjc/dicelang/neodice/diepool/TransformDiePool.java b/dice/src/main/java/bjc/dicelang/neodice/diepool/TransformDiePool.java
new file mode 100644
index 0000000..f590e91
--- /dev/null
+++ b/dice/src/main/java/bjc/dicelang/neodice/diepool/TransformDiePool.java
@@ -0,0 +1,52 @@
+package bjc.dicelang.neodice.diepool;
+
+import java.util.*;
+import java.util.function.*;
+import java.util.stream.*;
+
+import bjc.dicelang.neodice.*;
+
+public class TransformDiePool<SideType> implements IDiePool<SideType> {
+ private final IDiePool<SideType> contained;
+
+ private UnaryOperator<Stream<SideType>> transform;
+
+ public TransformDiePool(IDiePool<SideType> contained,
+ UnaryOperator<Stream<SideType>> transform) {
+ super();
+ this.contained = contained;
+ this.transform = transform;
+ }
+
+ @Override
+ public Stream<SideType> roll(Random rng) {
+ return transform.apply(contained.roll(rng));
+ }
+
+ @Override
+ public List<IDie<SideType>> contained() {
+ return contained.contained();
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(contained, transform);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) return true;
+ if (obj == null) return false;
+ if (getClass() != obj.getClass()) return false;
+
+ TransformDiePool<?> other = (TransformDiePool<?>) obj;
+
+ return Objects.equals(contained, other.contained)
+ && Objects.equals(transform, other.transform);
+ }
+
+ @Override
+ public String toString() {
+ return contained.toString() + "(transformed)";
+ }
+}