BitDisplay, ManualSwitch now Observable. More Docs added in Timeline.
[Mograsim.git] / net.mograsim.logic.core / src / net / mograsim / logic / core / components / BitDisplay.java
index af2fbc0..2e9b5ed 100644 (file)
@@ -1,21 +1,27 @@
 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\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
@@ -25,6 +31,7 @@ public class BitDisplay extends BasicComponent
        protected void compute()\r
        {\r
                displayedValue = in.getValues();\r
+               notifyObservers();\r
        }\r
 \r
        public BitVector getDisplayedValue()\r
@@ -48,4 +55,22 @@ public class BitDisplay extends BasicComponent
        {\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