Introduction

During running a simulation, one of the most important but annoying part is recording and processing the changing values of state. This package provides "recorded" types, changes of which will be recorded automatically.

Installation

This is a registered package, it can be installed with the add command in the Pkg REPL:

pkg> add RecordedArrays

Quick Start

julia> using RecordedArrays # load this package
julia> c = ContinuousClock(3); # define a clock
julia> v = recorded(DynamicEntry, c, [0, 1]) # create a recorded array with the clock2-element recorded(::Vector{Int64}): 0 1
julia> v + v # math operations work as normal array2-element Vector{Int64}: 0 2
julia> v .* v # broadcast works as normal array as well2-element Vector{Int64}: 0 1
julia> increase!(c, 1) # when time goes and array changes, increase the define clock firstly1
julia> v[1] += 1 # change array's element1
julia> increase!(c, 1) # when time goes and array changes, increase the define clock firstly2
julia> push!(v, 1) # push a new element3-element recorded(::Vector{Int64}): 1 1 1
julia> es = getentries(v) # view recorded changes3-element Vector{DynamicEntry{Int64, Int64}}: DynamicEntry{Int64, Int64}([0, 1], [0, 1]) DynamicEntry{Int64, Int64}([1], [0]) DynamicEntry{Int64, Int64}([1], [2])
julia> es[1] # the changes of the first element of `v`, which changed to 1 at `t=1`DynamicEntry{Int64, Int64} with timestamps: 0 1
julia> gettime(es[1], 0:2) # get the value of the first element at time 0, 1 and 23-element Vector{Int64}: 0 1 1
julia> es[3] # the changes of the third element of `v`, which was pushed at `t=2`DynamicEntry{Int64, Int64} with timestamps: 2
julia> gettime(es[3], 0:2) # get the value of the first element at time 0, 1 and 23-element Vector{Int64}: 0 0 1