Renamed project folders to match the respective project name
[Mograsim.git] / net.mograsim.logic.ui / src / net / mograsim / logic / ui / modeladapter / componentadapters / SimpleGateAdapter.java
1 package net.mograsim.logic.ui.modeladapter.componentadapters;
2
3 import java.util.List;
4 import java.util.Map;
5
6 import net.mograsim.logic.ui.model.components.SimpleRectangularGUIGate;
7 import net.mograsim.logic.ui.model.wires.Pin;
8 import net.mograsim.logic.ui.modeladapter.LogicModelParameters;
9 import net.mograsim.logic.core.components.Component;
10 import net.mograsim.logic.core.timeline.Timeline;
11 import net.mograsim.logic.core.wires.Wire;
12 import net.mograsim.logic.core.wires.Wire.ReadEnd;
13 import net.mograsim.logic.core.wires.Wire.ReadWriteEnd;
14
15 public class SimpleGateAdapter<G extends SimpleRectangularGUIGate> implements ComponentAdapter<G>
16 {
17         private final Class<G> supportedClass;
18         private final ComponentConstructor constructor;
19
20         public SimpleGateAdapter(Class<G> supportedClass, ComponentConstructor constructor)
21         {
22                 this.supportedClass = supportedClass;
23                 this.constructor = constructor;
24         }
25
26         @Override
27         public Class<G> getSupportedClass()
28         {
29                 return supportedClass;
30         }
31
32         @Override
33         public Component createAndLinkComponent(Timeline timeline, LogicModelParameters params, G guiComponent, Map<Pin, Wire> logicWiresPerPin)
34         {
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);
41         }
42
43         public static interface ComponentConstructor
44         {
45                 public Component newComponent(Timeline timeline, int processTime, ReadWriteEnd out, ReadEnd[] ins);
46         }
47
48 }