1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- // by Boyang Wei
- package YaoGC;
- public class FF10_Wplus1_Wplus1 extends CompositeCircuit {
- private final int w;
- private final boolean b; // find 1 or find 0
- private int s; // sigma
- public FF10_Wplus1_Wplus1(int w, boolean b, int s) {
- super(w + 1, w + 1, w * 3, "FindFirstZeroOrOne_" + (w + 1) + "_" + w
- + 1);
- this.w = w;
- this.b = b;
- this.s = s;
- }
- protected void createSubCircuits() throws Exception {
- for (int i = 0; i < w * 2; i++) {
- if (s <= i && i <= w + s - 1) {
- if (b)
- subCircuits[i] = new FF10_2_2(1);
- else
- subCircuits[i] = new FF10_2_2(2);
- } else { // i < s || w+s-1 < i
- subCircuits[i] = new FF10_2_2(3);
- }
- }
- for (int i = 2 * w; i < w * 3; i++)
- subCircuits[i] = XOR_2_1.newInstance();
- s = 0;
- super.createSubCircuits();
- }
- protected void connectWires() throws Exception {
- inputWires[0].connectTo(subCircuits[0].inputWires, 0); // Enable wire
- for (int i = 0; i < w; i++) {
- inputWires[i + 1].connectTo(subCircuits[i].inputWires, 1); // green
- // wire
- inputWires[i + 1].connectTo(subCircuits[i + w].inputWires, 1); // green
- // wire
- subCircuits[i].outputWires[1].connectTo(
- subCircuits[i + 2 * w].inputWires, 0); // orange wire
- subCircuits[i + w].outputWires[1].connectTo(
- subCircuits[i + 2 * w].inputWires, 1); // orange wire
- }
- for (int i = 0; i < 2 * w - 1; i++)
- subCircuits[i].outputWires[0].connectTo(
- subCircuits[i + 1].inputWires, 0); // blue wire
- }
- protected void defineOutputWires() {
- for (int i = 0; i < w; i++)
- outputWires[i] = subCircuits[i + 2 * w].outputWires[0]; // orange
- // wire
- outputWires[w] = subCircuits[2 * w - 1].outputWires[0]; // Success wire
- }
- }
|