samples/apifest1/day2/stackbasedsolution/src/org/netbeans/apifest/boolcircuit/CircuitFactory.java
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/samples/apifest1/day2/stackbasedsolution/src/org/netbeans/apifest/boolcircuit/CircuitFactory.java Sat Jun 14 09:52:45 2008 +0200
1.3 @@ -0,0 +1,101 @@
1.4 +/*
1.5 + * CircuitFactory.java
1.6 + *
1.7 + * Created on July 12, 2006, 3:01 PM
1.8 + *
1.9 + * To change this template, choose Tools | Template Manager
1.10 + * and open the template in the editor.
1.11 + */
1.12 +
1.13 +package org.netbeans.apifest.boolcircuit;
1.14 +
1.15 +import java.util.Stack;
1.16 +
1.17 +/**
1.18 + *
1.19 + */
1.20 +public class CircuitFactory {
1.21 +
1.22 + /** Creates a new instance of CircuitFactory */
1.23 + private CircuitFactory() {
1.24 + }
1.25 +
1.26 + public final static Circuit join (final Circuit c1, final Circuit c2, final Operation op) {
1.27 + return new Circuit () {
1.28 + public char evaluate(Stack input) throws IllegalArgumentException {
1.29 + return op.evaluate(c1.evaluate(input), c2.evaluate(input));
1.30 + }
1.31 + };
1.32 + }
1.33 +
1.34 + public final static Circuit2 join (final Circuit2 c1, final Circuit2 c2, final Operation op) {
1.35 + return new Circuit2 () {
1.36 + public char evaluate(Stack input) throws IllegalArgumentException {
1.37 + return op.evaluate(c1.evaluate(input), c2.evaluate(input));
1.38 + }
1.39 + public double evaluate(double ... input) throws IllegalArgumentException {
1.40 + return op.evaluate(c1.evaluate(input), c2.evaluate(input));
1.41 + }
1.42 + };
1.43 + }
1.44 +
1.45 + public final static Circuit2 getBasicCircuit (final Operation op) {
1.46 + return new Circuit2 () {
1.47 + public double evaluate(double... input) throws IllegalArgumentException {
1.48 + if (input == null || input.length == 1) {
1.49 + throw new IllegalArgumentException ("Invalid input array.");
1.50 + }
1.51 + return op.evaluate(input[0], input[1]);
1.52 + }
1.53 +
1.54 + public char evaluate(Stack<Character> input) throws IllegalArgumentException {
1.55 + // special handling of unary oparation
1.56 + if (op instanceof Operation.Neg) {
1.57 + return op.evaluate(input.pop(), input.peek());
1.58 + } else {
1.59 + return op.evaluate(input.pop(), input.pop());
1.60 + }
1.61 + }
1.62 + };
1.63 + }
1.64 +// public final static Circuit2 getBasicCircuit (final Operation op, final int posX, final int posY) {
1.65 +// return new Circuit2 () {
1.66 +// public double evaluate(double... input) throws IllegalArgumentException {
1.67 +// return op.evaluate(input[posX], input[posY]);
1.68 +// }
1.69 +//
1.70 +// public char evaluate(Stack<Character> input) throws IllegalArgumentException {
1.71 +// return getBasicCircuit (op).evaluate(input);
1.72 +// }
1.73 +// };
1.74 +// }
1.75 +// public final static Circuit2 getBasicCircuit (final Operation op, final Circuit2 c1, final Circuit2 c2) {
1.76 +// return new Circuit2 () {
1.77 +// public double evaluate(double... input) throws IllegalArgumentException {
1.78 +// return op.evaluate(c2.evaluate(input), c2.evaluate(input));
1.79 +// }
1.80 +//
1.81 +// public char evaluate(Stack<Character> input) throws IllegalArgumentException {
1.82 +// return getBasicCircuit (op).evaluate(input);
1.83 +// }
1.84 +// };
1.85 +// }
1.86 + public final static Circuit getTrivialCircuit () {
1.87 + return new Circuit () {
1.88 + public char evaluate(Stack<Character> input) throws IllegalArgumentException {
1.89 + return input.peek();
1.90 + }
1.91 + };
1.92 + }
1.93 + public final static Circuit2 getTrivialCircuit (final int posX) {
1.94 + return new Circuit2 () {
1.95 + public double evaluate(double... input) throws IllegalArgumentException {
1.96 + return input[posX];
1.97 + }
1.98 +
1.99 + public char evaluate(Stack<Character> input) throws IllegalArgumentException {
1.100 + return getTrivialCircuit ().evaluate(input);
1.101 + }
1.102 + };
1.103 + }
1.104 +}