WireArray(Input) is now Wire(End); all in-/outputs are now WireEnds
[Mograsim.git] / era.mi / src / era / mi / logic / components / gates / MultiInputGate.java
index fac267a..7a6d438 100644 (file)
@@ -1,57 +1,55 @@
 package era.mi.logic.components.gates;
 
+import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 
 import era.mi.logic.Bit;
 import era.mi.logic.components.BasicComponent;
-import era.mi.logic.wires.WireArray;
-import era.mi.logic.wires.WireArray.WireArrayEnd;
+import era.mi.logic.wires.Wire.WireEnd;
 
 public abstract class MultiInputGate extends BasicComponent
 {
-       protected WireArray[] in;
-       protected WireArray out;
-       protected WireArrayEnd outI;
+       protected WireEnd[] in;
+       protected WireEnd out;
        protected final int length;
        protected Operation op;
 
-       protected MultiInputGate(int processTime, Operation op, WireArray out, WireArray... in)
+       protected MultiInputGate(int processTime, Operation op, WireEnd out, WireEnd... in)
        {
                super(processTime);
                this.op = op;
-               length = out.length;
+               length = out.length();
                this.in = in.clone();
                if (in.length < 1)
                        throw new IllegalArgumentException(String.format("Cannot create gate with %d wires.", in.length));
-               for (WireArray w : in)
+               for (WireEnd w : in)
                {
-                       if (w.length != length)
+                       if (w.length() != length)
                                throw new IllegalArgumentException("All wires connected to the gate must be of uniform length.");
                        w.addObserver(this);
                }
                this.out = out;
-               outI = out.createInput();
        }
 
        @Override
-       public List<WireArray> getAllInputs()
+       public List<WireEnd> getAllInputs()
        {
-               return List.of(in);
+               return Collections.unmodifiableList(Arrays.asList(in));
        }
 
        @Override
-       public List<WireArray> getAllOutputs()
+       public List<WireEnd> getAllOutputs()
        {
-               return List.of(out);
+               return Collections.unmodifiableList(Arrays.asList(out));
        }
 
-       @Override
        protected void compute()
        {
                Bit[] result = in[0].getValues();
                for (int i = 1; i < in.length; i++)
                        result = op.execute(result, in[i].getValues());
-               outI.feedSignals(result);
+               out.feedSignals(result);
        }
 
        protected interface Operation