Skip to content

Commit 76be2e8

Browse files
committed
Allow any backing array type and add Adapt support
1 parent 1eb9387 commit 76be2e8

File tree

2 files changed

+11
-3
lines changed

2 files changed

+11
-3
lines changed

Project.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ uuid = "9de3a189-e0c0-4e15-ba3b-b14b9fb0aec1"
33
authors = ["Jun Tian <tianjun.cpp@gmail.com> and contributors"]
44
version = "0.1.5"
55

6+
[deps]
7+
Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e"
8+
69
[compat]
710
julia = "1"
811

src/CircularArrayBuffers.jl

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
module CircularArrayBuffers
22

3+
using Adapt
4+
35
export 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
1618
end
1719

18-
const CircularVectorBuffer{T} = CircularArrayBuffer{T,1}
20+
const CircularVectorBuffer{T,S} = CircularArrayBuffer{T,1,S}
1921

2022
CircularVectorBuffer{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]...))
2931
end
3032

33+
Adapt.adapt_structure(to, cb::CircularArrayBuffer) =
34+
CircularArrayBuffer(adapt(to, cb.buffer), cb.first, cb.nframes, cb.step_size)
35+
3136
Base.IndexStyle(::CircularArrayBuffer) = IndexLinear()
3237

3338
Base.size(cb::CircularArrayBuffer{T,N}, i::Integer) where {T,N} = i == N ? cb.nframes : size(cb.buffer, i)

0 commit comments

Comments
 (0)