public void PushMatrix(int[,] m) { this.size = Convert.ToInt32(Math.Sqrt(m.Length)); List <MatrixItem> toAdd = new List <MatrixItem>(); for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { if (m[i, j] != 0) { MatrixItem matrixItem = new MatrixItem() { i = i, j = j, k = m[i, j] }; toAdd.Add(matrixItem); } } } FullData = toAdd.ToArray(); if (UsePointers) { for (int i = 0; i < FullData.Length; i++) { MatrixItem matrixItem1 = FullData[i]; for (int k = i + 1; k < FullData.Length; k++) { MatrixItem matrixItem2 = FullData[k]; if (matrixItem1.j == matrixItem2.j) { unsafe { fixed(MatrixItem *ptr = FullData) { FullData[i] = new MatrixItem() { i = matrixItem1.i, j = matrixItem1.j, k = matrixItem1.k, p = ptr + k }; } } } } } } Debug.WriteLine(FullData.Length); }
public override int ReadFromMatrix(int j, int i) { if (i >= FullData.Length || j >= FullData.Length) { return(0); } sw.Start(); int d = 2 * j + i - 2; Debug.WriteLine("reading " + d); if (UsePointers) { unsafe { fixed(MatrixItem *ptr = FullData) { for (int n = 0; n < FullData.Length; n++) { MatrixItem mi = *(ptr + n); if (mi.i == i && mi.j == j) { sw.Stop(); return(mi.k); } } } } } else { foreach (MatrixItem mi in FullData) { if (mi.i == i && mi.j == j) { sw.Stop(); return(mi.k); } } } sw.Stop(); return(0); }