Namespace time_series¶
-
namespace
time_series
Typedefs
-
typedef long int
Index
-
typedef long double
Timestamp
Functions
-
void
clear_memory
(std::string segment_id) Wipe out the corresponding shared memory.
Useful if no instances of MultiprocessTimeSeries cleared the memory on destruction. Reusing the segment id of a non-wiped shared memory may result in the newly created instance to hang.
-
template<typename
T
>
voidcreate_multiprocesses_python_bindings
(pybind11::module &m, const std::string &classname) adds to the python module m a class called TimeSeries which is of typedef time_series::MultiprocessTimeSeries<T>
-
template<typename
T
>
voidcreate_python_bindings
(pybind11::module &m, const std::string &classname) adds to the python module m a class called TimeSeries which is of typedef time_series::TimeSeries<T>
Variables
-
const Index
EMPTY
= -1
-
template<typename
T
= int>
classMultiprocessTimeSeries
: public internal::TimeSeriesBase<internal::MultiProcesses, T> - #include <multiprocess_time_series.hpp>
Multiprocess Time Series.
Several instances hosted by different processes, if pointing to the same shared memory segment (as specified by the segment_id), may read/write from the same underlying time series.
Public Functions
-
MultiprocessTimeSeries
(std::string segment_id, size_t max_length, bool leader = true, Index start_timeindex = 0) create a new instance pointing to the specified shared memory segment
- Parameters
segment_id
: the id of the segment to point tomax_length
: max number of elements in the time seriesleader
: if true, the shared memory segment will initialize the shared time series, and wiped the related shared memory on destruction. Instantiating a first MultiprocessTimeSeries with leader set to false will result in undefined behavior. When the leader instance is destroyed, other instances are pointing to the shared segment may crash or hang.
-
MultiprocessTimeSeries
(MultiprocessTimeSeries<T> &&other) noexcept
-
std::string
get_raw
(const Index &timeindex) similar to the random access operator, but does not deserialized the accessed element.
If the element is of a fundamental type (or an array of), an std::logic_error is thrown.
Public Static Functions
-
size_t
get_max_length
(const std::string &segment_id) returns the max length used by a leading MultiprocessTimeSeries of the corresponding segment_id
-
Index
get_start_timeindex
(const std::string &segment_id) returns the start index used by a leading MultiprocessTimeSeries of the corresponding segment_id
-
MultiprocessTimeSeries<T>
create_leader
(const std::string &segment_id, size_t max_length, Index start_timeindex = 0) returns a leader instance of MultiprocessTimeSeries<T>
- Parameters
segment_id
: the id of the segment to point tomax_length
: max number of elements in the time series
-
std::shared_ptr<MultiprocessTimeSeries<T>>
create_leader_ptr
(const std::string &segment_id, size_t max_length, Index start_timeindex = 0) same as create_leader but returning a shared_ptr.
-
MultiprocessTimeSeries<T>
create_follower
(const std::string &segment_id) returns a follower instance of MultiprocessTimeSeries<T>.
An follower instance should be created only if a leader instance has been created first. A std::runtime_error will be thrown otherwise.
- Parameters
segment_id
: the id of the segment to point to
-
std::shared_ptr<MultiprocessTimeSeries<T>>
create_follower_ptr
(const std::string &segment_id) same as create_follower but returning a shared_ptr.
-
-
template<typename
T
= int>
classTimeSeries
: public internal::TimeSeriesBase<internal::SingleProcess, T> - #include <time_series.hpp>
Threadsafe time series.
Public Functions
-
TimeSeries
(size_t max_length, Index start_timeindex = 0, bool throw_on_sigint = true)
-
-
template<typename
T
>
classTimeSeriesInterface
- #include <interface.hpp>
Interface for time series.
A time_series implements \( X_{{oldest}:{newest}} \) which can safely be accessed from either multiple threads or multiple processes.
this object has the following properties:
an oldest timeindex \( oldest\),
a newest timeindex \( newest \),
a value \( X_i \) for each \( i \in \{oldest, oldest + 1 , ..., newest\} \),
a length \(length\)
and a maximum length \(maxlength\)
Public Functions
-
~TimeSeriesInterface
()
-
Index
newest_timeindex
(bool wait = true) const = 0 returns \( newest \) index. If argument wait is true, waits if the time_series is empty. If argument wait is false and the time series is empty, returns time_series::EMPTY immediately.
-
Index
count_appended_elements
() const = 0 returns the number of element that has been contained in the queue, i.e. the number of elements that have been added from the start.
-
Index
oldest_timeindex
(bool wait = true) const = 0 returns \( oldest \). waits if the time_series is empty. If argument wait is false and the time series is empty, returns time_series::EMPTY immediately.
-
T
newest_element
() const = 0 returns \( X_{newest} \). waits if the time_series is empty.
-
T
operator[]
(const Index &timeindex) const = 0 returns \( X_{timeindex} \). waits if the time_series is empty or if \(timeindex > newest \).
-
Timestamp
timestamp_ms
(const Index &timeindex) const = 0 returns the time in miliseconds when \( X_{timeindex} \) was appended. Waits if the time_series is empty or if \(timeindex > newest \).
-
Timestamp
timestamp_s
(const Index &timeindex) const = 0 returns the time in seconds when \( X_{timeindex} \) was appended. Waits if the time_series is empty or if \(timeindex > newest \).
-
bool
wait_for_timeindex
(const Index &timeindex, const double &max_duration_s = std::numeric_limits<double>::quiet_NaN()) const = 0 Wait until the defined time index is reached. If the input time is below the oldest time index that have been registered read an exception is return.
-
std::size_t
length
() const = 0 returns the length of the time_series, i.e. \(0\) if it is empty, otherwise \(newest - oldest +1 \).
-
std::size_t
max_length
() const = 0 returns the maximum length of the time serie.
- Return
std::size_t
-
bool
has_changed_since_tag
() const = 0 returns boolean indicating whether new elements have been appended since the last time the tag() function was called.
-
void
tag
(const Index &timeindex) = 0 tags the current time_series, can later be used to check whether new elements have been added
-
Index
tagged_timeindex
() const = 0 returns the index at which the time series has been tagged. Returns the newest timeindex if the time series has never been tagged.
-
void
append
(const T &element) = 0 appends a new element to the time_series, e.g. we go from \( X_{1:10} \) to \( X_{1:11} \) (where \( X_{11}=\) element). if the time_series length is already equal to its max_length, then the oldest element is discarded, e.g. for a max_length = 10 we would go from \( X_{1:10} \) to \( X_{2:11} \).
-
bool
is_empty
() const = 0 returns true if no element has ever been appended to the time series.
-
namespace
internal
Functions
-
const std::string shm_indexes ("_indexes")
-
const std::string shm_elements ("_elements")
-
const std::string shm_timestamps ("_timestamps")
-
const std::string shm_mutex ("_mutex")
-
const std::string shm_condition_variable ("_condition_variable")
-
template<typename
TS
>
void__create_python_bindings
(pybind11::module &m, const std::string &classname)¶
-
template<typename
P
, typenameT
>
void_create_python_bindings
(pybind11::module &m, const std::string &classname)¶
-
-
typedef long int