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);
            }
        }
示例#2
0
 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);
 }