31#ifndef ETL_SPSC_QUEUE_ISR_INCLUDED
32#define ETL_SPSC_QUEUE_ISR_INCLUDED
56 queue_spsc_isr_exception(string_type reason_, string_type file_name_, numeric_type line_number_)
57 :
exception(reason_, file_name_, line_number_)
66 class queue_spsc_isr_empty :
public queue_spsc_isr_exception
70 queue_spsc_isr_empty(string_type file_name_, numeric_type line_number_)
71 : queue_spsc_isr_exception(ETL_ERROR_TEXT(
"queue_spsc_isr:empty", ETL_QUEUE_SPSC_ISR_FILE_ID
"A"), file_name_, line_number_)
76 template <
typename T, const
size_t MEMORY_MODEL = etl::memory_model::MEMORY_MODEL_LARGE>
77 class queue_spsc_isr_base
88 typedef T&& rvalue_reference;
115#if ETL_USING_CPP11 && ETL_NOT_USING_STLPORT && !defined(ETL_QUEUE_ISR_FORCE_CPP03_IMPLEMENTATION)
116 template <
typename... Args>
117 bool emplace_from_isr(Args&&... args)
233 , MAX_SIZE(max_size_)
279#if ETL_USING_CPP11 && ETL_NOT_USING_STLPORT && !defined(ETL_QUEUE_ISR_FORCE_CPP03_IMPLEMENTATION)
286 template <
typename... Args>
331 template <
typename T1>
354 template <
typename T1,
typename T2>
377 template <
typename T1,
typename T2,
typename T3>
400 template <
typename T1,
typename T2,
typename T3,
typename T4>
431#if ETL_USING_CPP11 && ETL_NOT_USING_STLPORT && !defined(ETL_QUEUE_LOCKABLE_FORCE_CPP03_IMPLEMENTATION)
489 if (index == maximum) ETL_UNLIKELY
508#if defined(ETL_POLYMORPHIC_SPSC_QUEUE_ISR) || defined(ETL_POLYMORPHIC_CONTAINERS)
532 template <
typename T,
typename TAccess, const
size_t MEMORY_MODEL = etl::memory_model::MEMORY_MODEL_LARGE>
537 typedef queue_spsc_isr_base<T, MEMORY_MODEL> base_t;
545 typedef typename base_t::rvalue_reference rvalue_reference;
567 bool push(rvalue_reference value)
584#if ETL_USING_CPP11 && ETL_NOT_USING_STLPORT && !defined(ETL_QUEUE_ISR_FORCE_CPP03_IMPLEMENTATION)
585 template <
typename... Args>
618 template <
typename T1>
635 template <
typename T1,
typename T2>
636 bool emplace(
const T1& value1,
const T2& value2)
652 template <
typename T1,
typename T2,
typename T3>
653 bool emplace(
const T1& value1,
const T2& value2,
const T3& value3)
669 template <
typename T1,
typename T2,
typename T3,
typename T4>
670 bool emplace(
const T1& value1,
const T2& value2,
const T3& value3,
const T4& value4)
717#if ETL_CHECKING_EXTRA
746#if ETL_CHECKING_EXTRA
775 if ETL_IF_CONSTEXPR (etl::is_trivially_destructible<T>::value)
854 : base_t(p_buffer_, max_size_)
882 template <
typename T,
size_t SIZE,
typename TAccess, const
size_t MEMORY_MODEL = etl::memory_model::MEMORY_MODEL_LARGE>
895 static ETL_CONSTANT size_type MAX_SIZE =
size_type(SIZE);
901 : base_t(reinterpret_cast<T*>(&buffer[0]), MAX_SIZE)
927 template <
typename T,
size_t SIZE,
typename TAccess, const
size_t MEMORY_MODEL>
This is the base for all queue_spsc_isrs that contain a particular type.
Definition queue_spsc_isr.h:534
bool emplace(const T1 &value1, const T2 &value2)
Definition queue_spsc_isr.h:636
base_t::size_type size_type
The type used for determining the size of the queue.
Definition queue_spsc_isr.h:547
size_type size() const
How many items in the queue?
Definition queue_spsc_isr.h:823
const_reference front() const
Definition queue_spsc_isr.h:744
base_t::const_reference const_reference
A const reference to the type used in the queue.
Definition queue_spsc_isr.h:543
bool pop()
Pop a value from the queue and discard.
Definition queue_spsc_isr.h:699
size_type available() const
How much free space available in the queue.
Definition queue_spsc_isr.h:837
reference front()
Definition queue_spsc_isr.h:715
bool full() const
Is the queue full?
Definition queue_spsc_isr.h:809
void clear()
Clear the queue.
Definition queue_spsc_isr.h:771
bool push(const_reference value)
Push a value to the queue.
Definition queue_spsc_isr.h:552
bool emplace(const T1 &value1, const T2 &value2, const T3 &value3)
Definition queue_spsc_isr.h:653
base_t::value_type value_type
The type stored in the queue.
Definition queue_spsc_isr.h:541
iqueue_spsc_isr(T *p_buffer_, size_type max_size_)
The constructor that is called from derived classes.
Definition queue_spsc_isr.h:853
bool pop(reference value)
Pop a value from the queue.
Definition queue_spsc_isr.h:685
bool emplace(const T1 &value1, const T2 &value2, const T3 &value3, const T4 &value4)
Definition queue_spsc_isr.h:670
base_t::reference reference
A reference to the type used in the queue.
Definition queue_spsc_isr.h:542
bool emplace(const T1 &value1)
Definition queue_spsc_isr.h:619
bool empty() const
Is the queue empty?
Definition queue_spsc_isr.h:795
bool emplace()
Definition queue_spsc_isr.h:602
Definition queue_spsc_isr.h:78
bool emplace_implementation()
Definition queue_spsc_isr.h:309
bool full_from_isr() const
Definition queue_spsc_isr.h:196
bool pop_implementation(reference value)
Pop a value from the queue.
Definition queue_spsc_isr.h:423
bool push_from_isr(const_reference value)
Push a value to the queue from an ISR.
Definition queue_spsc_isr.h:94
const_reference front_from_isr() const
Definition queue_spsc_isr.h:156
reference front_from_isr()
Definition queue_spsc_isr.h:144
bool emplace_implementation(const T1 &value1, const T2 &value2)
Definition queue_spsc_isr.h:355
T value_type
The type stored in the queue.
Definition queue_spsc_isr.h:84
bool emplace_implementation(const T1 &value1, const T2 &value2, const T3 &value3)
Definition queue_spsc_isr.h:378
size_type capacity() const
How many items can the queue hold.
Definition queue_spsc_isr.h:213
bool emplace_implementation(const T1 &value1)
Definition queue_spsc_isr.h:332
void clear_from_isr()
Clear the queue from the ISR.
Definition queue_spsc_isr.h:175
static size_type get_next_index(size_type index, size_type maximum)
Calculate the next index.
Definition queue_spsc_isr.h:485
size_type available_from_isr() const
Definition queue_spsc_isr.h:167
~queue_spsc_isr_base()
Destructor.
Definition queue_spsc_isr.h:517
etl::size_type_lookup< MEMORY_MODEL >::type size_type
The type used for determining the size of queue.
Definition queue_spsc_isr.h:82
size_type read_index
Where to get the oldest data.
Definition queue_spsc_isr.h:499
const_reference front_implementation() const
Peek a value at the front of the queue.
Definition queue_spsc_isr.h:457
bool emplace_implementation(const T1 &value1, const T2 &value2, const T3 &value3, const T4 &value4)
Definition queue_spsc_isr.h:401
size_type max_size() const
How many items can the queue hold.
Definition queue_spsc_isr.h:221
bool pop_from_isr()
Pop a value from the queue from an ISR, and discard.
Definition queue_spsc_isr.h:134
bool pop_implementation()
Pop a value from the queue and discard.
Definition queue_spsc_isr.h:465
bool pop_from_isr(reference value)
Pop a value from the queue from an ISR.
Definition queue_spsc_isr.h:126
size_type write_index
Where to input new data.
Definition queue_spsc_isr.h:498
const size_type MAX_SIZE
Definition queue_spsc_isr.h:501
bool empty_from_isr() const
Definition queue_spsc_isr.h:187
T * p_buffer
The internal buffer.
Definition queue_spsc_isr.h:497
size_type current_size
Definition queue_spsc_isr.h:500
T & reference
A reference to the type used in the queue.
Definition queue_spsc_isr.h:85
const T & const_reference
A const reference to the type used in the queue.
Definition queue_spsc_isr.h:86
size_type size_from_isr() const
Definition queue_spsc_isr.h:205
bool push_implementation(const_reference value)
Push a value to the queue.
Definition queue_spsc_isr.h:240
reference front_implementation()
Peek a value at the front of the queue.
Definition queue_spsc_isr.h:449
Definition queue_spsc_isr.h:884
queue_spsc_isr()
Default constructor.
Definition queue_spsc_isr.h:900
~queue_spsc_isr()
Destructor.
Definition queue_spsc_isr.h:908
Definition alignment.h:251
ETL_EXCEPTION_CONSTEXPR exception(string_type reason_, string_type, numeric_type)
Constructor.
Definition exception.h:81
Definition integral_limits.h:518
Definition queue_spsc_isr.h:67
bitset_ext
Definition absolute.h:40
Definition memory_model.h:50