A Synchronous default operator.
<p>When the <i>preferred</i> input has a token, then the output is equal
to that token. If the <i>preferred</i> input is absent, then the output is
equal to the <i>alternate</i> input (whether it is absent or not).
This actor is non-strict, in that can produce an output even if
<i>alternate</i> input is unknown. Thus, it can be used to break
causality loops.
<p>
This actor is inspired by the "default" operator in the synchronous
language SIGNAL, and is similar to the "followed by" operator in Lustre.
But in the context of the Ptolemy II SR domain, its
behavior is deterministic. This is because the Ptolemy II SR domain
has a Lustre or Esterel style master clock, and this actor is given
the opportunity to fire on each tick of that master clock. In SIGNAL,
by contrast, this actor can be used to "upsample" to a higher rate
clock; however, without considerable care, its use in SIGNAL results
in nondeterminism.
<p>This actor is typically used in the SR domain, but
may also be used inside the Continuous domain.</p>
<p>P. Caspi, D. Pilaud, N. Halbwachs, and J. A. Plaice, "LUSTRE: A
Declarative Language for Programming Synchronous Systems,"
Conference Record of the 14th Annual ACM Symp. on Principles of
Programming Languages, Munich, Germany, January, 1987.</p>
<p>A. Benveniste and P. Le Guernic, "Hybrid Dynamical Systems Theory
and the SIGNAL Language," IEEE Tr. on Automatic Control, Vol. 35,
No. 5, pp. 525-546, May 1990.</p>
Edward A. Lee
$Id: Default.java 70401 2014-10-23 00:14:56Z cxh $
Ptolemy II 10.0
Yellow (eal)
Red (cxh)
The preferred input port. If there is a token here, then that
token is produced on the output. Any data type is accepted.
The alternate input port. If there is no token on the preferred
input port, then the output will equal whatever is here (including
absent). Any data type is accepted.
The output port. The type is greater than or equal to the
types of the two input ports.