samples/apifest1/day2/elementbasedsolution/src/org/netbeans/apifest/boolcircuit/Circuit.java
1 package org.netbeans.apifest.boolcircuit;
3 // BEGIN: apifest.day2.elementbasedsolution.Circuit
4 public final class Circuit {
8 public static Element and(final Element e1, final Element e2) {
10 public boolean result() {
11 return e1.result() && e2.result();
13 public double doubleResult() {
14 return e1.doubleResult() * e2.doubleResult();
18 public static Element or(final Element e1, final Element e2) {
19 return new Element() {
20 public boolean result() {
21 return e1.result() || e2.result();
23 public double doubleResult() {
25 (1.0 - e1.doubleResult()) * (1.0 - e2.doubleResult());
30 public static Element not(final Element e1) {
31 return new Element() {
32 public boolean result() {
35 public double doubleResult() {
36 return 1 - e1.doubleResult();
41 public static Element operation(
42 final Operation op, final Element... elements
44 return new Element() {
45 public boolean result() {
46 return doubleResult() >= 1.0;
48 public double doubleResult() {
49 double[] arr = new double[elements.length];
50 for (int i = 0; i < arr.length; i++) {
51 arr[i] = elements[i].doubleResult();
53 return op.computeResult(arr);
59 public static Variable var() {
60 return new Variable();
63 public static abstract class Element {
67 public abstract boolean result();
68 public abstract double doubleResult();
71 public static final class Variable extends Element {
72 private Boolean booleanValue;
73 private Double doubleValue;
75 public void assignValue(boolean b) {
78 public void assignValue(double d) {
80 throw new IllegalArgumentException();
85 public boolean result() {
86 return booleanValue != null ?
87 booleanValue : doubleValue >= 1.0;
90 public double doubleResult() {
91 return doubleValue != null ?
92 doubleValue : (booleanValue ? 1.0 : 0.0);
97 public static interface Operation {
98 public double computeResult(double... values);
101 // END: apifest.day2.elementbasedsolution.Circuit