From eda9a86d8d48758e9982cfffd470c3b38a0a4b0b Mon Sep 17 00:00:00 2001 From: Ben Culkin Date: Sat, 21 Nov 2020 23:11:43 -0500 Subject: Make dice generic Convert dice from dealing exclusively with ints, to deal with objects of arbitrary types --- .../dicelang/neodice/diepool/TransformDiePool.java | 52 ++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 dice/src/main/java/bjc/dicelang/neodice/diepool/TransformDiePool.java (limited to 'dice/src/main/java/bjc/dicelang/neodice/diepool/TransformDiePool.java') 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 implements IDiePool { + private final IDiePool contained; + + private UnaryOperator> transform; + + public TransformDiePool(IDiePool contained, + UnaryOperator> transform) { + super(); + this.contained = contained; + this.transform = transform; + } + + @Override + public Stream roll(Random rng) { + return transform.apply(contained.roll(rng)); + } + + @Override + public List> 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)"; + } +} -- cgit v1.2.3