/** UpSample
This actor upsamples an input stream by an integer factor by inserting
tokens with value zero. The upsample factor is given by the
*factor* parameter. On each firing, this actor reads one
token from the input produces *factor* tokens on the output
port. All but one of these is a zero-valued token of the same type
as the input. The remaining one is the token read from the input.
The position of this remaining one is determined by the *phase*
parameter. This parameter has a value between 0 and *factor*-1.
If it is 0, then the input token is the last output token.
If it is *factor*-1, then it is the first output, followed
by zeros. Thus, if this actor is followed by the DownSample
actor with the same *factor* and *phase*, the combination
has no effect.
By default, *factor* is 2, and *phase* is the expression
"factor-1". This means that by default, the input token that is read
is the first one produced at the output.

This actor is data polymorphic. It can accept any token
type on the input that supports the zero() method,
and it sends output tokens of that type.
@author JE
*/
actor UpSample [T]
(Integer factor = 2,
Integer phase = factor-1)
T input ==> T output:
action [a] ==> [b] repeat factor
var
List[T] b = [ if i = phase then a else zero(a) end :
for Integer i in Integers(1, factor)]
endaction
endactor