static public int[] GetStartingIndex(this IArrayDefinition array) { var indexes = new int[array.Rank]; array.GetStartingIndex(indexes); return(indexes); }
static public bool IndexesIntersects(this IArrayDefinition first, IArrayDefinition second, out IArrayDefinition intersection) { int[] minimums = first.GetStartingIndex().Zip(second.GetStartingIndex(), Math.Max).ToArray(); int[] maximums = first.GetEndingIndex().Zip(second.GetEndingIndex(), Math.Min).ToArray(); if (Enumerable.Range(0, first.Rank).Any(x => minimums[x] > maximums[x])) { intersection = new IndexRange(); return(false); } intersection = new IndexRange(minimums, maximums.Zip(minimums, (x, y) => x - y + 1).ToArray()); return(true); }
static public void GetResetIndex(this IArrayDefinition array, int[] indexes) { array.GetStartingIndex(indexes); indexes[array.Rank - 1]--; }
static public int[] GetResetIndex(this IArrayDefinition array) { int[] indexes = array.GetStartingIndex(); indexes[array.Rank - 1]--; return(indexes); }