From 96e868388c7617136e916c27ddd90694c0bb8356 Mon Sep 17 00:00:00 2001 From: bjculkin Date: Mon, 27 Feb 2017 10:34:25 -0500 Subject: More refactoring --- dice-lang/src/bjc/dicelang/v2/dice/MathDie.java | 74 +++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 dice-lang/src/bjc/dicelang/v2/dice/MathDie.java (limited to 'dice-lang/src/bjc/dicelang/v2/dice/MathDie.java') diff --git a/dice-lang/src/bjc/dicelang/v2/dice/MathDie.java b/dice-lang/src/bjc/dicelang/v2/dice/MathDie.java new file mode 100644 index 0000000..55e01f8 --- /dev/null +++ b/dice-lang/src/bjc/dicelang/v2/dice/MathDie.java @@ -0,0 +1,74 @@ +package bjc.dicelang.v2.dice; + +public class MathDie implements Die { + public static enum MathOp { + ADD, SUBTRACT, MULTIPLY; + + public String toString() { + switch(this) { + case ADD: + return "+"; + case SUBTRACT: + return "-"; + case MULTIPLY: + return "*"; + default: + return this.name(); + } + } + } + + private MathDie.MathOp type; + + private Die left; + private Die right; + + public MathDie(MathDie.MathOp op, Die lft, Die rght) { + type = op; + + left = lft; + right = rght; + } + + public boolean canOptimize() { + return left.canOptimize() && right.canOptimize(); + } + + private long performOp(long lft, long rght) { + switch(type) { + case ADD: + return lft + rght; + case SUBTRACT: + return lft - rght; + case MULTIPLY: + return lft * rght; + default: + return 0; + } + } + + public long optimize() { + long lft = left.optimize(); + long rght = right.optimize(); + + return performOp(lft, rght); + } + + public long roll() { + long lft = left.roll(); + long rght = right.roll(); + + return performOp(lft, rght); + } + + public long rollSingle() { + long lft = left.rollSingle(); + long rght = right.rollSingle(); + + return performOp(lft, rght); + } + + public String toString() { + return left.toString() + " " + type.toString() + " " + right.toString(); + } +} \ No newline at end of file -- cgit v1.2.3