Skip to content

Commit 3776487

Browse files
committed
fix #12
1 parent cf91dd6 commit 3776487

2 files changed

Lines changed: 26 additions & 5 deletions

File tree

src/CircularArrayBuffers.jl

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,25 @@ Base.size(cb::CircularArrayBuffer{T,N}, i::Integer) where {T,N} = i == N ? cb.nf
4747
Base.size(cb::CircularArrayBuffer{T,N}) where {T,N} = ntuple(i -> size(cb, i), N)
4848
Base.getindex(cb::CircularArrayBuffer{T,N}, i::Int) where {T,N} = getindex(cb.buffer, _buffer_index(cb, i))
4949
Base.getindex(cb::CircularArrayBuffer{T,N}, I...) where {T,N} = getindex(cb.buffer, Base.front(I)..., _buffer_frame(cb, Base.last(I)))
50+
51+
# !!!
52+
# strange, but we need this function to show `CircularVectorBuffer` correctly
53+
# `Base.print_array` will try to use `isassigned(cb, i, j)` to print elements
54+
# And, `X::AbstractVector[2, 1]` is valid !!!
55+
# without this line
56+
# ```julia
57+
# julia> cb = CircularArrayBuffer([1., 2.])
58+
# CircularVectorBuffer(::Vector{Float64}) with eltype Float64:
59+
# 1.0
60+
# 2.0
61+
62+
# julia> push!(cb, 3)
63+
# CircularVectorBuffer(::Vector{Float64}) with eltype Float64:
64+
# #undef
65+
# #undef
66+
# ```
67+
Base.getindex(cb::CircularVectorBuffer, i, j) = getindex(cb.buffer, _buffer_frame(cb, i), j)
68+
5069
Base.setindex!(cb::CircularArrayBuffer{T,N}, v, i::Int) where {T,N} = setindex!(cb.buffer, v, _buffer_index(cb, i))
5170
Base.setindex!(cb::CircularArrayBuffer{T,N}, v, I...) where {T,N} = setindex!(cb.buffer, v, Base.front(I)..., _buffer_frame(cb, Base.last(I)))
5271

@@ -92,11 +111,7 @@ function Base.push!(cb::CircularArrayBuffer{T,N}, data) where {T,N}
92111
end
93112
if N == 1
94113
i = _buffer_frame(cb, cb.nframes)
95-
if ndims(data) == 0
96-
cb.buffer[i:i] .= data[]
97-
else
98-
cb.buffer[i:i] .= data
99-
end
114+
cb.buffer[i:i] .= data
100115
else
101116
cb.buffer[ntuple(_ -> (:), N - 1)..., _buffer_frame(cb, cb.nframes)] .= data
102117
end

test/runtests.jl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,12 @@ CUDA.allowscalar(false)
1616
@test b[1] == 0
1717
end
1818

19+
@testset "1D Symbol" begin
20+
b = CircularArrayBuffer([:a, :b])
21+
push!(b, :c)
22+
@test b == [:b, :c]
23+
end
24+
1925
@testset "1D Int" begin
2026
b = CircularArrayBuffer{Int}(3)
2127

0 commit comments

Comments
 (0)