X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.logic.core%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fcore%2Fcomponents%2FBitDisplay.java;h=799f41245188d1bee62d4d5dd55c4e57c21900b7;hb=f14ea37d69488dd51518a36413af7176916b8bd7;hp=bc54c2324bad1a39bc7c5a719f90ad005742f039;hpb=e202298a91603f3b8cfae3c1192e5be796db2786;p=Mograsim.git diff --git a/net.mograsim.logic.core/src/net/mograsim/logic/core/components/BitDisplay.java b/net.mograsim.logic.core/src/net/mograsim/logic/core/components/BitDisplay.java index bc54c232..799f4124 100644 --- a/net.mograsim.logic.core/src/net/mograsim/logic/core/components/BitDisplay.java +++ b/net.mograsim.logic.core/src/net/mograsim/logic/core/components/BitDisplay.java @@ -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 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)); + } }