-package era.mi.logic.components;
-
-import era.mi.logic.Bit;
-import era.mi.logic.wires.WireArray;
-import era.mi.logic.wires.WireArrayObserver;
-
-public class Splitter implements WireArrayObserver
-{
- private WireArray input;
- private WireArray[] outputs;
-
- public Splitter(WireArray input, WireArray... outputs)
- {
- this.input = input;
- this.outputs = outputs;
- input.addObserver(this);
- int length = 0;
- for(WireArray out : outputs)
- length += out.length;
-
- if(input.length != length)
- throw new IllegalArgumentException("The input of splitting one into n WireArrays must have length = a1.length() + a2.length() + ... + an.length().");
- }
-
- protected void compute()
- {
- int startIndex = 0;
- Bit[] inputBits = input.getValues();
- for(int i = 0; i < outputs.length; i++)
- {
- Bit[] outputBits = new Bit[outputs[i].length];
- System.arraycopy(inputBits, startIndex, outputBits, 0, outputs[i].length);
- outputs[i].feedSignals(outputBits);
- startIndex += outputs[i].length;
- }
- }
-
- public WireArray getInput()
- {
- return input;
- }
-
- public WireArray[] getOutputs()
- {
- return outputs.clone();
- }
-
- @Override
- public void update(WireArray initiator)
- {
- compute();
- }
-}
+package era.mi.logic.components;\r
+\r
+import era.mi.logic.types.Bit;\r
+import era.mi.logic.wires.Wire;\r
+import era.mi.logic.wires.Wire.WireEnd;\r
+import era.mi.logic.wires.WireObserver;\r
+\r
+public class Splitter implements WireObserver\r
+{\r
+ private WireEnd input;\r
+ private WireEnd[] outputs;\r
+\r
+ public Splitter(WireEnd input, WireEnd... outputs)\r
+ {\r
+ this.input = input;\r
+ this.outputs = outputs;\r
+ input.addObserver(this);\r
+ int length = 0;\r
+ for (WireEnd out : outputs)\r
+ length += out.length();\r
+\r
+ if (input.length() != length)\r
+ throw new IllegalArgumentException(\r
+ "The input of splitting one into n WireArrays must have length = a1.length() + a2.length() + ... + an.length().");\r
+ }\r
+\r
+ protected void compute()\r
+ {\r
+ int startIndex = 0;\r
+ Bit[] inputBits = input.getValues();\r
+ for (int i = 0; i < outputs.length; i++)\r
+ {\r
+ Bit[] outputBits = new Bit[outputs[i].length()];\r
+ System.arraycopy(inputBits, startIndex, outputBits, 0, outputs[i].length());\r
+ outputs[i].feedSignals(outputBits);\r
+ startIndex += outputs[i].length();\r
+ }\r
+ }\r
+\r
+ @Override\r
+ public void update(Wire initiator, Bit[] oldValues)\r
+ {\r
+ compute();\r
+ }\r
+}\r