31 #ifndef ETL_BUFFER_DESCRIPTORS_INCLUDED
32 #define ETL_BUFFER_DESCRIPTORS_INCLUDED
38 #include "static_assert.h"
49 template <
typename TBuffer,
size_t BUFFER_SIZE_,
size_t N_BUFFERS_,
typename TFlag =
bool>
54 struct descriptor_item;
58 typedef TBuffer value_type;
59 typedef value_type* pointer;
60 typedef size_t size_type;
61 typedef TFlag flag_type;
63 static ETL_CONSTANT size_type N_BUFFERS = N_BUFFERS_;
64 static ETL_CONSTANT size_type BUFFER_SIZE = BUFFER_SIZE_;
75 static ETL_CONSTANT
const size_type MAX_SIZE = buffer_descriptors::BUFFER_SIZE;
79 : pdesc_item(ETL_NULLPTR)
85 : pdesc_item(other.pdesc_item)
92 pdesc_item = other.pdesc_item;
99 assert(pdesc_item !=
nullptr);
100 return pdesc_item->pbuffer;
105 constexpr size_type max_size()
const
112 bool is_allocated()
const
114 return bool(pdesc_item->in_use);
119 bool is_released()
const
121 return bool(!pdesc_item->in_use);
126 bool is_valid()
const
128 return pdesc_item != ETL_NULLPTR;
134 pdesc_item->in_use =
false;
141 : pdesc_item(pdesc_item_)
148 pdesc_item->in_use =
true;;
152 descriptor_item* pdesc_item;
185 size_t get_count()
const
203 for (
size_t i = 0U; i < N_BUFFERS; ++i)
205 descriptor_items[i].pbuffer = pbuffers_ + (i * BUFFER_SIZE);
206 descriptor_items[i].in_use =
false;
211 void set_callback(
const callback_type& callback_)
213 callback = callback_;
219 for (
size_t i = 0U; i < N_BUFFERS; ++i)
221 descriptor_items[i].in_use =
false;
229 bool is_valid()
const
231 return callback.is_valid();
235 void notify(notification n)
238 if (callback.is_valid())
246 descriptor allocate()
248 descriptor desc(&descriptor_items[next]);
250 if (desc.is_released())
266 descriptor allocate(value_type fill_)
268 descriptor desc = allocate();
272 etl::fill_n(desc.data(), BUFFER_SIZE, fill_);
281 struct descriptor_item
284 volatile flag_type in_use;
287 callback_type callback;
Describes a buffer.
Definition: buffer_descriptors.h:70
Describes a notification.
Definition: buffer_descriptors.h:159
buffer_descriptors
Definition: buffer_descriptors.h:51
Definition: callback.h:45
Definition: delegate.h:91
void to_first()
Resets the value to the first in the range.
Definition: cyclic_value.h:101
Definition: cyclic_value.h:60
Definition: absolute.h:37