Renamed core components to have the common prefix Core
[Mograsim.git] / net.mograsim.logic.model / src / net / mograsim / logic / model / modeladapter / componentadapters / SimpleRectangularHardcodedGUIComponentAdapter.java
index 2ccc0d6..8634c0c 100644 (file)
@@ -3,29 +3,19 @@ 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;
-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.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<SimpleRectangularHardcodedGUIComponent>
 {
-       private final Function<SimpleRectangularHardcodedGUIComponent, RecalculateFunction> recalculateFunctionGenerator;
-
-       public SimpleRectangularHardcodedGUIComponentAdapter(
-                       Function<SimpleRectangularHardcodedGUIComponent, RecalculateFunction> recalculateFunctionGenerator)
-       {
-               this.recalculateFunctionGenerator = recalculateFunctionGenerator;
-       }
-
        @Override
        public Class<SimpleRectangularHardcodedGUIComponent> getSupportedClass()
        {
@@ -34,20 +24,21 @@ public class SimpleRectangularHardcodedGUIComponentAdapter implements ComponentA
 
        @Override
        public void createAndLinkComponent(Timeline timeline, LogicModelParameters params, SimpleRectangularHardcodedGUIComponent guiComponent,
-                       Map<Pin, Wire> logicWiresPerPin)
+                       Map<Pin, CoreWire> logicWiresPerPin)
        {
-               RecalculateFunction recalculate = recalculateFunctionGenerator.apply(guiComponent);
                Map<String, ReadEnd> readEnds = new HashMap<>();
                Map<String, ReadWriteEnd> readWriteEnds = new HashMap<>();
 
                AtomicReference<Object> 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);
+                       CoreWire wire = logicWiresPerPin.get(pin);
                        ReadEnd end;
                        if (pin.usage != PinUsage.INPUT)
                        {
@@ -61,9 +52,4 @@ public class SimpleRectangularHardcodedGUIComponentAdapter implements ComponentA
                                end.registerObserver(logicObs);
                }
        }
-
-       public static interface RecalculateFunction
-       {
-               public Object recalculate(Object lastState, Map<String, ReadEnd> readEnds, Map<String, ReadWriteEnd> readWriteEnds);
-       }
 }
\ No newline at end of file