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=026db85f46b6ea58e765ecff069545728eebdcac;hp=268d1572403d13bd9e98d66c7025a895aee71980;hpb=07faf07e3acb8b2afdc2bf65a46bc868faaed0f8;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 268d1572..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,23 +1,29 @@ 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.addObserver(this); + 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)); + } }