public static ForwardGate[] Build(IEvaluableCircuit circuit)
        {
            ForwardGate[] inputGates = new ForwardGate[circuit.Context.NumberOfInputGates];
            for (int i = 0; i < inputGates.Length; ++i)
            {
                inputGates[i] = new ForwardInputGate();
            }

            ForwardGate[] outputGates = circuit.Evaluate(new ForwardCircuitBuilder(), inputGates);
            for (int i = 0; i < outputGates.Length; ++i)
            {
                outputGates[i].AddSuccessor(new ForwardOutputGate(i));
            }

            return(inputGates);
        }
 public ForwardCircuit(IEvaluableCircuit circuit)
 {
     InputGates = ForwardCircuitBuilder.Build(circuit);
     Context    = circuit.Context;
 }