18 #ifndef RAUL_DOUBLE_BUFFER_HPP
19 #define RAUL_DOUBLE_BUFFER_HPP
21 #include <raul/AtomicInt.hpp>
22 #include <raul/AtomicPtr.hpp>
40 : _state(RAUL_DB_READ_WRITE)
43 _read_val = &_vals[0];
47 : _state(RAUL_DB_READ_WRITE)
51 _read_val = &_vals[0];
54 inline T&
get()
const {
55 return *_read_val.get();
58 inline bool set(T new_val) {
59 if (_state.compare_and_exchange(RAUL_DB_READ_WRITE, RAUL_DB_READ_LOCK)) {
63 _read_val = &_vals[1];
64 _state = RAUL_DB_WRITE_READ;
70 }
else if (_state.compare_and_exchange(RAUL_DB_WRITE_READ, RAUL_DB_LOCK_READ)) {
74 _read_val = &_vals[0];
75 _state = RAUL_DB_READ_WRITE;
88 RAUL_DB_READ_WRITE = 0,
95 AtomicPtr<T> _read_val;
102 #endif // RAUL_DOUBLE_BUFFER_HPP
Double buffer.
Definition: DoubleBuffer.hpp:36