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=8ca38c08a86d8927f088def925406209431b17e9;hb=30b24889d4ae001113c6cac543fb8c29d15d0ff2;hp=7eeee59b72060a286e1460e4d8e54a54d4b95fa1;hpb=b40d893693eafd69ed24eb14dba482bed750e8c2;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 7eeee59b..8ca38c08 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 @@ -3,7 +3,6 @@ package net.mograsim.logic.model.modeladapter.componentadapters; import java.util.HashMap; import java.util.Map; import java.util.concurrent.atomic.AtomicReference; -import java.util.function.Function; import net.mograsim.logic.core.LogicObserver; import net.mograsim.logic.core.timeline.Timeline; @@ -11,21 +10,12 @@ 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.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; -//TODO support HighLevelStates public class SimpleRectangularHardcodedGUIComponentAdapter implements ComponentAdapter { - private final Function recalculateFunctionGenerator; - - public SimpleRectangularHardcodedGUIComponentAdapter( - Function recalculateFunctionGenerator) - { - this.recalculateFunctionGenerator = recalculateFunctionGenerator; - } - @Override public Class getSupportedClass() { @@ -36,20 +26,21 @@ public class SimpleRectangularHardcodedGUIComponentAdapter implements ComponentA public void createAndLinkComponent(Timeline timeline, LogicModelParameters params, SimpleRectangularHardcodedGUIComponent guiComponent, Map logicWiresPerPin) { - RecalculateFunction recalculate = recalculateFunctionGenerator.apply(guiComponent); Map readEnds = new HashMap<>(); Map readWriteEnds = new HashMap<>(); AtomicReference state = new AtomicReference<>(); - LogicObserver logicObs = c -> timeline.addEvent(e -> state.set(recalculate.recalculate(state.get(), readEnds, readWriteEnds)), - params.gateProcessTime); + 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); ReadEnd end; - if (guiComponent.getPinUsage(pin) != Usage.INPUT) + if (pin.usage != PinUsage.INPUT) { ReadWriteEnd rwEnd = wire.createReadWriteEnd(); readWriteEnds.put(pin.name, rwEnd); @@ -57,13 +48,8 @@ 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); } } - - public static interface RecalculateFunction - { - public Object recalculate(Object lastState, Map readEnds, Map readWriteEnds); - } } \ No newline at end of file