samples/apifest1/day2/stackbasedsolution/src/org/netbeans/apifest/boolcircuit/CircuitFactory.java
author Jaroslav Tulach <jtulach@netbeans.org>
Sat, 14 Jun 2008 09:52:45 +0200
changeset 52 4257f4cf226b
permissions -rw-r--r--
Adding samples from API fest to the repository, including pieces of their code in the document, not just links
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
}