samples/apifest1/day1/pinbasedsolution/src/org/netbeans/apifest/boolcircuit/Circuit.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  * The contents of this file are subject to the terms of the Common Development
     3  * and Distribution License (the License). You may not use this file except in
     4  * compliance with the License.
     5  *
     6  * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
     7  * or http://www.netbeans.org/cddl.txt.
     8  *
     9  * When distributing Covered Code, include this CDDL Header Notice in each file
    10  * and include the License file at http://www.netbeans.org/cddl.txt.
    11  * If applicable, add the following below the CDDL Header, with the fields
    12  * enclosed by brackets [] replaced by your own identifying information:
    13  * "Portions Copyrighted [year] [name of copyright owner]"
    14  *
    15  * The Original Software is NetBeans. The Initial Developer of the Original
    16  * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
    17  * Microsystems, Inc. All Rights Reserved.
    18  */
    19 
    20 package org.netbeans.apifest.boolcircuit;
    21 
    22 /**
    23  * A representation of a logic circuit.
    24  * It can only be constructed from an element net.
    25  * Usage:
    26  * <pre>
    27  *  Circuit c = Circuit.construct(
    28  *      Element.createOr(
    29  *          Element.createAnd(
    30  *              Element.createInput(0),
    31  *              Element.createInput(1)
    32  *          ),
    33  *          Element.createInput(2)
    34  *      )
    35  *  );
    36  *            
    37  *  boolean val = c.evaluate(false, true, false));
    38  * </pre>
    39  */
    40 public class Circuit {
    41     Element root;
    42     int pins;
    43     
    44     private Circuit(Element elem) {
    45         root = elem;
    46         pins = 1 + root.maxInput();
    47     }
    48     
    49     /**
    50      * Evaluate output of the circuit for given inputs.
    51      * For general 
    52      */
    53     public boolean evaluate(Boolean ... inputs) throws UnstableException {
    54         if (inputs.length != pins) throw new IllegalArgumentException("Wrong number of inputs, " + pins + " expected.");
    55         boolean[] inp = new boolean[pins];
    56         for (int i=0; i<pins; i++) inp[i] = inputs[i];
    57         return root.evaluate(inp);
    58     }
    59     
    60     /**
    61      * Creates a circuit from a preconstructed element net.
    62      *
    63      * @param a top-level element representing the logic net.
    64      * @return a circuit prepared for evaluating result for given inputs.
    65      * 
    66      */
    67     public static Circuit construct(Element elem) {
    68         return new Circuit(elem);
    69     }
    70     
    71 }