From c6c57bf6fc689fce25d73d75c1c0b0a5e4153268 Mon Sep 17 00:00:00 2001 From: Christian Wulf <chw@informatik.uni-kiel.de> Date: Tue, 14 Apr 2015 12:53:13 +0200 Subject: [PATCH] removed two versions of input/output ports --- .settings/edu.umd.cs.findbugs.core.prefs | 2 +- .../java/teetime/framework/AbstractStage.java | 44 ++++++++----------- src/site/markdown/wiki | 2 +- 3 files changed, 21 insertions(+), 27 deletions(-) diff --git a/.settings/edu.umd.cs.findbugs.core.prefs b/.settings/edu.umd.cs.findbugs.core.prefs index 9327e5ac..e5f34a95 100644 --- a/.settings/edu.umd.cs.findbugs.core.prefs +++ b/.settings/edu.umd.cs.findbugs.core.prefs @@ -1,5 +1,5 @@ #FindBugs User Preferences -#Thu Mar 19 17:05:30 CET 2015 +#Tue Apr 14 12:04:32 CEST 2015 detector_threshold=3 effort=max excludefilter0=.fbExcludeFilterFile|true diff --git a/src/main/java/teetime/framework/AbstractStage.java b/src/main/java/teetime/framework/AbstractStage.java index 5f8f9007..88fbed4f 100644 --- a/src/main/java/teetime/framework/AbstractStage.java +++ b/src/main/java/teetime/framework/AbstractStage.java @@ -15,7 +15,7 @@ */ package teetime.framework; -import java.util.ArrayList; +import java.lang.reflect.Array; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -29,31 +29,20 @@ public abstract class AbstractStage extends Stage { private static final IPipe DUMMY_PORT = new DummyPipe(); - private final List<InputPort<?>> inputPortList = new ArrayList<InputPort<?>>(); - private final List<OutputPort<?>> outputPortList = new ArrayList<OutputPort<?>>(); private final Set<ISignal> triggeredSignals = new HashSet<ISignal>(); - /** A cached instance of <code>inputPortList</code> to avoid creating an iterator each time iterating it */ - protected InputPort<?>[] cachedInputPorts = new InputPort[0]; - /** A cached instance of <code>outputPortList</code> to avoid creating an iterator each time iterating it */ - protected OutputPort<?>[] cachedOutputPorts; - /** The current state of this stage */ + private InputPort<?>[] inputPorts = new InputPort<?>[0]; + private OutputPort<?>[] outputPorts = new OutputPort<?>[0]; private StageState currentState = StageState.CREATED; - /** - * @return the stage's input ports - */ @Override public InputPort<?>[] getInputPorts() { - // return this.cachedInputPorts; - return inputPortList.toArray(new InputPort<?>[0]); // FIXME remove work-around + return inputPorts; } - /** - * @return the stage's output ports - */ + @Override protected OutputPort<?>[] getOutputPorts() { - return this.cachedOutputPorts; + return this.outputPorts; } @Override @@ -70,7 +59,7 @@ public abstract class AbstractStage extends Stage { if (!this.signalAlreadyReceived(signal, inputPort)) { signal.trigger(this); - for (OutputPort<?> outputPort : outputPortList) { + for (OutputPort<?> outputPort : outputPorts) { outputPort.sendSignal(signal); } } @@ -108,8 +97,6 @@ public abstract class AbstractStage extends Stage { @Override public void onStarting() throws Exception { this.owningThread = Thread.currentThread(); - this.cachedInputPorts = this.inputPortList.toArray(new InputPort<?>[0]); - this.cachedOutputPorts = this.outputPortList.toArray(new OutputPort<?>[0]); this.connectUnconnectedOutputPorts(); currentState = StageState.STARTED; @@ -118,7 +105,7 @@ public abstract class AbstractStage extends Stage { @SuppressWarnings("PMD.DataflowAnomalyAnalysis") private void connectUnconnectedOutputPorts() { - for (OutputPort<?> outputPort : this.cachedOutputPorts) { + for (OutputPort<?> outputPort : this.outputPorts) { if (null == outputPort.getPipe()) { // if port is unconnected if (logger.isInfoEnabled()) { this.logger.info("Unconnected output port: " + outputPort + ". Connecting with a dummy output port."); @@ -143,7 +130,7 @@ public abstract class AbstractStage extends Stage { protected <T> InputPort<T> createInputPort() { final InputPort<T> inputPort = new InputPort<T>(this); // inputPort.setType(portType); - this.inputPortList.add(inputPort); + inputPorts = addElementToArray(inputPort, inputPorts, InputPort.class); return inputPort; } @@ -155,15 +142,22 @@ public abstract class AbstractStage extends Stage { protected <T> OutputPort<T> createOutputPort() { final OutputPort<T> outputPort = new OutputPort<T>(); // outputPort.setType(portType); - this.outputPortList.add(outputPort); + outputPorts = addElementToArray(outputPort, outputPorts, OutputPort.class); return outputPort; } + private <T> T[] addElementToArray(final T element, final T[] srcArray, final Class<T> arrayType) { + @SuppressWarnings("unchecked") + T[] newOutputPorts = (T[]) Array.newInstance(arrayType, srcArray.length + 1); + System.arraycopy(srcArray, 0, newOutputPorts, 0, srcArray.length); + newOutputPorts[srcArray.length] = element; + return newOutputPorts; + } + @SuppressWarnings("PMD.DataflowAnomalyAnalysis") @Override public void validateOutputPorts(final List<InvalidPortConnection> invalidPortConnections) { - // for (OutputPort<?> outputPort : this.getOutputPorts()) { - for (OutputPort<?> outputPort : this.outputPortList) { + for (OutputPort<?> outputPort : outputPorts) { final IPipe pipe = outputPort.getPipe(); if (null != pipe) { // if output port is connected with another one final Class<?> sourcePortType = outputPort.getType(); diff --git a/src/site/markdown/wiki b/src/site/markdown/wiki index 162510ff..0e447457 160000 --- a/src/site/markdown/wiki +++ b/src/site/markdown/wiki @@ -1 +1 @@ -Subproject commit 162510ff4d2f04011498ba6920aae0c78347c6c8 +Subproject commit 0e4474577e1f49bc96e734c286b2d9e0363895e8 -- GitLab