X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.logic.ui%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fui%2Fmodeladapter%2Fcomponentadapters%2FSimpleGateAdapter.java;fp=net.mograsim.logic.ui%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fui%2Fmodeladapter%2Fcomponentadapters%2FSimpleGateAdapter.java;h=1902d626a3ef05fc4ad5923838c39ab910702a3d;hb=07faf07e3acb8b2afdc2bf65a46bc868faaed0f8;hp=0000000000000000000000000000000000000000;hpb=0009789a8df6b8d4562b6e1cbfa75102a7516ea8;p=Mograsim.git diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/SimpleGateAdapter.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/SimpleGateAdapter.java new file mode 100644 index 00000000..1902d626 --- /dev/null +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/SimpleGateAdapter.java @@ -0,0 +1,48 @@ +package net.mograsim.logic.ui.modeladapter.componentadapters; + +import java.util.List; +import java.util.Map; + +import net.mograsim.logic.ui.model.components.SimpleRectangularGUIGate; +import net.mograsim.logic.ui.model.wires.Pin; +import net.mograsim.logic.ui.modeladapter.LogicModelParameters; +import net.mograsim.logic.core.components.Component; +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; + +public class SimpleGateAdapter implements ComponentAdapter +{ + private final Class supportedClass; + private final ComponentConstructor constructor; + + public SimpleGateAdapter(Class supportedClass, ComponentConstructor constructor) + { + this.supportedClass = supportedClass; + this.constructor = constructor; + } + + @Override + public Class getSupportedClass() + { + return supportedClass; + } + + @Override + public Component createAndLinkComponent(Timeline timeline, LogicModelParameters params, G guiComponent, Map logicWiresPerPin) + { + ReadWriteEnd out = logicWiresPerPin.get(guiComponent.getOutputPin()).createReadWriteEnd(); + List inputPins = guiComponent.getInputPins(); + ReadEnd[] ins = new ReadEnd[inputPins.size()]; + for (int i = 0; i < inputPins.size(); i++) + ins[i] = logicWiresPerPin.get(inputPins.get(i)).createReadOnlyEnd(); + return constructor.newComponent(timeline, params.gateProcessTime, out, ins); + } + + public static interface ComponentConstructor + { + public Component newComponent(Timeline timeline, int processTime, ReadWriteEnd out, ReadEnd[] ins); + } + +} \ No newline at end of file