This is a composite actor that can execute the contained model
completely, as if it were a top-level model, on each firing.
This can be used to define an actor whose firing behavior
is given by a complete execution of a submodel.
<p>
An instance of this actor can have ports added to it. If it has
input ports, then on each firing, before executing the referenced
model, this actor will read an input token from the input port, if
there is one, and use it to set the value of a top-level parameter
in the contained model that has the same name as the port, if there
is one. The simplest way to ensure that there is a matching parameter
is to use a PortParameter for inputs. However, this actor will work
also for ordinary ports. In this case, if this actor has a
parameter with the same name as the port, and it is an instance
of Variable (or its derived class Parameter), then the token
read at the input is moved into it using its setToken() method.
Otherwise, if it is an instance of Settable, then a string representation
of the token is copied using the setExpression() method.
Input ports should not be multiports, and if they are, then
all but the first channel will be ignored.
<p>
If this actor has output ports and the contained model is executed,
then upon completion of that execution, if this actor has parameters
whose names match those of the output ports, then the final value of
those parameters is sent to the output ports. If such a parameter is an
instance of Variable (or its derived class Parameter), then its
contained token is sent to the output token. Otherwise, if it is an
instance of Settable, then a string token is produced on the output
with its value equal to that returned by getExpression() of the
Settable. Output ports should not be multiports. If they are,
then all but the first channel will be ignored.
A typical use of this actor will use the SetVariable actor
inside to define the value of the output port.
<p>
In preinitialize(), type constraints are set up so that input
and output ports with (name) matching parameters are constrained
to have compatible types. Note that if the ports or parameters
are changed during execution, then it will be necessary to set
up matching type constraints by hand. Since this isn't possible
to do from Vergil, the ports and parameters of this actor
should not be changed using Vergil during execution.
<p>
This actor also overrides the requestChange() method and the
executeChangeRequests() method to execute the given change. It does not
delegate the change request to the container, but executes the request
immediately or records it, depending on whether setDeferringChangeRequests()
has been called with a true argument.
Edward A. Lee, Yang Zhao, Elaine Cheong
$Id: RunCompositeActor.java 70402 2014-10-23 00:52:20Z cxh $
Ptolemy II 4.0
Yellow (eal)
Red (eal)
Indicator to run the contained model a limited number of times.
If this parameter has a value greater than zero, then after
executing the inside model the specified number of times,
<a href="../../../../ptolemy/actor/lib/hoc/RunCompositeActor.html#postfire">postfire()</a> will return false. This is an int that
defaults to 0, which means that there is no limit.