31#ifndef ETL_SPSC_QUEUE_ISR_INCLUDED
32#define ETL_SPSC_QUEUE_ISR_INCLUDED
54 queue_spsc_isr_exception(string_type reason_, string_type file_name_, numeric_type line_number_)
55 :
exception(reason_, file_name_, line_number_)
64 class queue_spsc_isr_empty :
public queue_spsc_isr_exception
68 queue_spsc_isr_empty(string_type file_name_, numeric_type line_number_)
69 : queue_spsc_isr_exception(ETL_ERROR_TEXT(
"queue_spsc_isr:empty", ETL_QUEUE_SPSC_ISR_FILE_ID
"A"), file_name_, line_number_)
74 template <
typename T, const
size_t MEMORY_MODEL = etl::memory_model::MEMORY_MODEL_LARGE>
75 class queue_spsc_isr_base
86 typedef T&& rvalue_reference;
113#if ETL_USING_CPP11 && ETL_NOT_USING_STLPORT && !defined(ETL_QUEUE_ISR_FORCE_CPP03_IMPLEMENTATION)
114 template <
typename... Args>
115 bool emplace_from_isr(Args&&... args)
231 , MAX_SIZE(max_size_)
277#if ETL_USING_CPP11 && ETL_NOT_USING_STLPORT && !defined(ETL_QUEUE_ISR_FORCE_CPP03_IMPLEMENTATION)
284 template <
typename... Args>
329 template <
typename T1>
352 template <
typename T1,
typename T2>
375 template <
typename T1,
typename T2,
typename T3>
398 template <
typename T1,
typename T2,
typename T3,
typename T4>
429#if ETL_USING_CPP11 && ETL_NOT_USING_STLPORT && !defined(ETL_QUEUE_LOCKABLE_FORCE_CPP03_IMPLEMENTATION)
487 if (index == maximum) ETL_UNLIKELY
506#if defined(ETL_POLYMORPHIC_SPSC_QUEUE_ISR) || defined(ETL_POLYMORPHIC_CONTAINERS)
530 template <
typename T,
typename TAccess, const
size_t MEMORY_MODEL = etl::memory_model::MEMORY_MODEL_LARGE>
535 typedef queue_spsc_isr_base<T, MEMORY_MODEL> base_t;
543 typedef typename base_t::rvalue_reference rvalue_reference;
565 bool push(rvalue_reference value)
582#if ETL_USING_CPP11 && ETL_NOT_USING_STLPORT && !defined(ETL_QUEUE_ISR_FORCE_CPP03_IMPLEMENTATION)
583 template <
typename... Args>
616 template <
typename T1>
633 template <
typename T1,
typename T2>
634 bool emplace(
const T1& value1,
const T2& value2)
650 template <
typename T1,
typename T2,
typename T3>
651 bool emplace(
const T1& value1,
const T2& value2,
const T3& value3)
667 template <
typename T1,
typename T2,
typename T3,
typename T4>
668 bool emplace(
const T1& value1,
const T2& value2,
const T3& value3,
const T4& value4)
715#if ETL_CHECKING_EXTRA
744#if ETL_CHECKING_EXTRA
773 if ETL_IF_CONSTEXPR (etl::is_trivially_destructible<T>::value)
852 : base_t(p_buffer_, max_size_)
880 template <
typename T,
size_t SIZE,
typename TAccess, const
size_t MEMORY_MODEL = etl::memory_model::MEMORY_MODEL_LARGE>
893 static ETL_CONSTANT size_type MAX_SIZE =
size_type(SIZE);
899 : base_t(reinterpret_cast<T*>(&buffer[0]), MAX_SIZE)
925 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:532
bool emplace(const T1 &value1, const T2 &value2)
Definition queue_spsc_isr.h:634
base_t::size_type size_type
The type used for determining the size of the queue.
Definition queue_spsc_isr.h:545
size_type size() const
How many items in the queue?
Definition queue_spsc_isr.h:821
const_reference front() const
Definition queue_spsc_isr.h:742
base_t::const_reference const_reference
A const reference to the type used in the queue.
Definition queue_spsc_isr.h:541
bool pop()
Pop a value from the queue and discard.
Definition queue_spsc_isr.h:697
size_type available() const
How much free space available in the queue.
Definition queue_spsc_isr.h:835
reference front()
Definition queue_spsc_isr.h:713
bool full() const
Is the queue full?
Definition queue_spsc_isr.h:807
void clear()
Clear the queue.
Definition queue_spsc_isr.h:769
bool push(const_reference value)
Push a value to the queue.
Definition queue_spsc_isr.h:550
bool emplace(const T1 &value1, const T2 &value2, const T3 &value3)
Definition queue_spsc_isr.h:651
base_t::value_type value_type
The type stored in the queue.
Definition queue_spsc_isr.h:539
iqueue_spsc_isr(T *p_buffer_, size_type max_size_)
The constructor that is called from derived classes.
Definition queue_spsc_isr.h:851
bool pop(reference value)
Pop a value from the queue.
Definition queue_spsc_isr.h:683
bool emplace(const T1 &value1, const T2 &value2, const T3 &value3, const T4 &value4)
Definition queue_spsc_isr.h:668
base_t::reference reference
A reference to the type used in the queue.
Definition queue_spsc_isr.h:540
bool emplace(const T1 &value1)
Definition queue_spsc_isr.h:617
bool empty() const
Is the queue empty?
Definition queue_spsc_isr.h:793
bool emplace()
Definition queue_spsc_isr.h:600
Definition queue_spsc_isr.h:76
bool emplace_implementation()
Definition queue_spsc_isr.h:307
bool full_from_isr() const
Definition queue_spsc_isr.h:194
bool pop_implementation(reference value)
Pop a value from the queue.
Definition queue_spsc_isr.h:421
bool push_from_isr(const_reference value)
Push a value to the queue from an ISR.
Definition queue_spsc_isr.h:92
const_reference front_from_isr() const
Definition queue_spsc_isr.h:154
reference front_from_isr()
Definition queue_spsc_isr.h:142
bool emplace_implementation(const T1 &value1, const T2 &value2)
Definition queue_spsc_isr.h:353
T value_type
The type stored in the queue.
Definition queue_spsc_isr.h:82
bool emplace_implementation(const T1 &value1, const T2 &value2, const T3 &value3)
Definition queue_spsc_isr.h:376
size_type capacity() const
How many items can the queue hold.
Definition queue_spsc_isr.h:211
bool emplace_implementation(const T1 &value1)
Definition queue_spsc_isr.h:330
void clear_from_isr()
Clear the queue from the ISR.
Definition queue_spsc_isr.h:173
static size_type get_next_index(size_type index, size_type maximum)
Calculate the next index.
Definition queue_spsc_isr.h:483
size_type available_from_isr() const
Definition queue_spsc_isr.h:165
~queue_spsc_isr_base()
Destructor.
Definition queue_spsc_isr.h:515
etl::size_type_lookup< MEMORY_MODEL >::type size_type
The type used for determining the size of queue.
Definition queue_spsc_isr.h:80
size_type read_index
Where to get the oldest data.
Definition queue_spsc_isr.h:497
const_reference front_implementation() const
Peek a value at the front of the queue.
Definition queue_spsc_isr.h:455
bool emplace_implementation(const T1 &value1, const T2 &value2, const T3 &value3, const T4 &value4)
Definition queue_spsc_isr.h:399
size_type max_size() const
How many items can the queue hold.
Definition queue_spsc_isr.h:219
bool pop_from_isr()
Pop a value from the queue from an ISR, and discard.
Definition queue_spsc_isr.h:132
bool pop_implementation()
Pop a value from the queue and discard.
Definition queue_spsc_isr.h:463
bool pop_from_isr(reference value)
Pop a value from the queue from an ISR.
Definition queue_spsc_isr.h:124
size_type write_index
Where to input new data.
Definition queue_spsc_isr.h:496
const size_type MAX_SIZE
Definition queue_spsc_isr.h:499
bool empty_from_isr() const
Definition queue_spsc_isr.h:185
T * p_buffer
The internal buffer.
Definition queue_spsc_isr.h:495
size_type current_size
Definition queue_spsc_isr.h:498
T & reference
A reference to the type used in the queue.
Definition queue_spsc_isr.h:83
const T & const_reference
A const reference to the type used in the queue.
Definition queue_spsc_isr.h:84
size_type size_from_isr() const
Definition queue_spsc_isr.h:203
bool push_implementation(const_reference value)
Push a value to the queue.
Definition queue_spsc_isr.h:238
reference front_implementation()
Peek a value at the front of the queue.
Definition queue_spsc_isr.h:447
Definition queue_spsc_isr.h:882
queue_spsc_isr()
Default constructor.
Definition queue_spsc_isr.h:898
~queue_spsc_isr()
Destructor.
Definition queue_spsc_isr.h:906
Definition alignment.h:251
ETL_EXCEPTION_CONSTEXPR exception(string_type reason_, string_type, numeric_type)
Constructor.
Definition exception.h:81
Definition integral_limits.h:517
Definition queue_spsc_isr.h:65
Definition memory_model.h:50