From 244ac6d0701767405818ecdabb4fdce4f4b26875 Mon Sep 17 00:00:00 2001 From: nhz2 Date: Tue, 14 Jul 2026 02:16:44 -0400 Subject: [PATCH] Implement strided array traits --- src/basic.jl | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/basic.jl b/src/basic.jl index 8a5583a..0a72273 100644 --- a/src/basic.jl +++ b/src/basic.jl @@ -67,9 +67,16 @@ Base.empty(::Type{<:MemoryView{E, M}}) where {E, M} = unsafe_new_memoryview(M, m Base.pointer(x::MemoryView{T}) where {T} = Ptr{T}(pointer(x.ref)) Base.unsafe_convert(::Type{Ptr{T}}, v::MemoryView{T}) where {T} = pointer(v) Base.cconvert(::Type{<:Ptr{T}}, v::MemoryView{T}) where {T} = v.ref -Base.elsize(::Type{<:MemoryView{T}}) where {T} = Base.elsize(Memory{T}) Base.sizeof(x::MemoryView) = Base.elsize(typeof(x)) * length(x) -Base.strides(@nospecialize(::MemoryView)) = (1,) +@static if isdefined(Base, :is_strided) + Base.is_contiguous(::Type{<:MemoryView}) = true + Base.is_ptr_loadable(::Type{<:MemoryView}) = true + Base.is_ptr_storable(::Type{<:MutableMemoryView}) = true +else + # Base fallbacks handle these two methods if is_contiguous = true + Base.elsize(::Type{<:MemoryView{T}}) where {T} = Base.elsize(Memory{T}) + Base.strides(@nospecialize(::MemoryView)) = (1,) +end # For two distinct element types, they can't alias Base.mightalias(@nospecialize(::MemoryView), @nospecialize(::MemoryView)) = false