carb::container::BufferedObject¶
Defined in carb/container/BufferedObject.h
-
template<typename
T
>
classcarb::container
::
BufferedObject
¶ Lock-Free Asynchronous Buffer Supports only 1 producer, 1 consumer.
BufferedObject is used when you have 1 producer and 1 consumer and both the producer and consumer are operating at different frequencies. The consumer only ever cares to see the latest data available.
Examples:
BufferedObject<int> b; assert(b.front() == 0); b.emplace_back(42); assert(b.front() == 0); b.pop_front(); assert(b.front() == 42);
BufferedObject<uint32_t> b{ in_place, 1U, 2U, 3U }; assert(b.front() == 3U); b.pop_front(); // do nothing, as nothing was pushed assert(b.front() == 3U); b.push_back(42U); assert(b.front() == 3U); b.pop_front(); assert(b.front() == 42U);
Public Functions
-
inline explicit
BufferedObject
()¶ Create an async buffer from an array of 3 items using default ctors.
-
template<typename ...
TArgs
>
inline explicit constexprBufferedObject
(carb::cpp17::in_place_t, TArgs&&... args)¶ Create an async buffer from an array of 3 items.
- Parameters
args – arguments to forward to construct the elements of the buffer
-
inline
~BufferedObject
()¶ Destroy async buffer.
-
template<typename ...
TArgs
>
inline voidemplace_back
(TArgs&&... args)¶ Insert a new item into the container constructed in-place with the given args.
- Parameters
args – arguments to forward to construct newly produced value and move it onto the buffer
-
inline void
push_back
(T &&item)¶ Insert a new item into the container by moving item.
- Parameters
item – item to insert/move
-
inline void
push_back
(T const &item)¶ Insert a new item into the container by copying item.
- Parameters
item – item to copy
-
inline void
pop_front
()¶ Attempt to replace the front element of the container with a newly produced value.
If no new value was pushed/emplaced, this function does nothing.
-
inline explicit