Template Class RealtimeBoxBase

Class Documentation

template<class T, typename mutex_type = std::mutex>
class RealtimeBoxBase

A Box that ensures thread safe access to the boxed contents. Access is best effort. If it can not lock it will return.

NOTE about pointers: You can use pointers with this box but the access will be different. Only use the get/set methods that take function pointer for accessing the internal value.

Public Types

using mutex_t = mutex_type
using type = T

Public Functions

inline explicit constexpr RealtimeBoxBase(const T &init = T{})
inline explicit constexpr RealtimeBoxBase(const T &&init)
inline constexpr RealtimeBoxBase(const RealtimeBoxBase &o)
inline constexpr RealtimeBoxBase &operator=(const RealtimeBoxBase &o)
inline constexpr RealtimeBoxBase(RealtimeBoxBase &&o)
template<typename U = T>
inline constexpr RealtimeBoxBase(const std::initializer_list<U> &init, std::enable_if_t<std::is_constructible_v<U, std::initializer_list<U>>>)
inline constexpr RealtimeBoxBase &operator=(RealtimeBoxBase &&o)
template<typename U = T>
inline std::enable_if_t<!is_ptr_or_smart_ptr<U>, bool> try_set(const T &value)

set a new content with best effort

Note

disabled for pointer types

Returns:

false if mutex could not be locked

inline bool try_set(const std::function<void(T&)> &func)

access the content readable with best effort

Note

only safe way to access pointer type content (rw)

Returns:

false if the mutex could not be locked

template<typename U = T>
inline std::enable_if_t<!is_ptr_or_smart_ptr<U>, bool> trySet(const T &value)

set a new content with best effort

Deprecated:

Use try_set(const T & value) instead!

Note

disabled for pointer types

Returns:

false if mutex could not be locked

template<typename U = T>
inline bool trySet(const std::function<void(T&)> &func)

access the content readable with best effort

Deprecated:

Use try_set(const std::function<void(T &)> & func) instead!

Note

only safe way to access pointer type content (rw)

Returns:

false if the mutex could not be locked

template<typename U = T>
inline std::enable_if_t<!is_ptr_or_smart_ptr<U>, std::optional<U>> try_get() const

get the content with best effort

Returns:

std::nullopt if content could not be access, otherwise the content is returned

inline bool try_get(const std::function<void(const T&)> &func)

access the content (r) with best effort

Note

only safe way to access pointer type content (r)

Returns:

false if the mutex could not be locked

template<typename U = T>
inline std::enable_if_t<!is_ptr_or_smart_ptr<U>, std::optional<U>> tryGet() const

get the content with best effort

Deprecated:

Use try_get() instead!

Returns:

std::nullopt if content could not be access, otherwise the content is returned

template<typename U = T>
inline bool tryGet(const std::function<void(const T&)> &func)

access the content (r) with best effort

Deprecated:

Use try_get(const std::function<void(const T &)> & func) instead!

Note

only safe way to access pointer type content (r)

Returns:

false if the mutex could not be locked

template<typename U = T>
inline std::enable_if_t<!is_ptr_or_smart_ptr<U>, void> set(const T &value)

Wait until the mutex can be locked and set the content (RealtimeBox behavior)

Note

disabled for pointer types

Note

same signature as in the existing RealtimeBox<T>

template<typename U = T>
inline std::enable_if_t<is_ptr_or_smart_ptr<U>, void> set(const T &value)

Wait until the mutex can be locked and set the content (RealtimeBox behavior)

Deprecated:

Use set(const std::function<void(T &)> & func) instead!

Note

same signature as in the existing RealtimeBox<T>

Note

Not the safest way to access pointer type content (rw)

inline void set(const std::function<void(T&)> &func)

wait until the mutex could be locked and access the content (rw)

template<typename U = T>
inline std::enable_if_t<!is_ptr_or_smart_ptr<U>, U> get() const

Wait until the mutex could be locked and get the content (RealtimeBox behaviour)

Returns:

copy of the value

template<typename U = T>
inline std::enable_if_t<!is_ptr_or_smart_ptr<U>, void> get(T &in) const

Wait until the mutex could be locked and get the content (r)

Note

same signature as in the existing RealtimeBox<T>

template<typename U = T>
inline std::enable_if_t<is_ptr_or_smart_ptr<U>, void> get(T &in) const

Wait until the mutex could be locked and get the content (r)

Deprecated:

Use get(const std::function<void(const T &)> & func) instead!

Note

same signature as in the existing RealtimeBox<T>

Note

Not the safest way to access pointer type content (r)

inline void get(const std::function<void(const T&)> &func)

Wait until the mutex could be locked and access the content (r)

Note

only safe way to access pointer type content (r)

Note

same signature as in the existing RealtimeBox<T>

template<typename U = T>
inline std::enable_if_t<!is_ptr_or_smart_ptr<U>, void> operator=(const T &value)

provide a custom assignment operator for easier usage

Note

only to be used from non-RT!

template<typename U = T, typename = typename std::enable_if_t<!is_ptr_or_smart_ptr<U>>>
inline operator T() const

provide a custom conversion operator

Note

Can only be used from non-RT!

template<typename U = T, typename = typename std::enable_if_t<!is_ptr_or_smart_ptr<U>>>
inline operator std::optional<T>() const

provide a custom conversion operator

Note

Can be used from non-RT and RT contexts

inline const mutex_t &get_mutex() const
inline mutex_t &get_mutex()
inline mutex_t &getMutex()
inline const mutex_t &getMutex() const