Skip to content

Commit 09757f8

Browse files
committed
Implement Base.empty
1 parent 9c96412 commit 09757f8

File tree

4 files changed

+38
-1
lines changed

4 files changed

+38
-1
lines changed

src/array_of_similar_arrays.jl

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ end
161161
function Base.similar(A::ArrayOfSimilarArrays{T,M,N}, ::Type{<:AbstractArray{U}}, dims::Dims) where {T,M,N,U}
162162
data = A.data
163163
size_inner, size_outer = split_tuple(size(data), Val{M}())
164+
# ToDo: Don't use similar if data is an ElasticArray?
164165
ArrayOfSimilarArrays{T,M,N}(similar(data, U, size_inner..., dims...))
165166
end
166167

@@ -313,6 +314,17 @@ end
313314
# Will need equivalent of resize! that resizes in front of data instead of in back:
314315
# popfirst!(V::ArrayOfSimilarArrays) = ...
315316

317+
function Base.empty(A::VectorOfSimilarArrays{T,M}, ::Type{<:AbstractArray{U}}) where {T,M,U}
318+
data = A.data
319+
size_inner, size_outer = split_tuple(size(data), Val{1}())
320+
empty_size_outer = map(x -> zero(x), size_outer)
321+
322+
# ToDo: Don't use similar if data is an ElasticArray?
323+
VectorOfSimilarArrays{T,M}(similar(data, U, size_inner..., empty_size_outer...))
324+
end
325+
326+
Base.empty(A::VectorOfSimilarArrays{T,M}) where {T,M} = empty(A, Array{T})
327+
316328

317329

318330
const ArrayOfSimilarVectors{

src/vector_of_arrays.jl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,14 @@ function Base.push!(A::VectorOfArrays{T,N}, x::AbstractArray{U,N}) where {T,N,U}
379379
end
380380

381381

382+
function Base.empty(A::VectorOfArrays{T,N}) where {T,N}
383+
empty_data = empty(A.data)
384+
empty_elem_ptr = push!(empty(A.elem_ptr), firstindex(empty_data))
385+
empty_kernel_size = empty(A.kernel_size)
386+
VectorOfArrays(empty_data, empty_elem_ptr, empty_kernel_size, no_consistency_checks)
387+
end
388+
389+
382390
function UnsafeArrays.uview(A::VectorOfArrays)
383391
VectorOfArrays(
384392
uview(A.data),

test/array_of_similar_arrays.jl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,14 @@ using UnsafeArrays
184184
end
185185

186186

187+
@testset "empty" begin
188+
A = [rand(2,3), rand(2,3), rand(2,3)]
189+
B = ArrayOfSimilarArrays(A)
190+
@test typeof(@inferred empty(B)) == typeof(B)
191+
@test empty(A) == empty(B)
192+
end
193+
194+
187195
@testset "examples" begin
188196
A_flat = rand(2,3,4,5,6)
189197
A_nested = nestedview(A_flat, 2)

test/vector_of_arrays.jl

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,12 +104,21 @@ using ArraysOfArrays: full_consistency_checks, append_elemptr!
104104
A = ref_AoA3(Float32, 3);
105105
B = VectorOfArrays(A);
106106

107-
@test typeof(@inferred copy(A)) == typeof(A)
107+
@test typeof(@inferred copy(B)) == typeof(B)
108108
@test copy(A) == A
109109
@test copy(A) == B
110110
end
111111

112112

113+
@testset "empty" begin
114+
A = ref_AoA3(Float32, 3);
115+
B = VectorOfArrays(A);
116+
117+
@test typeof(@inferred empty(B)) == typeof(B)
118+
@test empty(A) == empty(B)
119+
end
120+
121+
113122
@testset "examples" begin
114123
VA = VectorOfArrays{Float64, 2}()
115124

0 commit comments

Comments
 (0)