1 package era.mi.gui.modeladapter.componentadapters;
6 import era.mi.gui.model.components.SimpleRectangularGUIGate;
7 import era.mi.gui.model.wires.Pin;
8 import era.mi.gui.modeladapter.LogicModelParameters;
9 import era.mi.logic.components.Component;
10 import era.mi.logic.timeline.Timeline;
11 import era.mi.logic.wires.Wire;
12 import era.mi.logic.wires.Wire.ReadEnd;
13 import era.mi.logic.wires.Wire.ReadWriteEnd;
15 public class SimpleGateAdapter<G extends SimpleRectangularGUIGate> implements ComponentAdapter<G>
17 private final Class<G> supportedClass;
18 private final ComponentConstructor constructor;
20 public SimpleGateAdapter(Class<G> supportedClass, ComponentConstructor constructor)
22 this.supportedClass = supportedClass;
23 this.constructor = constructor;
27 public Class<G> getSupportedClass()
29 return supportedClass;
33 public Component createAndLinkComponent(Timeline timeline, LogicModelParameters params, G guiComponent, Map<Pin, Wire> logicWiresPerPin)
35 ReadWriteEnd out = logicWiresPerPin.get(guiComponent.getOutputPin()).createReadWriteEnd();
36 List<Pin> inputPins = guiComponent.getInputPins();
37 ReadEnd[] ins = new ReadEnd[inputPins.size()];
38 for (int i = 0; i < inputPins.size(); i++)
39 ins[i] = logicWiresPerPin.get(inputPins.get(i)).createReadOnlyEnd();
40 return constructor.newComponent(timeline, params.gateProcessTime, out, ins);
43 public static interface ComponentConstructor
45 public Component newComponent(Timeline timeline, int processTime, ReadWriteEnd out, ReadEnd[] ins);