module PreVectors export PreVector, push!, reset!, iterate import Base: push!, iterate mutable struct PreVector{T} last_ind::UInt64 v::Vector{T} PreVector{T}(n_particles) where {T} = new{T}(UInt64(0), Vector{T}(undef, n_particles)) end function push!(pv::PreVector{T}, x::T) where {T} pv.last_ind += 1 pv.v[pv.last_ind] = x return nothing end function reset!(pv::PreVector) pv.last_ind = 0 return nothing end function iterate(pv::PreVector, state::UInt64=UInt64(1)) if state > pv.last_ind return nothing else return (pv.v[state], state + 1) end end end # module