From 035cf2e01e6ba12fc0b5cae1d4b170de295e7777 Mon Sep 17 00:00:00 2001 From: Christian Wulf <chw@informatik.uni-kiel.de> Date: Fri, 27 Mar 2015 14:49:41 +0100 Subject: [PATCH] worked on draft for Traversor --- .../java/teetime/framework/StageVisitor.java | 4 +++- src/main/java/teetime/framework/Traversor.java | 16 +++++++++++++--- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/main/java/teetime/framework/StageVisitor.java b/src/main/java/teetime/framework/StageVisitor.java index d60b87bf..c24e5238 100644 --- a/src/main/java/teetime/framework/StageVisitor.java +++ b/src/main/java/teetime/framework/StageVisitor.java @@ -1,11 +1,13 @@ package teetime.framework; +import teetime.framework.pipe.IPipe; + public interface StageVisitor { public enum VisitorBehavior { CONTINUE, STOP } - VisitorBehavior visit(Stage stage); + VisitorBehavior visit(Stage stage, IPipe inputPipe); } diff --git a/src/main/java/teetime/framework/Traversor.java b/src/main/java/teetime/framework/Traversor.java index 9432b1cc..09e82ebc 100644 --- a/src/main/java/teetime/framework/Traversor.java +++ b/src/main/java/teetime/framework/Traversor.java @@ -1,18 +1,28 @@ package teetime.framework; +import java.util.HashSet; +import java.util.Set; + import teetime.framework.StageVisitor.VisitorBehavior; import teetime.framework.pipe.IPipe; public class Traversor { private final StageVisitor stageVisitor; + private final Set<Stage> visitedStage = new HashSet<Stage>(); public Traversor(final StageVisitor stageVisitor) { this.stageVisitor = stageVisitor; } - public void traverse(final Stage stage) { - VisitorBehavior visitorBehavior = stageVisitor.visit(stage); + public void traverse(final Stage stage, final IPipe inputPipe) { + if (!visitedStage.contains(stage)) { + visitedStage.add(stage); + } else { + return; + } + + VisitorBehavior visitorBehavior = stageVisitor.visit(stage, inputPipe); if (visitorBehavior == VisitorBehavior.STOP) { return; } @@ -22,7 +32,7 @@ public class Traversor { IPipe pipe = outputPort.getPipe(); if (null != pipe) { Stage owningStage = pipe.getTargetPort().getOwningStage(); - traverse(owningStage); // recursive call + traverse(owningStage, pipe); // recursive call } } } -- GitLab