1 package era.mi.logic.components;
5 import era.mi.logic.types.BitVector;
6 import era.mi.logic.wires.Wire.ReadEnd;
7 import era.mi.logic.wires.Wire.ReadWriteEnd;
8 import era.mi.logic.wires.WireObserver;
10 public class Splitter implements WireObserver, Component
12 private ReadEnd input;
13 private ReadWriteEnd[] outputs;
15 public Splitter(ReadEnd input, ReadWriteEnd... outputs)
18 this.outputs = outputs;
19 input.addObserver(this);
21 for (ReadEnd out : outputs)
22 length += out.length();
24 if (input.length() != length)
25 throw new IllegalArgumentException(
26 "The input of splitting one into n WireArrays must have length = a1.length() + a2.length() + ... + an.length().");
29 protected void compute()
31 BitVector inputBits = input.getValues();
33 for (int i = 0; i < outputs.length; i++)
35 outputs[i].feedSignals(inputBits.subVector(startIndex, startIndex + outputs[i].length()));
36 startIndex += outputs[i].length();
41 public void update(ReadEnd initiator, BitVector oldValues)
47 public List<ReadEnd> getAllInputs()
49 return List.of(input);
53 public List<ReadWriteEnd> getAllOutputs()
55 return List.of(outputs);