X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.logic.model%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fmodel%2Fmodeladapter%2Fcomponentadapters%2FSimpleRectangularHardcodedGUIComponentAdapter.java;h=8634c0c20b5dac5ab6fc277d4534fbf5a695da3d;hb=0a04a4ed66ecebd4254541c4977599f6052c115a;hp=409805dffce1ca4ccb1766ad8966853e81636e2f;hpb=662eb9515b9fcbccc4997f50fecfb597ee8eb316;p=Mograsim.git diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/modeladapter/componentadapters/SimpleRectangularHardcodedGUIComponentAdapter.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/modeladapter/componentadapters/SimpleRectangularHardcodedGUIComponentAdapter.java index 409805df..8634c0c2 100644 --- a/net.mograsim.logic.model/src/net/mograsim/logic/model/modeladapter/componentadapters/SimpleRectangularHardcodedGUIComponentAdapter.java +++ b/net.mograsim.logic.model/src/net/mograsim/logic/model/modeladapter/componentadapters/SimpleRectangularHardcodedGUIComponentAdapter.java @@ -2,29 +2,20 @@ package net.mograsim.logic.model.modeladapter.componentadapters; import java.util.HashMap; import java.util.Map; -import java.util.function.BiConsumer; -import java.util.function.Function; +import java.util.concurrent.atomic.AtomicReference; import net.mograsim.logic.core.LogicObserver; import net.mograsim.logic.core.timeline.Timeline; -import net.mograsim.logic.core.wires.Wire; -import net.mograsim.logic.core.wires.Wire.ReadEnd; -import net.mograsim.logic.core.wires.Wire.ReadWriteEnd; +import net.mograsim.logic.core.wires.CoreWire; +import net.mograsim.logic.core.wires.CoreWire.ReadEnd; +import net.mograsim.logic.core.wires.CoreWire.ReadWriteEnd; import net.mograsim.logic.model.model.components.atomic.SimpleRectangularHardcodedGUIComponent; -import net.mograsim.logic.model.model.components.atomic.SimpleRectangularHardcodedGUIComponent.Usage; import net.mograsim.logic.model.model.wires.Pin; +import net.mograsim.logic.model.model.wires.PinUsage; import net.mograsim.logic.model.modeladapter.LogicModelParameters; public class SimpleRectangularHardcodedGUIComponentAdapter implements ComponentAdapter { - private final Function, Map>> recalculateFunctionGenerator; - - public SimpleRectangularHardcodedGUIComponentAdapter( - Function, Map>> recalculateFunctionGenerator) - { - this.recalculateFunctionGenerator = recalculateFunctionGenerator; - } - @Override public Class getSupportedClass() { @@ -33,19 +24,23 @@ public class SimpleRectangularHardcodedGUIComponentAdapter implements ComponentA @Override public void createAndLinkComponent(Timeline timeline, LogicModelParameters params, SimpleRectangularHardcodedGUIComponent guiComponent, - Map logicWiresPerPin) + Map logicWiresPerPin) { - BiConsumer, Map> recalculate = recalculateFunctionGenerator.apply(guiComponent); Map readEnds = new HashMap<>(); Map readWriteEnds = new HashMap<>(); - LogicObserver logicObs = c -> recalculate.accept(readEnds, readWriteEnds); + AtomicReference state = new AtomicReference<>(); + + Runnable recalculate = () -> state.updateAndGet(s -> guiComponent.recalculate(s, readEnds, readWriteEnds)); + LogicObserver logicObs = c -> timeline.addEvent(e -> recalculate.run(), params.gateProcessTime); + + guiComponent.setLogicModelBindingAndResetState(state, recalculate); for (Pin pin : guiComponent.getPins().values()) { - Wire wire = logicWiresPerPin.get(pin); + CoreWire wire = logicWiresPerPin.get(pin); ReadEnd end; - if (guiComponent.getPinUsage(pin) != Usage.INPUT) + if (pin.usage != PinUsage.INPUT) { ReadWriteEnd rwEnd = wire.createReadWriteEnd(); readWriteEnds.put(pin.name, rwEnd); @@ -53,7 +48,7 @@ public class SimpleRectangularHardcodedGUIComponentAdapter implements ComponentA } else end = wire.createReadOnlyEnd(); readEnds.put(pin.name, end); - if (guiComponent.getPinUsage(pin) != Usage.OUTPUT) + if (pin.usage != PinUsage.OUTPUT) end.registerObserver(logicObs); } }