/// <summary>
/// Performs the evaluation of the dot operator.
/// </summary>
/// <param name="left">The left value.</param>
/// <param name="right">The right value.</param>
/// <returns>The result of the operation.</returns>
public override Value Perform(Value left, Value right)
{
if (left is NumericValue == false)
{
throw new YAMPOperationInvalidException(Op, left);
}
if (right is NumericValue == false)
{
throw new YAMPOperationInvalidException(Op, right);
}
if (left is MatrixValue && right is MatrixValue)
{
var l = (MatrixValue)left;
var r = (MatrixValue)right;
return(Dot(l, r));
}
else if (left is MatrixValue && right is ScalarValue)
{
var l = (MatrixValue)left;
var r = (ScalarValue)right;
return(Dot(l, r));
}
else if (left is ScalarValue && right is MatrixValue)
{
var l = (ScalarValue)left;
var r = (MatrixValue)right;
return(Dot(l, r));
}
return(_top.Perform(left, right));
}