void CopySubMatrixToUnchecked(DiagonalMatrixStorage <T> target, int sourceRowIndex, int targetRowIndex, int rowCount, int sourceColumnIndex, int targetColumnIndex, int columnCount) { if (sourceRowIndex - sourceColumnIndex != targetRowIndex - targetColumnIndex) { if (Data.Any(x => !Zero.Equals(x))) { throw new NotSupportedException(); } target.Clear(targetRowIndex, rowCount, targetColumnIndex, columnCount); return; } var beginInclusive = Math.Max(sourceRowIndex, sourceColumnIndex); var endExclusive = Math.Min(sourceRowIndex + rowCount, sourceColumnIndex + columnCount); if (endExclusive > beginInclusive) { var beginTarget = Math.Max(targetRowIndex, targetColumnIndex); Array.Copy(Data, beginInclusive, target.Data, beginTarget, endExclusive - beginInclusive); } }
void CopyToUnchecked(DiagonalMatrixStorage <T> target) { //Buffer.BlockCopy(Data, 0, target.Data, 0, Data.Length * System.Runtime.InteropServices.Marshal.SizeOf(typeof(T))); Array.Copy(Data, 0, target.Data, 0, Data.Length); }