samples/apifest1/day1/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
     1 /*
     2  * CircuitFactory.java
     3  *
     4  * Created on July 12, 2006, 3:01 PM
     5  *
     6  * To change this template, choose Tools | Template Manager
     7  * and open the template in the editor.
     8  */
     9 
    10 package org.netbeans.apifest.boolcircuit;
    11 
    12 import java.util.Stack;
    13 
    14 /**
    15  *
    16  */
    17 public class CircuitFactory {
    18     
    19     /** Creates a new instance of CircuitFactory */
    20     private  CircuitFactory() {
    21     }
    22     
    23     public final static Circuit join (final Circuit c1, final Circuit c2, final Operation op) {
    24         return new Circuit () {
    25             public char evaluate(Stack input) throws IllegalArgumentException {
    26                 return op.evaluate(c1.evaluate(input), c2.evaluate(input));
    27             }
    28         };
    29     }
    30     
    31     public final static Circuit getBasicCircuit (final Operation op) {
    32         return new Circuit () {
    33             public char evaluate(Stack<Character> input) throws IllegalArgumentException {
    34                 // special handling of unary oparation
    35                 if (op instanceof Operation.Neg) {
    36                     return op.evaluate(input.pop(), input.peek());
    37                 } else {
    38                     return op.evaluate(input.pop(), input.pop());
    39                 }
    40             }
    41         };
    42     }
    43     public final static Circuit getTrivialCircuit () {
    44         return new Circuit () {
    45             public char evaluate(Stack<Character> input) throws IllegalArgumentException {
    46                 return input.peek();
    47             }
    48         };
    49     }
    50 }