diff --git a/src/main/java/teetime/framework/A2ThreadableStageCollector.java b/src/main/java/teetime/framework/A1ThreadableStageCollector.java similarity index 92% rename from src/main/java/teetime/framework/A2ThreadableStageCollector.java rename to src/main/java/teetime/framework/A1ThreadableStageCollector.java index efe44233a97aaba468116dd51503c68c8f72047f..d19cb065092f498fd94b68db1ebbc2b79274ec90 100644 --- a/src/main/java/teetime/framework/A2ThreadableStageCollector.java +++ b/src/main/java/teetime/framework/A1ThreadableStageCollector.java @@ -5,7 +5,7 @@ import java.util.Set; import teetime.framework.pipe.IPipe; -public class A2ThreadableStageCollector implements IPipeVisitor { +public class A1ThreadableStageCollector implements IPipeVisitor { private final Set<Stage> threadableStages = new HashSet<Stage>(); private final Set<IPipe<?>> visitedPipes = new HashSet<IPipe<?>>(); diff --git a/src/main/java/teetime/framework/A3InvalidThreadAssignmentCheck.java b/src/main/java/teetime/framework/A2InvalidThreadAssignmentCheck.java similarity index 78% rename from src/main/java/teetime/framework/A3InvalidThreadAssignmentCheck.java rename to src/main/java/teetime/framework/A2InvalidThreadAssignmentCheck.java index 83840262d19b66722ce4f5a6134091a7275b0a64..c04006f85817247aeb3203d05cbf5d2fc405b40c 100644 --- a/src/main/java/teetime/framework/A3InvalidThreadAssignmentCheck.java +++ b/src/main/java/teetime/framework/A2InvalidThreadAssignmentCheck.java @@ -7,13 +7,13 @@ import teetime.framework.pipe.IPipe; import com.carrotsearch.hppc.ObjectIntHashMap; import com.carrotsearch.hppc.ObjectIntMap; -public class A3InvalidThreadAssignmentCheck { +public class A2InvalidThreadAssignmentCheck { private static final int DEFAULT_COLOR = 0; private final Set<Stage> threadableStages; - public A3InvalidThreadAssignmentCheck(final Set<Stage> threadableStages) { + public A2InvalidThreadAssignmentCheck(final Set<Stage> threadableStages) { this.threadableStages = threadableStages; } @@ -28,7 +28,6 @@ public class A3InvalidThreadAssignmentCheck { ThreadPainter threadPainter = new ThreadPainter(colors, color, threadableStages); Traverser traverser = new Traverser(threadPainter); traverser.traverse(threadableStage); - // threadPainter.check(threadableStage); } } @@ -45,19 +44,6 @@ public class A3InvalidThreadAssignmentCheck { this.threadableStages = threadableStages; } - // TODO consider to implement it as IPipeVisitor(FORWARD) - - // public void check(final Stage stage) { - // for (OutputPort<?> outputPort : stage.getOutputPorts()) { - // if (outputPort.pipe != DummyPipe.INSTANCE) { - // Stage nextStage = checkPipe(outputPort.pipe); - // if (nextStage != null) { - // check(nextStage); - // } - // } - // } - // } - @Override public VisitorBehavior visit(final IPipe<?> pipe) { Stage targetStage = pipe.getTargetPort().getOwningStage(); diff --git a/src/main/java/teetime/framework/A1PipeInstantiation.java b/src/main/java/teetime/framework/A3PipeInstantiation.java similarity index 96% rename from src/main/java/teetime/framework/A1PipeInstantiation.java rename to src/main/java/teetime/framework/A3PipeInstantiation.java index 3b7c8aabd922c7419234a4d57239a61b698c0c7c..1e1e38c41edd116b1307ed0e96091e1b0aa838bc 100644 --- a/src/main/java/teetime/framework/A1PipeInstantiation.java +++ b/src/main/java/teetime/framework/A3PipeInstantiation.java @@ -10,7 +10,7 @@ import teetime.framework.pipe.SingleElementPipeFactory; import teetime.framework.pipe.SpScPipeFactory; import teetime.framework.pipe.UnboundedSpScPipeFactory; -public class A1PipeInstantiation implements IPipeVisitor { +public class A3PipeInstantiation implements IPipeVisitor { private static final IPipeFactory interBoundedThreadPipeFactory = new SpScPipeFactory(); private static final IPipeFactory interUnboundedThreadPipeFactory = new UnboundedSpScPipeFactory(); diff --git a/src/main/java/teetime/framework/StageState.java b/src/main/java/teetime/framework/StageState.java index 9ea6f9f32185167216eb9ee865baa1c524974a33..233948a80b595b97416961a5c20cb2aa17062d07 100644 --- a/src/main/java/teetime/framework/StageState.java +++ b/src/main/java/teetime/framework/StageState.java @@ -17,6 +17,7 @@ package teetime.framework; public enum StageState { + /** First state of a stage */ CREATED, INITIALIZED, VALIDATING, VALIDATED, diff --git a/src/main/java/teetime/framework/ThreadService.java b/src/main/java/teetime/framework/ThreadService.java index c33d9a075a6d91166ca62cfc2b00b986b151ef82..a48cadd139d1192fb4497fa0cda76c901e56cdec 100644 --- a/src/main/java/teetime/framework/ThreadService.java +++ b/src/main/java/teetime/framework/ThreadService.java @@ -45,12 +45,8 @@ class ThreadService extends AbstractService<ThreadService> { // TODO visit(port) only // TODO use decorator pattern to combine all analyzes so that only one traverser pass is necessary IPortVisitor portVisitor = new A0UnconnectedPort(); - IPipeVisitor pipeVisitor = new A1PipeInstantiation(); - Traverser traversor = new Traverser(portVisitor, pipeVisitor, Direction.BOTH); - traversor.traverse(startStage); - - A2ThreadableStageCollector stageCollector = new A2ThreadableStageCollector(); - traversor = new Traverser(stageCollector, Direction.BOTH); + A1ThreadableStageCollector stageCollector = new A1ThreadableStageCollector(); + Traverser traversor = new Traverser(portVisitor, stageCollector, Direction.BOTH); traversor.traverse(startStage); threadableStages = stageCollector.getThreadableStages(); @@ -58,9 +54,13 @@ class ThreadService extends AbstractService<ThreadService> { throw new IllegalStateException("No stage was added using the addThreadableStage(..) method. Add at least one stage."); } - A3InvalidThreadAssignmentCheck checker = new A3InvalidThreadAssignmentCheck(threadableStages); + A2InvalidThreadAssignmentCheck checker = new A2InvalidThreadAssignmentCheck(threadableStages); checker.check(); + IPipeVisitor pipeVisitor = new A3PipeInstantiation(); + traversor = new Traverser(pipeVisitor, Direction.BOTH); + traversor.traverse(startStage); + A4StageAttributeSetter attributeSetter = new A4StageAttributeSetter(configuration, threadableStages); attributeSetter.setAttributes(); diff --git a/src/main/java/teetime/framework/Traverser.java b/src/main/java/teetime/framework/Traverser.java index d430e33de7ea9fa841604d858b8eebcefb06dfcd..ffd4cde1dad6414ef2a2ce80ffd49af4617fac10 100644 --- a/src/main/java/teetime/framework/Traverser.java +++ b/src/main/java/teetime/framework/Traverser.java @@ -65,7 +65,8 @@ public class Traverser { } public void traverse(final Stage stage) { - if (!visitedStages.add(stage)) { + if (!visitedStages.add(stage) || stage.getCurrentState() != StageState.CREATED) { + // do not visit (1) an already visited stage and (2) a stage that currently run (runtime visiting) return; }