Mercurial > hg > Members > tatsuki > functionaljava-master > core
diff src/main/java/fj/test/Bool.java @ 0:fe80c1edf1be
add getLoop
author | tatsuki |
---|---|
date | Fri, 20 Mar 2015 21:04:03 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/fj/test/Bool.java Fri Mar 20 21:04:03 2015 +0900 @@ -0,0 +1,98 @@ +package fj.test; + +import fj.P1; +import static fj.test.Property.prop; + +/** + * A boolean wrapper that works well with properties. + * + * @version %build.number% + */ +public final class Bool { + private final boolean b; + + private static final Bool t = new Bool(true); + private static final Bool f = new Bool(false); + + private Bool(final boolean b) { + this.b = b; + } + + /** + * Returns <code>true</code> if this value is true, <code>false</code> otherwise. + * + * @return <code>true</code> if this value is true, <code>false</code> otherwise. + */ + public boolean is() { + return b; + } + + /** + * Returns <code>false</code> if this value is true, <code>true</code> otherwise. + * + * @return <code>false</code> if this value is true, <code>true</code> otherwise. + */ + public boolean isNot() { + return !b; + } + + /** + * Returns a property that produces a result only if this value is true. The result will be taken + * from the given property. + * + * @param p The property to return if this value is true. + * @return a property that produces a result only if this value is true. + */ + public Property implies(final P1<Property> p) { + return Property.implies(b, p); + } + + /** + * Returns a property that produces a result only if this value is true. The result will be taken + * from the given property. + * + * @param p The property to return if this value is true. + * @return a property that produces a result only if this value is true. + */ + public Property implies(final Property p) { + return Property.implies(b, new P1<Property>() { + public Property _1() { + return p; + } + }); + } + + /** + * Returns a property that produces a result only if this value is true. + * + * @param c The value to construct a property with to return if this value is true. + * @return a property that produces a result only if this value is true. + */ + public Property implies(final Bool c) { + return implies(prop(c.b)); + } + + /** + * Returns a property that produces a result only if this value is true. + * + * @param c The value to construct a property with to return if this value is true. + * @return a property that produces a result only if this value is true. + */ + public Property implies(final boolean c) { + return Property.implies(b, new P1<Property>() { + public Property _1() { + return prop(c); + } + }); + } + + /** + * Construct a <code>Bool</code> from the given value. + * + * @param b The value to construct a <code>Bool</code> with. + * @return A <code>Bool</code> from the given value. + */ + public static Bool bool(final boolean b) { + return b ? t : f; + } +}