protected override Evaluator CreateEvaluator(Dictionary<Expression, Evaluator> Cache, int BufferSize, int Resolution)
{
ConstantEvaluator constparam = this.Parameter.GetEvaluator(Cache, BufferSize, Resolution) as ConstantEvaluator;
if (constparam != null)
{
return this.Items[(int)((uint)constparam.Value % (uint)this.Items.Count)].GetEvaluator(Cache, BufferSize, Resolution);
}
BufferedEvaluator[] items = new BufferedEvaluator[this.Items.Count];
Value[] constitems = new Value[this.Items.Count];
bool constseq = true;
for (int t = 0; t < items.Length; t++)
{
Evaluator itemeval = this.Items[t].GetEvaluator(Cache, BufferSize, Resolution);
items[t] = itemeval.GetBuffered(BufferSize);
if (constseq)
{
ConstantEvaluator constitem = itemeval as ConstantEvaluator;
if (constitem != null)
{
constitems[t] = constitem.Value;
}
else
{
constseq = false;
}
}
}
if (constseq)
{
return new SequencerConstantEvaluator(constitems, this.Parameter.GetEvaluator(Cache, BufferSize, Resolution));
}
else
{
return new SequencerEvaluator(items, this.Parameter.GetEvaluator(Cache, BufferSize, Resolution));
}
}