protected override void DoAdd(Matrix<float> other, Matrix<float> result)
{
// dense + dense = dense
var denseOther = other.Storage as DenseColumnMajorMatrixStorage<float>;
var denseResult = result.Storage as DenseColumnMajorMatrixStorage<float>;
if (denseOther != null && denseResult != null)
{
Control.LinearAlgebraProvider.AddArrays(_values, denseOther.Data, denseResult.Data);
return;
}
// dense + diagonal = any
var diagonalOther = other.Storage as DiagonalMatrixStorage<float>;
if (diagonalOther != null)
{
Storage.CopyToUnchecked(result.Storage);
var diagonal = diagonalOther.Data;
for (int i = 0; i < diagonal.Length; i++)
{
result.At(i, i, result.At(i, i) + diagonal[i]);
}
return;
}
base.DoAdd(other, result);
}