From 44be6e6cd7671dd243056107ffa6201504f7fbce Mon Sep 17 00:00:00 2001 From: Ben Culkin Date: Sun, 25 Jun 2023 15:50:38 -0400 Subject: Update a number of things --- src/main/java/bjc/data/BooleanToggle.java | 2 +- src/main/java/bjc/data/Either.java | 24 +++++++++ src/main/java/bjc/data/Lazy.java | 17 +++---- src/main/java/bjc/data/OneWayToggle.java | 3 +- src/main/java/bjc/data/Pair.java | 9 ++++ src/main/java/bjc/data/PetriNet.java | 17 +++++++ src/main/java/bjc/data/PetriTransition.java | 59 +++++++++++++++++++++- src/main/java/bjc/data/Triple.java | 78 +++++++++++++++++++++++++++++ src/main/java/bjc/data/ValueToggle.java | 6 +-- 9 files changed, 197 insertions(+), 18 deletions(-) create mode 100644 src/main/java/bjc/data/Triple.java (limited to 'src/main/java/bjc/data') diff --git a/src/main/java/bjc/data/BooleanToggle.java b/src/main/java/bjc/data/BooleanToggle.java index 56cbdf0..41f2564 100644 --- a/src/main/java/bjc/data/BooleanToggle.java +++ b/src/main/java/bjc/data/BooleanToggle.java @@ -83,7 +83,7 @@ public class BooleanToggle implements Toggle { final BooleanToggle other = (BooleanToggle) obj; if (val != other.val) return false; - else return true; + return true; } @Override diff --git a/src/main/java/bjc/data/Either.java b/src/main/java/bjc/data/Either.java index 42d2e99..07845f6 100644 --- a/src/main/java/bjc/data/Either.java +++ b/src/main/java/bjc/data/Either.java @@ -185,6 +185,14 @@ public class Either { return rightVal; } + /** + * Change the type of the right-side of this either. + * + * Works only for left Eithers. + * + * @param The new type for the right side + * @return The either with the new type. + */ @SuppressWarnings("unchecked") public Either newRight() { if (isLeft) return (Either) this; @@ -192,6 +200,14 @@ public class Either { throw new NoSuchElementException("Can't replace right type on right Either"); } + /** + * Change the type of the left-side of this either. + * + * Works only for right Eithers. + * + * @param The new type for the left side + * @return The either with the new type. + */ @SuppressWarnings("unchecked") public Either newLeft() { if (isLeft) @@ -199,6 +215,14 @@ public class Either { return (Either) this; } + /** + * Collapse an Either with the same type on both sides. + * + * @param The type of the either + * @param eth The either to collapse + * + * @return The collapsed either + */ public static T collapse(Either eth) { return eth.extract(ID.id(), ID.id()); } diff --git a/src/main/java/bjc/data/Lazy.java b/src/main/java/bjc/data/Lazy.java index 45293e2..436e4c3 100644 --- a/src/main/java/bjc/data/Lazy.java +++ b/src/main/java/bjc/data/Lazy.java @@ -87,10 +87,7 @@ public class Lazy implements Holder { } - final Supplier supplier = () -> { - if (valueMaterialized) return heldValue; - else return valueSupplier.get(); - }; + final Supplier supplier = () -> valueMaterialized ? heldValue : valueSupplier.get(); return new BoundLazy<>(() -> new Lazy<>(supplier, pendingActions), binder); } @@ -128,18 +125,18 @@ public class Lazy implements Holder { if (valueMaterialized) { if (actions.isEmpty()) { return String.format("value[v='%s']", heldValue); - } else { - return String.format("value[v='%s'] (has %d pending transforms)", - heldValue, actions.getSize()); } + + return String.format("value[v='%s'] (has %d pending transforms)", + heldValue, actions.getSize()); } if (actions.isEmpty()) { return"(unmaterialized)"; - } else { - return String.format("(unmaterialized; has %d pending transforms", - actions.getSize()); } + + return String.format("(unmaterialized; has %d pending transforms", + actions.getSize()); } @Override diff --git a/src/main/java/bjc/data/OneWayToggle.java b/src/main/java/bjc/data/OneWayToggle.java index 0705344..c427af3 100644 --- a/src/main/java/bjc/data/OneWayToggle.java +++ b/src/main/java/bjc/data/OneWayToggle.java @@ -57,8 +57,7 @@ public class OneWayToggle implements Toggle { @Override public E peek() { - if (gotFirst) return second; - else return first; + return gotFirst ? second : first; } @Override diff --git a/src/main/java/bjc/data/Pair.java b/src/main/java/bjc/data/Pair.java index fe65936..dd6ff7c 100644 --- a/src/main/java/bjc/data/Pair.java +++ b/src/main/java/bjc/data/Pair.java @@ -268,6 +268,15 @@ public interface Pair extends Bifunctor(left, right); } + /** + * Swap the left & right sides of this pair + * + * @return The pair with the left and right types swapped + */ + public default Pair swap() { + return merge((l, r) -> Pair.pair(r, l)); + } + @Override default void formatTo(Formatter formatter, int flags, int width, int precision) { if ((flags & FormattableFlags.ALTERNATE) != 0) { diff --git a/src/main/java/bjc/data/PetriNet.java b/src/main/java/bjc/data/PetriNet.java index b4c08e1..2dea6d6 100644 --- a/src/main/java/bjc/data/PetriNet.java +++ b/src/main/java/bjc/data/PetriNet.java @@ -31,11 +31,19 @@ public class PetriNet