-package net.mograsim.logic.core.components;
-
-import java.util.List;
-
-import net.mograsim.logic.core.timeline.Timeline;
-import net.mograsim.logic.core.types.Bit;
-import net.mograsim.logic.core.types.BitVector;
-import net.mograsim.logic.core.wires.Wire.ReadEnd;
-import net.mograsim.logic.core.wires.Wire.ReadWriteEnd;
-
-public class BitDisplay extends BasicComponent
-{
- private final ReadEnd in;
- private BitVector displayedValue;
-
- public BitDisplay(Timeline timeline, ReadEnd in)
- {
- super(timeline, 1);
- this.in = in;
- in.addObserver(this);
- compute();
- }
-
- @Override
- protected void compute()
- {
- displayedValue = in.getValues();
- }
-
- public BitVector getDisplayedValue()
- {
- return displayedValue;
- }
-
- public boolean isDisplaying(Bit... values)
- {
- return displayedValue.equals(BitVector.of(values));
- }
-
- @Override
- public List<ReadEnd> getAllInputs()
- {
- return List.of(in);
- }
-
- @Override
- public List<ReadWriteEnd> getAllOutputs()
- {
- return List.of();
- }
-}
+package net.mograsim.logic.core.components;\r
+\r
+import java.util.ArrayList;\r
+import java.util.Collection;\r
+import java.util.List;\r
+\r
+import net.mograsim.logic.core.LogicObservable;\r
+import net.mograsim.logic.core.LogicObserver;\r
+import net.mograsim.logic.core.timeline.Timeline;\r
+import net.mograsim.logic.core.types.Bit;\r
+import net.mograsim.logic.core.types.BitVector;\r
+import net.mograsim.logic.core.wires.Wire.ReadEnd;\r
+import net.mograsim.logic.core.wires.Wire.ReadWriteEnd;\r
+\r
+public class BitDisplay extends BasicComponent implements LogicObservable\r
+{\r
+ private Collection<LogicObserver> observers;\r
+ private final ReadEnd in;\r
+ private BitVector displayedValue;\r
+\r
+ public BitDisplay(Timeline timeline, ReadEnd in)\r
+ {\r
+ super(timeline, 1);\r
+ observers = new ArrayList<>();\r
+ this.in = in;\r
+ in.registerObserver(this);\r
+ compute();\r
+ }\r
+\r
+ @Override\r
+ protected void compute()\r
+ {\r
+ displayedValue = in.getValues();\r
+ notifyObservers();\r
+ }\r
+\r
+ public BitVector getDisplayedValue()\r
+ {\r
+ return displayedValue;\r
+ }\r
+\r
+ public boolean isDisplaying(Bit... values)\r
+ {\r
+ return displayedValue.equals(BitVector.of(values));\r
+ }\r
+\r
+ @Override\r
+ public List<ReadEnd> getAllInputs()\r
+ {\r
+ return List.of(in);\r
+ }\r
+\r
+ @Override\r
+ public List<ReadWriteEnd> getAllOutputs()\r
+ {\r
+ return List.of();\r
+ }\r
+\r
+ @Override\r
+ public void registerObserver(LogicObserver ob)\r
+ {\r
+ observers.add(ob);\r
+ }\r
+\r
+ @Override\r
+ public void deregisterObserver(LogicObserver ob)\r
+ {\r
+ observers.remove(ob);\r
+ }\r
+\r
+ @Override\r
+ public void notifyObservers()\r
+ {\r
+ observers.forEach(ob -> ob.update(this));\r
+ }\r
+}\r