static public int[] GetEndingIndex(this IArrayDefinition array) { var indexes = new int[array.Rank]; array.GetEndingIndex(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); }