jtulach@52
|
1 |
/*
|
jtulach@52
|
2 |
* CircuitFactory.java
|
jtulach@52
|
3 |
*
|
jtulach@52
|
4 |
* Created on July 12, 2006, 3:01 PM
|
jtulach@52
|
5 |
*
|
jtulach@52
|
6 |
* To change this template, choose Tools | Template Manager
|
jtulach@52
|
7 |
* and open the template in the editor.
|
jtulach@52
|
8 |
*/
|
jtulach@52
|
9 |
|
jtulach@52
|
10 |
package org.netbeans.apifest.boolcircuit;
|
jtulach@52
|
11 |
|
jtulach@52
|
12 |
import java.util.Stack;
|
jtulach@52
|
13 |
|
jtulach@52
|
14 |
/**
|
jtulach@52
|
15 |
*
|
jtulach@52
|
16 |
*/
|
jtulach@52
|
17 |
public class CircuitFactory {
|
jtulach@52
|
18 |
|
jtulach@52
|
19 |
/** Creates a new instance of CircuitFactory */
|
jtulach@52
|
20 |
private CircuitFactory() {
|
jtulach@52
|
21 |
}
|
jtulach@52
|
22 |
|
jtulach@52
|
23 |
public final static Circuit join (final Circuit c1, final Circuit c2, final Operation op) {
|
jtulach@52
|
24 |
return new Circuit () {
|
jtulach@52
|
25 |
public char evaluate(Stack input) throws IllegalArgumentException {
|
jtulach@52
|
26 |
return op.evaluate(c1.evaluate(input), c2.evaluate(input));
|
jtulach@52
|
27 |
}
|
jtulach@52
|
28 |
};
|
jtulach@52
|
29 |
}
|
jtulach@52
|
30 |
|
jtulach@52
|
31 |
public final static Circuit2 join (final Circuit2 c1, final Circuit2 c2, final Operation op) {
|
jtulach@52
|
32 |
return new Circuit2 () {
|
jtulach@52
|
33 |
public char evaluate(Stack input) throws IllegalArgumentException {
|
jtulach@52
|
34 |
return op.evaluate(c1.evaluate(input), c2.evaluate(input));
|
jtulach@52
|
35 |
}
|
jtulach@52
|
36 |
public double evaluate(double ... input) throws IllegalArgumentException {
|
jtulach@52
|
37 |
return op.evaluate(c1.evaluate(input), c2.evaluate(input));
|
jtulach@52
|
38 |
}
|
jtulach@52
|
39 |
};
|
jtulach@52
|
40 |
}
|
jtulach@52
|
41 |
|
jtulach@52
|
42 |
public final static Circuit2 getBasicCircuit (final Operation op) {
|
jtulach@52
|
43 |
return new Circuit2 () {
|
jtulach@52
|
44 |
public double evaluate(double... input) throws IllegalArgumentException {
|
jtulach@52
|
45 |
if (input == null || input.length == 1) {
|
jtulach@52
|
46 |
throw new IllegalArgumentException ("Invalid input array.");
|
jtulach@52
|
47 |
}
|
jtulach@52
|
48 |
return op.evaluate(input[0], input[1]);
|
jtulach@52
|
49 |
}
|
jtulach@52
|
50 |
|
jtulach@52
|
51 |
public char evaluate(Stack<Character> input) throws IllegalArgumentException {
|
jtulach@52
|
52 |
// special handling of unary oparation
|
jtulach@52
|
53 |
if (op instanceof Operation.Neg) {
|
jtulach@52
|
54 |
return op.evaluate(input.pop(), input.peek());
|
jtulach@52
|
55 |
} else {
|
jtulach@52
|
56 |
return op.evaluate(input.pop(), input.pop());
|
jtulach@52
|
57 |
}
|
jtulach@52
|
58 |
}
|
jtulach@52
|
59 |
};
|
jtulach@52
|
60 |
}
|
jtulach@52
|
61 |
// public final static Circuit2 getBasicCircuit (final Operation op, final int posX, final int posY) {
|
jtulach@52
|
62 |
// return new Circuit2 () {
|
jtulach@52
|
63 |
// public double evaluate(double... input) throws IllegalArgumentException {
|
jtulach@52
|
64 |
// return op.evaluate(input[posX], input[posY]);
|
jtulach@52
|
65 |
// }
|
jtulach@52
|
66 |
//
|
jtulach@52
|
67 |
// public char evaluate(Stack<Character> input) throws IllegalArgumentException {
|
jtulach@52
|
68 |
// return getBasicCircuit (op).evaluate(input);
|
jtulach@52
|
69 |
// }
|
jtulach@52
|
70 |
// };
|
jtulach@52
|
71 |
// }
|
jtulach@52
|
72 |
// public final static Circuit2 getBasicCircuit (final Operation op, final Circuit2 c1, final Circuit2 c2) {
|
jtulach@52
|
73 |
// return new Circuit2 () {
|
jtulach@52
|
74 |
// public double evaluate(double... input) throws IllegalArgumentException {
|
jtulach@52
|
75 |
// return op.evaluate(c2.evaluate(input), c2.evaluate(input));
|
jtulach@52
|
76 |
// }
|
jtulach@52
|
77 |
//
|
jtulach@52
|
78 |
// public char evaluate(Stack<Character> input) throws IllegalArgumentException {
|
jtulach@52
|
79 |
// return getBasicCircuit (op).evaluate(input);
|
jtulach@52
|
80 |
// }
|
jtulach@52
|
81 |
// };
|
jtulach@52
|
82 |
// }
|
jtulach@52
|
83 |
public final static Circuit getTrivialCircuit () {
|
jtulach@52
|
84 |
return new Circuit () {
|
jtulach@52
|
85 |
public char evaluate(Stack<Character> input) throws IllegalArgumentException {
|
jtulach@52
|
86 |
return input.peek();
|
jtulach@52
|
87 |
}
|
jtulach@52
|
88 |
};
|
jtulach@52
|
89 |
}
|
jtulach@52
|
90 |
public final static Circuit2 getTrivialCircuit (final int posX) {
|
jtulach@52
|
91 |
return new Circuit2 () {
|
jtulach@52
|
92 |
public double evaluate(double... input) throws IllegalArgumentException {
|
jtulach@52
|
93 |
return input[posX];
|
jtulach@52
|
94 |
}
|
jtulach@52
|
95 |
|
jtulach@52
|
96 |
public char evaluate(Stack<Character> input) throws IllegalArgumentException {
|
jtulach@52
|
97 |
return getTrivialCircuit ().evaluate(input);
|
jtulach@52
|
98 |
}
|
jtulach@52
|
99 |
};
|
jtulach@52
|
100 |
}
|
jtulach@52
|
101 |
}
|