Clearmatics Libff  0.1
C++ library for Finite Fields and Elliptic Curves
concurrent_fifo.hpp
Go to the documentation of this file.
1 
9 #ifndef __LIBFF_COMMON_CONCURRENT_FIFO_HPP__
10 #define __LIBFF_COMMON_CONCURRENT_FIFO_HPP__
11 
12 #include <atomic>
13 #include <stddef.h>
14 
15 namespace libff
16 {
17 
23 template<typename T> class concurrent_fifo_spsc
24 {
25 public:
26  concurrent_fifo_spsc() = delete;
29 
32 
33  size_t capacity() const;
34 
38  T *try_enqueue_begin();
39 
42  T *enqueue_begin_wait();
43 
44  void enqueue_end();
45 
49  const T *try_dequeue_begin();
50 
53  const T *dequeue_begin_wait();
54 
55  void dequeue_end();
56 
57 protected:
58  const size_t _capacity;
59 
60  T *const _buffer;
61 
63  std::atomic<size_t> _producer_num_produced;
64 
66  std::atomic<size_t> _consumer_num_consumed;
67 };
68 
72 template<typename T> class concurrent_buffer_fifo_spsc
73 {
74 public:
75  concurrent_buffer_fifo_spsc() = delete;
78  const concurrent_buffer_fifo_spsc &) = delete;
79 
81  size_t num_buffers, size_t num_entries_per_buffer);
83 
86  T *try_enqueue_begin();
87 
88  T *enqueue_begin_wait();
89 
90  void enqueue_end();
91 
94  const T *try_dequeue_begin();
95 
96  const T *dequeue_begin_wait();
97 
98  void dequeue_end();
99 
100 protected:
101  T *enqueue_next_buffer(T **const buffer_ptr);
102 
104  const size_t _entries_per_buffer;
105  T **const _buffers;
107 };
108 
109 } // namespace libff
110 
112 
113 #endif // __LIBFF_COMMON_CONCURRENT_FIFO_HPP__
libff::concurrent_fifo_spsc::capacity
size_t capacity() const
libff
Definition: ffi.cpp:8
libff::concurrent_buffer_fifo_spsc::concurrent_buffer_fifo_spsc
concurrent_buffer_fifo_spsc()=delete
libff::concurrent_fifo_spsc::~concurrent_fifo_spsc
~concurrent_fifo_spsc()
libff::concurrent_fifo_spsc::concurrent_fifo_spsc
concurrent_fifo_spsc()=delete
libff::concurrent_buffer_fifo_spsc::enqueue_next_buffer
T * enqueue_next_buffer(T **const buffer_ptr)
libff::concurrent_fifo_spsc::_consumer_next_idx
size_t _consumer_next_idx
Definition: concurrent_fifo.hpp:65
libff::concurrent_buffer_fifo_spsc::_queue
concurrent_fifo_spsc< T * > _queue
Definition: concurrent_fifo.hpp:103
libff::concurrent_buffer_fifo_spsc::_next_buffer_idx
size_t _next_buffer_idx
Definition: concurrent_fifo.hpp:106
concurrent_fifo.tcc
libff::concurrent_buffer_fifo_spsc::operator=
concurrent_buffer_fifo_spsc & operator=(const concurrent_buffer_fifo_spsc &)=delete
libff::concurrent_buffer_fifo_spsc::try_dequeue_begin
const T * try_dequeue_begin()
libff::concurrent_fifo_spsc::_producer_num_produced
std::atomic< size_t > _producer_num_produced
Definition: concurrent_fifo.hpp:63
libff::concurrent_fifo_spsc::try_dequeue_begin
const T * try_dequeue_begin()
libff::concurrent_fifo_spsc::_consumer_num_consumed
std::atomic< size_t > _consumer_num_consumed
Definition: concurrent_fifo.hpp:66
libff::concurrent_buffer_fifo_spsc::enqueue_begin_wait
T * enqueue_begin_wait()
libff::concurrent_fifo_spsc::try_enqueue_begin
T * try_enqueue_begin()
libff::concurrent_buffer_fifo_spsc::_buffers
T **const _buffers
Definition: concurrent_fifo.hpp:105
libff::concurrent_fifo_spsc::enqueue_end
void enqueue_end()
libff::concurrent_fifo_spsc::operator=
concurrent_fifo_spsc & operator=(const concurrent_fifo_spsc &)=delete
libff::concurrent_buffer_fifo_spsc
Definition: concurrent_fifo.hpp:72
libff::concurrent_fifo_spsc::dequeue_end
void dequeue_end()
libff::concurrent_buffer_fifo_spsc::dequeue_end
void dequeue_end()
libff::concurrent_buffer_fifo_spsc::try_enqueue_begin
T * try_enqueue_begin()
libff::concurrent_fifo_spsc::dequeue_begin_wait
const T * dequeue_begin_wait()
libff::concurrent_fifo_spsc::enqueue_begin_wait
T * enqueue_begin_wait()
libff::concurrent_buffer_fifo_spsc::enqueue_end
void enqueue_end()
libff::concurrent_fifo_spsc::_producer_next_idx
size_t _producer_next_idx
Definition: concurrent_fifo.hpp:62
libff::concurrent_buffer_fifo_spsc::dequeue_begin_wait
const T * dequeue_begin_wait()
libff::concurrent_fifo_spsc::_capacity
const size_t _capacity
Definition: concurrent_fifo.hpp:58
libff::concurrent_buffer_fifo_spsc::_entries_per_buffer
const size_t _entries_per_buffer
Definition: concurrent_fifo.hpp:104
libff::concurrent_buffer_fifo_spsc::~concurrent_buffer_fifo_spsc
~concurrent_buffer_fifo_spsc()
libff::concurrent_fifo_spsc::_buffer
T *const _buffer
Definition: concurrent_fifo.hpp:60
libff::concurrent_fifo_spsc
Definition: concurrent_fifo.hpp:23