Loop Nodes

LoopNode是一个代表迭代循环的StructuredActivityNode,它包含一个setupPart,一个test和一个bodyPart,后者代表了LoopNode所含的一组ExecutableNodes。LoopNode中的任何ExecutableNode都必须被包括在setupParttestbodyPart中。

当LoopNode开始执行时,其中的InitialNodes立刻变得使能。LoopNode中的ExecutableNode只有在包含它的setupParttest,或bodyPart执行时(如下所述)才能变得使能。当某个部分(setupParttest,或bodyPart)执行时,其中任何没有必须的输入数据和没有来自相同部分源的输入流的ExecutableNode使能并接收一个单一的控制token。然后执行按照通常的Activities语义进行,但提交给一个不在执行态部分的Executable的所有tokens不会立即交付而是处于待定状态,只有包含该目标ExecutableNode的部分还是执行时,目标结点才有可能接受那些处于待定的tokens。

LoopNode的setupPar先执行,它执行结束后,循环的迭代才开始。根据isTestFirst的真假,test部分的执行相应的可能先于或后于bodyPart的执行。如果bodyPart先执行(isTestFirst=false),它总是至少执行一次,此后下面的描述适用于后续的迭代。

test部分具有一个带有类型为Boolean的decider OutputPin的Action。当test部分执行完毕后,如果decider OutputPin为真,那么bodyPart执行,否则,LoopNode的执行结束。

在每一次bodyPart执行后,test部分再一次执行,作为循环的下一次迭代。

LoopNode也可以定义一组loopVariable OutputPins,用于在每一次循环迭代时储存中间值。为了使这些值能够用于循环迭代中的testbodyPart,这些OutputPins可以有流出的ActivityEdges。如果LoopNode有loopVariable OutputPins,那么它也必须有一组匹配的loopVariableInput InputPins,bodyOutput OutputPins(由bodyPart中的Action所拥有),和result OutputPins。

当LoopNode开始执行时,loopVariableInput InputPins上的tokens会在第一次循环迭代之前被移送到相应的loopVariable OutputPins。在LoopNode的bodyPart每一次执行完毕,loopVariable OutputPins上存留的tokens都会被销毁,由bodyOutput OutputPins上的tokens所替代以用于下一次迭代。一旦test失败,循环结束,最后一次迭代的bodyOutput OutputPins上的tokens被移送到result OutputPins,用于提交给流出的边。

除了上面介绍的,LoopNode可能不会有其它的InputPins或OutputPins。然而,如果一个一般性的StructuredActivityNode,ActivityEdges可能会穿入或穿出一个LoopNode,除了LoopNode内部的ExecutableNodes的执行由上面介绍的循环迭代语义决定外,其语义与上面介绍的是相同的。特别的,从一个穿入LoopNode的ActivityEdge所接受的token会在当次被消费,不会用于下一次迭代。

results matching ""

    No results matching ""