BitDisplay, ManualSwitch now Observable. More Docs added in Timeline.
[Mograsim.git] / net.mograsim.logic.core / src / net / mograsim / logic / core / components / BitDisplay.java
index bc54c23..799f412 100644 (file)
@@ -1,21 +1,27 @@
 package net.mograsim.logic.core.components;
 
+import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
 
+import net.mograsim.logic.core.LogicObservable;
+import net.mograsim.logic.core.LogicObserver;
 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
+public class BitDisplay extends BasicComponent implements LogicObservable
 {
+       private Collection<LogicObserver> observers;
        private final ReadEnd in;
        private BitVector displayedValue;
 
        public BitDisplay(Timeline timeline, ReadEnd in)
        {
                super(timeline, 1);
+               observers = new ArrayList<>();
                this.in = in;
                in.registerObserver(this);
                compute();
@@ -25,6 +31,7 @@ public class BitDisplay extends BasicComponent
        protected void compute()
        {
                displayedValue = in.getValues();
+               notifyObservers();
        }
 
        public BitVector getDisplayedValue()
@@ -48,4 +55,22 @@ public class BitDisplay extends BasicComponent
        {
                return List.of();
        }
+
+       @Override
+       public void registerObserver(LogicObserver ob)
+       {
+               observers.add(ob);
+       }
+
+       @Override
+       public void deregisterObserver(LogicObserver ob)
+       {
+               observers.remove(ob);
+       }
+
+       @Override
+       public void notifyObservers()
+       {
+               observers.forEach(ob -> ob.update(this));
+       }
 }