-package era.mi.logic.components;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-import era.mi.logic.Bit;
-import era.mi.logic.wires.WireArray;
-import era.mi.logic.wires.WireArray.WireArrayInput;
-import era.mi.logic.wires.WireArrayObserver;
-
-public class Merger implements WireArrayObserver, Component
-{
- private WireArrayInput outI;
- private WireArray[] inputs;
- private int[] beginningIndex;
-
- /**
- *
- * @param union The output of merging n {@link WireArray}s into one. Must have
- * length = a1.length() + a2.length() + ... + an.length().
- * @param inputs The inputs to be merged into the union
- */
- public Merger(WireArray union, WireArray... inputs)
- {
- this.inputs = inputs;
- this.outI = union.createInput();
- this.beginningIndex = new int[inputs.length];
-
- int length = 0;
- for (int i = 0; i < inputs.length; i++)
- {
- beginningIndex[i] = length;
- length += inputs[i].length;
- inputs[i].addObserver(this);
- }
-
- if (length != union.length)
- throw new IllegalArgumentException(
- "The output of merging n WireArrays into one must have length = a1.length() + a2.length() + ... + an.length().");
- }
-
- public WireArray getInput(int index)
- {
- return inputs[index];
- }
-
- public WireArray getUnion()
- {
- return outI.owner;
- }
-
- @Override
- public void update(WireArray initiator, Bit[] oldValues)
- {
- int index = find(initiator);
- int beginning = beginningIndex[index];
- outI.feedSignals(beginning, initiator.getValues());
- }
-
- private int find(WireArray w)
- {
- for (int i = 0; i < inputs.length; i++)
- if (inputs[i] == w)
- return i;
- return -1;
- }
-
- public WireArray[] getInputs()
- {
- return inputs.clone();
- }
-
- @Override
- public List<WireArray> getAllInputs()
- {
- return Collections.unmodifiableList(Arrays.asList(inputs));
- }
-
- @Override
- public List<WireArray> getAllOutputs()
- {
- return Collections.unmodifiableList(Arrays.asList(outI.owner));
- }
-}
+package era.mi.logic.components;\r
+\r
+import java.util.Arrays;\r
+import java.util.Collections;\r
+import java.util.List;\r
+\r
+import era.mi.logic.Bit;\r
+import era.mi.logic.wires.WireArray;\r
+import era.mi.logic.wires.WireArray.WireArrayEnd;\r
+import era.mi.logic.wires.WireArrayObserver;\r
+\r
+public class Merger implements WireArrayObserver, Component\r
+{\r
+ private WireArrayEnd outI;\r
+ private WireArray[] inputs;\r
+ private int[] beginningIndex;\r
+\r
+ /**\r
+ * \r
+ * @param union The output of merging n {@link WireArray}s into one. Must have length = a1.length() + a2.length() + ... + an.length().\r
+ * @param inputs The inputs to be merged into the union\r
+ */\r
+ public Merger(WireArray union, WireArray... inputs)\r
+ {\r
+ this.inputs = inputs;\r
+ this.outI = union.createInput();\r
+ this.beginningIndex = new int[inputs.length];\r
+\r
+ int length = 0;\r
+ for (int i = 0; i < inputs.length; i++)\r
+ {\r
+ beginningIndex[i] = length;\r
+ length += inputs[i].length;\r
+ inputs[i].addObserver(this);\r
+ }\r
+\r
+ if (length != union.length)\r
+ throw new IllegalArgumentException(\r
+ "The output of merging n WireArrays into one must have length = a1.length() + a2.length() + ... + an.length().");\r
+ }\r
+\r
+ public WireArray getInput(int index)\r
+ {\r
+ return inputs[index];\r
+ }\r
+\r
+ public WireArray getUnion()\r
+ {\r
+ return outI.owner;\r
+ }\r
+\r
+ @Override\r
+ public void update(WireArray initiator, Bit[] oldValues)\r
+ {\r
+ int index = find(initiator);\r
+ int beginning = beginningIndex[index];\r
+ outI.feedSignals(beginning, initiator.getValues());\r
+ }\r
+\r
+ private int find(WireArray w)\r
+ {\r
+ for (int i = 0; i < inputs.length; i++)\r
+ if (inputs[i] == w)\r
+ return i;\r
+ return -1;\r
+ }\r
+\r
+ public WireArray[] getInputs()\r
+ {\r
+ return inputs.clone();\r
+ }\r
+\r
+ @Override\r
+ public List<WireArray> getAllInputs()\r
+ {\r
+ return Collections.unmodifiableList(Arrays.asList(inputs));\r
+ }\r
+\r
+ @Override\r
+ public List<WireArray> getAllOutputs()\r
+ {\r
+ return Collections.unmodifiableList(Arrays.asList(outI.owner));\r
+ }\r
+}\r