public ArrayView2D <TElem, TDim> SubView(DimTuple2 offset, DimTuple2 extent)
        {
            if (offset.X < 0 || offset.X + extent.X >= Extent.X ||
                offset.Y < 0 || offset.Y + extent.Y >= Extent.Y)
            {
                // throw new IndexOutOfRangeException();
            }

            var linearIdx = offset.X * Stride.X + offset.Y * Stride.Y;
            var data      = Data.GetSubView(linearIdx);

            return(new ArrayView2D <TElem, TDim>(data, extent, Dim));
        }
        public ref TElem this[DimTuple2 idx]
        {
            get
            {
                if (idx.X < 0 || idx.X >= Extent.X ||
                    idx.Y < 0 || idx.Y >= Extent.Y)
                {
                    // throw new IndexOutOfRangeException();
                }

                unsafe
                {
                    var linearIdx = idx.X * Stride.X + idx.Y * Stride.Y;
                    return(ref Data[linearIdx]);
                }
            }
        }
 internal ArrayView2D(ILGPU.ArrayView <TElem> data, DimTuple2 extent, TDim dim)
 {
     Data   = data;
     Extent = extent;
     Dim    = dim;
 }
 public Stride2DGeneral(DimTuple2 stride)
 {
     Stride = stride;
 }