| | |
| | | #ifndef SHM_QUEUE_JE0OEUP3 |
| | | #define SHM_QUEUE_JE0OEUP3 |
| | | |
| | | #include "robust.h" |
| | | #include "shm.h" |
| | | #include <atomic> |
| | | #include <boost/circular_buffer.hpp> |
| | | #include <chrono> |
| | | |
| | | namespace bhome_shm |
| | | { |
| | | |
| | | template <class D> |
| | | using Circular = robust::CircularBuffer<D, Allocator<D>>; |
| | | using Circular = boost::circular_buffer<D, Allocator<D>>; |
| | | // using Circular = robust::CircularBuffer<D, Allocator<D>>; |
| | | |
| | | template <class D> |
| | | class SharedQueue |
| | |
| | | } while (steady_clock::now() < end_time); |
| | | return false; |
| | | } |
| | | bool TryRead(D &d) { return queue_.pop_front(d); } |
| | | bool TryWrite(const D &d) { return queue_.push_back(d); } |
| | | bool TryRead(D &d) |
| | | { |
| | | if (!queue_.empty()) { |
| | | d = queue_.front(); |
| | | queue_.pop_front(); |
| | | return true; |
| | | } else { |
| | | return false; |
| | | } |
| | | } |
| | | bool TryWrite(const D &d) |
| | | { |
| | | if (!queue_.full()) { |
| | | queue_.push_back(d); |
| | | return true; |
| | | } else { |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | private: |
| | | Circular<D> queue_; |