public void AppendGate(Gate gate, int[] wires)
{
Debug.Assert(gate.InputCount == gate.OutputCount);
Debug.Assert(gate.InputCount == wires.Length);
ISet <GateConnection> joins = new HashSet <GateConnection>();
for (int i = 0; i < wires.Length; i++)
{
int wire = wires[i];
if (LastGateForWire[wire] != null)
{
joins.Add(new GateConnection(LastGateForWire[wire], gate.GetLocalInputAddress(i)));
}
LastGateForWire[wire] = gate.GetLocalOutputAddress(i);
if (FirstGateForWire[wire] == null)
{
FirstGateForWire[wire] = gate.GetLocalInputAddress(i);
}
WireGateList[wire].Add(gate);
}
Circuit.AddGate(gate, joins);
}