Skip to content

Commit d4a7af4

Browse files
committed
Define elsize to make pointer more reliable.
1 parent bfd1c05 commit d4a7af4

File tree

4 files changed

+16
-4
lines changed

4 files changed

+16
-4
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name = "StaticArrays"
22
uuid = "90137ffa-7385-5640-81b9-e52037218182"
3-
version = "1.0.1"
3+
version = "1.0.2"
44

55
[deps]
66
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"

src/MArray.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,3 +278,5 @@ function Base.view(
278278
view_from_invoke = invoke(view, Tuple{AbstractArray, typeof(indices).parameters...}, a, indices...)
279279
return SizedArray{new_size}(view_from_invoke)
280280
end
281+
282+
Base.elsize(::Type{<:MArray{S,T}}) where {S,T} = sizeof(eltype(T))

src/SizedArray.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,8 @@ end
126126

127127
Base.parent(sa::SizedArray) = sa.data
128128

129-
Base.pointer(sa::SizedArray) = pointer(sa.data)
129+
Base.unsafe_convert(::Type{Ptr{T}}, sa::SizedArray) where {T} = Base.unsafe_convert(Ptr{T}, sa.data)
130+
Base.elsize(::Type{SizedArray{S,T,M,N,A}}) where {S,T,M,N,A} = Base.elsize(A)
130131

131132
const SizedVector{S,T} = SizedArray{Tuple{S},T,1,1}
132133

test/SizedArray.jl

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,17 @@
9696
@test parent(sa) === sa.data
9797

9898
# pointer
99-
@test pointer(sa) === pointer(sa.data)
100-
99+
@testset "pointer" begin
100+
@test pointer(sa) === pointer(sa.data)
101+
A = MMatrix{32,3,Float64}(undef);
102+
av1 = view(A, 1, :);
103+
av2 = view(A, :, 1);
104+
@test pointer(A) == pointer(av1) == pointer(av2)
105+
@test pointer(A, LinearIndices(A)[1,2]) == pointer(av1, 2)
106+
@test pointer(A, LinearIndices(A)[2,1]) == pointer(av2, 2)
107+
@test pointer(A, LinearIndices(A)[4,3]) == pointer(view(A, :, 3), 4) == pointer(view(A, 4, :), 3)
108+
end
109+
101110
@testset "vec" begin
102111
sa2 = SizedArray{Tuple{2, 2}, Int}([1, 2, 3, 4])
103112
@test (@inferred vec(sa2)) isa SizedVector{4, Int}

0 commit comments

Comments
 (0)