1#ifndef LIPH_DOUBLE_BUFFER_H_
2#define LIPH_DOUBLE_BUFFER_H_
12 template <
class... Args>
13 double_buffer(Args&&...args) : v0_(std::forward<Args>(args)...), v1_(std::forward<Args>(args)...) {}
16 const T&
get()
const {
return *pv_[idx_]; }
20 void swap() { idx_ = 1 - idx_; };
25 T *pv_[2]{&v0_, &v1_};
26 std::atomic<int> idx_{0};
34 std::shared_ptr<T>
get()
const {
return std::atomic_load(&v0_); }
36 template <
class... Args>
38 v1_ = std::make_shared<T>(std::forward<Args>(args)...);
42 void swap() { std::atomic_store(&v0_, v1_); }
45 std::shared_ptr<T> v0_;
46 std::shared_ptr<T> v1_;
Definition: double_buffer.h:32
std::shared_ptr< T > get() const
Definition: double_buffer.h:34
std::shared_ptr< T > get_free(Args &&...args)
Definition: double_buffer.h:37
void swap()
Definition: double_buffer.h:42
Definition: double_buffer.h:10
const T & get() const
Reader.
Definition: double_buffer.h:16
T & get_free() const
Writer.
Definition: double_buffer.h:18
void swap()
Writer.
Definition: double_buffer.h:20
double_buffer(Args &&...args)
Definition: double_buffer.h:13
Definition: algorithm.h:10