11module CircularArrayBuffers
22
3+ using Adapt
4+
35export CircularArrayBuffer, CircularVectorBuffer, capacity, isfull
46
57"""
@@ -8,14 +10,14 @@ export CircularArrayBuffer, CircularVectorBuffer, capacity, isfull
810`CircularArrayBuffer` uses a `N`-dimension `Array` of size `sz` to serve as a buffer for
911`N-1`-dimension `Array`s of the same size.
1012"""
11- mutable struct CircularArrayBuffer{T,N} <: AbstractArray{T,N}
12- buffer:: Array{T,N}
13+ mutable struct CircularArrayBuffer{T,N,S <: AbstractArray{T,N} } <: AbstractArray{T,N}
14+ buffer:: S
1315 first:: Int
1416 nframes:: Int
1517 step_size:: Int
1618end
1719
18- const CircularVectorBuffer{T} = CircularArrayBuffer{T,1 }
20+ const CircularVectorBuffer{T,S } = CircularArrayBuffer{T,1 ,S }
1921
2022CircularVectorBuffer {T} (n:: Integer ) where {T} = CircularArrayBuffer {T} (n)
2123
@@ -28,6 +30,9 @@ function CircularArrayBuffer(A::AbstractArray{T,N}) where {T,N}
2830 CircularArrayBuffer (A, 1 , size (A, N), N == 1 ? 1 : * (size (A)[1 : end - 1 ]. .. ))
2931end
3032
33+ Adapt. adapt_structure (to, cb:: CircularArrayBuffer ) =
34+ CircularArrayBuffer (adapt (to, cb. buffer), cb. first, cb. nframes, cb. step_size)
35+
3136Base. IndexStyle (:: CircularArrayBuffer ) = IndexLinear ()
3237
3338Base. size (cb:: CircularArrayBuffer{T,N} , i:: Integer ) where {T,N} = i == N ? cb. nframes : size (cb. buffer, i)
0 commit comments