Queues#

pw_containers: Generic collections of objects for embedded devices

A queue is an ordered collection designed to add items at one end and remove them from the other. This allows “first in, first out”, or FIFO, behavior. Pigweed provides both single and double-ended queues that are backed by fixed or dynamic storage.

Pigweed provides many queue and deque implementations to meet different needs.

std::deque & std::queue equivalents#

pw_containers provides a family of deques and queues that implement the std:deque or std::queue API, but offer much more control with significantly smaller code size.

The std::deque-like containers are:

  • pw::Deque – uses a fixed-capacity external storage buffer

  • pw::FixedDeque – uses a fixed-capacity storage buffer, which is optionally owned and may be statically or dynamically allocated

  • pw::DynamicDeque – dynamically allocates a storage buffer using a pw::Allocator

  • pw::InlineDeque – uses an inline, statically allocated storage buffer

Equivalent std::queue-like classes are also provided:

pw::InlineVarLenEntryQueue#

InlineVarLenEntryQueue is a queue of inline variable-length binary entries. It is implemented as a ring (circular) buffer and supports operations to append entries and overwrite if necessary. Entries may be zero bytes up to the maximum size supported by the queue.

InlineVarLenEntryQueue has a few interesting properties:

  • Data and metadata are stored inline in a contiguous block of uint32_t-aligned memory.

  • The data structure is trivially copyable.

  • All state changes are accomplished with a single update to a uint32_t. The memory is always in a valid state and may be parsed offline.

This data structure is a much simpler version of PrefixedEntryRingBuffer. Prefer this sized-entry ring buffer to PrefixedEntryRingBuffer when:

  • A simple ring buffer of variable-length entries is needed. Advanced features like multiple readers and a user-defined preamble are not required.

  • A consistent, parsable, in-memory representation is required (e.g. to decode the buffer from a block of memory).

  • C support is required.

InlineVarLenEntryQueue is implemented in C and provides complete C and C++ APIs. The InlineVarLenEntryQueue C++ class is structured similarly to pw::InlineQueue and pw::Vector.

Queue vs. deque#

This module provides pw::InlineVarLenEntryQueue, but no corresponding InlineVarLenEntryDeque class. Following the C++ Standard Library style, the deque class would provide push_front() and pop_back() operations in addition to push_back() and pop_front() (equivalent to a queue’s push() and pop()).

There is no InlineVarLenEntryDeque class because there is no efficient way to implement push_front() and pop_back(). These operations would necessarily be O(n), since each entry knows the position of the next entry, but not the previous, as in a single-linked list. Given that these operations would be inefficient and unlikely to be used, they are not implemented, and only a queue class is provided.

Example#

Queues are declared with their max size (InlineVarLenEntryQueue<kMaxSize>) but may be used without specifying the size (InlineVarLenEntryQueue<>&).

void GenericCapacityQueue() {
  // Declare a queue with capacity sufficient for one 10-byte entry or
  // multiple smaller entries.
  pw::InlineVarLenEntryQueue<10> queue;

  // Push an entry, asserting if the entry does not fit.
  queue.push(queue, data);

  // Use push_overwrite() to push entries, overwriting older entries
  // as needed.
  queue.push_overwrite(queue, more_data);

  // Remove an entry.
  queue.pop();
}

Alternately, a InlineVarLenEntryQueue may be initialized in an existing uint32_t array.

void InitFromArray() {
  // Initialize a InlineVarLenEntryQueue.
  uint32_t buffer[32];
  auto& queue = pw::InlineVarLenEntryQueue<>::Init(buffer);

  // Largest supported entry is 114 B (13 B overhead + 1 B prefix)
  assert(queue.max_size_bytes() == 114u);

  // Write data
  queue.push_overwrite(data);
}

A InlineVarLenEntryQueue may be declared and initialized in C with the PW_VARIABLE_LENGTH_ENTRY_QUEUE_DECLARE macro.

// Declare a queue with capacity sufficient for one 10-byte entry or
// multiple smaller entries.
PW_VARIABLE_LENGTH_ENTRY_QUEUE_DECLARE(queue, 10);

// Push an entry, asserting if the entry does not fit.
pw_InlineVarLenEntryQueue_Push(queue, "12345", 5);

// Use push_overwrite() to push entries, overwriting older entries
// as needed.
pw_InlineVarLenEntryQueue_PushOverwrite(queue, "abcdefg", 7);

// Remove an entry.
pw_InlineVarLenEntryQueue_Pop(queue);

Alternately, a InlineVarLenEntryQueue may be initialized in an existing uint32_t array.

// Initialize a InlineVarLenEntryQueue.
uint32_t buffer[32];
pw_InlineVarLenEntryQueue_Init(buffer, 32);

// Largest supported entry is 114 B (13 B overhead + 1 B prefix)
assert(pw_InlineVarLenEntryQueue_MaxSizeBytes(buffer) == 114u);

// Write some data
pw_InlineVarLenEntryQueue_PushOverwrite(buffer, "123", 3);

Python API reference#

Decodes the in-memory representation of a sized-entry ring buffer.

pw_containers.inline_var_len_entry_queue.parse(queue: bytes) Iterable[bytes]#

Decodes the in-memory representation of a variable-length entry queue.

The queue includes both the data buffer and the indices that designate the range in the buffer that contains variable-length entries.

Parameters:

queue – The bytes representation of a variable-length entry queue.

Yields:

Each entry in the buffer as bytes.

Size reports#

The tables below illustrate the memory and code size costs for various queue and deque implementations, with std::deque serving as a baseline. The size reports generally cover:

  • The cost of a single instance.

  • The cost of instantiating a second container of the same class with a different element type, showing the impact of templates on code size.

  • The cost of using related classes, such as pw::InlineQueue and pw::InlineDeque or static and dynamic pw::FixedDeques.

Label

Segment

Delta

std::deque

FLASH

+56

[section .rodata]

+2

pw::allocator::Layout::Of<>()

+4

pw::containers::size_report::Measure()

-4

operator delete()

+8

vClearInterruptMaskFromISR

DEL

-8

__aeabi_memmove

NEW

+700

std::__2::deque<>::__add_front_capacity()

NEW

+612

std::__2::deque<>::__add_back_capacity()

NEW

+512

std::__2::deque<>::insert()

NEW

+352

std::__2::deque<>::erase()

NEW

+284

std::__2::__split_buffer<>::emplace_front<>()

NEW

+276

std::__2::__split_buffer<>::emplace_back<>()

NEW

+262

_ZN2pw10containers11size_report12MeasureDequeINSt3__25dequeIjNS3_9allocatorIjEEEETpTnRiJENS3_11__wrap_iterIPjEEEEiRT_T1_SE_j

NEW

+204

std::__2::deque<>::__move_construct_backward_and_check()

NEW

+184

std::__2::deque<>::__move_backward_and_check()

NEW

+180

std::__2::deque<>::__move_construct_and_check()

NEW

+168

std::__2::deque<>::__move_and_check()

NEW

+144

std::__2::deque<>::__erase_to_end()

NEW

+136

_ZNSt3__25dequeIjNS_9allocatorIjEEE18__append_with_sizeB9nqn220000INS_11__wrap_iterIPjEEEEvT_j

NEW

+126

std::__2::deque<>::__append()

NEW

+116

std::__2::deque<>::clear()

NEW

+106

_ZNSt3__220__for_each_n_segmentB9nqn220000INS_16__deque_iteratorIjPjRjPS2_iLi0EEEjZNS_8__fill_nB9nqn220000IS5_jjTnNS_9enable_ifIXntsr23__specialized_algorithmINS_10_Algorithm8__fill_nENS_17__single_iteratorIT_EEEE15__has_algorithmEiE4typeELi0EEESB_SB_T0_RKT1_EUlS2_S2_E_EESB_SB_SF_SG_

NEW

+104

_ZNKSt3__211__copy_implclB9nqn220000IPjNS_16__deque_iteratorIjS2_RjPS2_iLi0EEETnNS_9enable_ifIXaaaasr37__has_random_access_iterator_categoryIT_EE5valuent25__is_segmented_iterator_vIS8_E25__is_segmented_iterator_vIT0_EEiE4typeELi0EEENS_4pairIS8_S9_EES8_S8_S9_

NEW

+104

_ZNKSt3__211__move_implINS_17_ClassicAlgPolicyEEclB9nqn220000IPjNS_16__deque_iteratorIjS4_RjPS4_iLi0EEETnNS_9enable_ifIXaaaasr37__has_random_access_iterator_categoryIT_EE5valuent25__is_segmented_iterator_vISA_E25__is_segmented_iterator_vIT0_EEiE4typeELi0EEENS_4pairISA_SB_EESA_SA_SB_

NEW

+98

std::__2::__split_buffer<>::shrink_to_fit()

NEW

+96

_ZNSt3__25dequeIjNS_9allocatorIjEEE32__assign_with_size_random_accessB9nqn220000INS_11__wrap_iterIPjEEEEvT_i

NEW

+92

_ZNKSt3__220__move_backward_implINS_17_ClassicAlgPolicyEEclB9nqn220000IPjNS_16__deque_iteratorIjS4_RjPS4_iLi0EEETnNS_9enable_ifIXaaaasr37__has_random_access_iterator_categoryIT_EE5valuent25__is_segmented_iterator_vISA_E25__is_segmented_iterator_vIT0_EEiE4typeELi0EEENS_4pairISA_SB_EESA_SA_SB_

NEW

+70

std::__2::deque<>::shrink_to_fit()

NEW

+68

_ZNSt3__216__deque_iteratorIjPKjRS1_PKS2_iLi0EEpLB9nqn220000Ei

NEW

+68

_ZNSt3__216__deque_iteratorIjPjRjPS1_iLi0EEpLB9nqn220000Ei

NEW

+66

_ZNSt3__227__for_each_segment_backwardB9nqn220000INS_16__deque_iteratorIjPjRjPS2_iLi0EEEZNKS_20__move_backward_implINS_17_ClassicAlgPolicyEEclB9nqn220000IS5_S5_TnNS_9enable_ifIX25__is_segmented_iterator_vIT_EEiE4typeELi0EEENS_4pairISB_T0_EESB_SB_SF_EUlS2_S2_E_EEvSB_SB_SF_

NEW

+66

std::__2::deque<>::push_front()

NEW

+60

std::__2::deque<>::resize()

NEW

+56

_ZNSt3__218__for_each_segmentB9nqn220000INS_16__deque_iteratorIjPjRjPS2_iLi0EEENS_11__move_implINS_17_ClassicAlgPolicyEE12_MoveSegmentIS5_S5_EEEEvT_SB_T0_

NEW

+56

_ZNSt3__25dequeIjNS_9allocatorIjEEE26__maybe_remove_front_spareB9nqn220000Eb

NEW

+54

_ZNSt3__224__copy_move_unwrap_itersB9nqn220000INS_11__move_implINS_17_ClassicAlgPolicyEEENS_16__deque_iteratorIjPjRjPS5_iLi0EEES8_S8_TnNS_9enable_ifIXsr12__can_rewrapIT0_T2_EE5valueEiE4typeELi0EEENS_4pairISA_SB_EESA_T1_SB_

NEW

+54

_ZNSt3__224__copy_move_unwrap_itersB9nqn220000INS_20__move_backward_implINS_17_ClassicAlgPolicyEEENS_16__deque_iteratorIjPjRjPS5_iLi0EEES8_S8_TnNS_9enable_ifIXsr12__can_rewrapIT0_T2_EE5valueEiE4typeELi0EEENS_4pairISA_SB_EESA_T1_SB_

NEW

+54

_ZNSt3__25dequeIjNS_9allocatorIjEEE25__maybe_remove_back_spareB9nqn220000Eb

NEW

+52

_ZN2pw10containers11size_report15MeasureStdDequeIjTpTnRiJENSt3__211__wrap_iterIPjEEEEiT1_S8_j

NEW

+50

std::__2::__split_buffer<>::__split_buffer()

NEW

+44

_ZNKSt3__211__move_implINS_17_ClassicAlgPolicyEEclB9nqn220000INS_16__deque_iteratorIjPjRjPS5_iLi0EEES8_TnNS_9enable_ifIX25__is_segmented_iterator_vIT_EEiE4typeELi0EEENS_4pairISA_T0_EESA_SA_SE_

NEW

+44

_ZNKSt3__220__move_backward_implINS_17_ClassicAlgPolicyEEclB9nqn220000INS_16__deque_iteratorIjPjRjPS5_iLi0EEES8_TnNS_9enable_ifIX25__is_segmented_iterator_vIT_EEiE4typeELi0EEENS_4pairISA_T0_EESA_SA_SE_

NEW

+44

std::__2::deque<>::push_back()

NEW

+42

_ZNSt3__224__copy_move_unwrap_itersB9nqn220000INS_11__copy_implENS_11__wrap_iterIPjEES4_NS_16__deque_iteratorIjS3_RjPS3_iLi0EEETnNS_9enable_ifIXsr12__can_rewrapIT0_T2_EE5valueEiE4typeELi0EEENS_4pairISA_SB_EESA_T1_SB_

NEW

+42

_ZNSt3__224__copy_move_unwrap_itersB9nqn220000INS_11__move_implINS_17_ClassicAlgPolicyEEEPjS4_NS_16__deque_iteratorIjS4_RjPS4_iLi0EEETnNS_9enable_ifIXsr12__can_rewrapIT0_T2_EE5valueEiE4typeELi0EEENS_4pairISA_SB_EESA_T1_SB_

NEW

+42

_ZNSt3__224__copy_move_unwrap_itersB9nqn220000INS_20__move_backward_implINS_17_ClassicAlgPolicyEEEPjS4_NS_16__deque_iteratorIjS4_RjPS4_iLi0EEETnNS_9enable_ifIXsr12__can_rewrapIT0_T2_EE5valueEiE4typeELi0EEENS_4pairISA_SB_EESA_T1_SB_

NEW

+42

pw::containers::size_report::MeasureContainer<>()

NEW

+40

_ZNSt3__2miB9nqn220000ERKNS_16__deque_iteratorIjPKjRS1_PKS2_iLi0EEES8_

NEW

+40

_ZNSt3__2miB9nqn220000ERKNS_16__deque_iteratorIjPjRjPS1_iLi0EEES6_

NEW

+38

_ZNSt3__25dequeIjNS_9allocatorIjEEE3endB9nqn220000Ev

NEW

+36

_ZNSt3__213move_backwardB9nqn220000INS_16__deque_iteratorIjPjRjPS2_iLi0EEES5_EET0_T_S7_S6_

NEW

+36

_ZNSt3__24moveB9nqn220000INS_16__deque_iteratorIjPjRjPS2_iLi0EEES5_EET0_T_S7_S6_

NEW

+36

_ZNSt3__25dequeIjNS_9allocatorIjEEE5beginB9nqn220000Ev

NEW

+36

std::__2::__split_buffer<>::~__split_buffer()

NEW

+30

_ZNKSt3__25dequeIjNS_9allocatorIjEEE12__back_spareB9nqn220000Ev

NEW

+28

_ZNSt3__211__move_implINS_17_ClassicAlgPolicyEE12_MoveSegmentINS_16__deque_iteratorIjPjRjPS5_iLi0EEES8_EclB9nqn220000ES5_S5_

NEW

+28

_ZZNKSt3__220__move_backward_implINS_17_ClassicAlgPolicyEEclB9nqn220000INS_16__deque_iteratorIjPjRjPS5_iLi0EEES8_TnNS_9enable_ifIX25__is_segmented_iterator_vIT_EEiE4typeELi0EEENS_4pairISA_T0_EESA_SA_SE_ENKUlS5_S5_E_clES5_S5_

NEW

+24

_ZNSt3__213move_backwardB9nqn220000IPjNS_16__deque_iteratorIjS1_RjPS1_iLi0EEEEET0_T_S7_S6_

NEW

+24

_ZNSt3__24copyB9nqn220000INS_11__wrap_iterIPjEENS_16__deque_iteratorIjS2_RjPS2_iLi0EEEEET0_T_S9_S8_

NEW

+24

_ZNSt3__24moveB9nqn220000IPjNS_16__deque_iteratorIjS1_RjPS1_iLi0EEEEET0_T_S7_S6_

NEW

+24

_ZNSt3__26copy_nB9nqn220000INS_11__wrap_iterIPjEEiNS_16__deque_iteratorIjS2_RjPS2_iLi0EEETnNS_9enable_ifIXntsr37__has_exactly_input_iterator_categoryIT_EE5valueEiE4typeELi0EEET1_S9_T0_SC_

NEW

+24

std::__2::__split_buffer<>::__construct_at_end_with_size<>()

NEW

+24

std::__2::deque<>::back()

NEW

+22

std::__2::deque<>::pop_front()

NEW

+20

_ZNSt3__210unique_ptrIPjNS_22__allocator_destructorINS_9allocatorIjEEEEE5resetB9nqn220000ES1_

NEW

+18

_ZNSt3__222__allocator_destructorINS_9allocatorIjEEEclB9nqn220000EPj

NEW

+18

_ZNSt3__28__copy_nB9nqn220000INS_17_ClassicAlgPolicyENS_11__wrap_iterIPjEENS_16__deque_iteratorIjS3_RjPS3_iLi0EEETnNS_9enable_ifIXsr37__has_random_access_iterator_categoryIT0_EE5valueEiE4typeELi0EEENS_4pairISA_T1_EESA_NS_8_IterOpsIT_E17__difference_typeISA_EESE_

NEW

+18

_ZNSt3__29allocatorIPjE8allocateB9nqn220000Ej

NEW

+18

_ZZNSt3__28__fill_nB9nqn220000INS_16__deque_iteratorIjPjRjPS2_iLi0EEEjjTnNS_9enable_ifIXntsr23__specialized_algorithmINS_10_Algorithm8__fill_nENS_17__single_iteratorIT_EEEE15__has_algorithmEiE4typeELi0EEESA_SA_T0_RKT1_ENKUlS2_S2_E_clES2_S2_

NEW

+16

std::__2::deque<>::pop_back()

NEW

+14

_ZNSt3__210unique_ptrIPjNS_22__allocator_destructorINS_9allocatorIjEEEEED2B9nqn220000Ev

NEW

+14

_ZNSt3__28__fill_nB9nqn220000IPjijTnNS_9enable_ifIXntsr23__specialized_algorithmINS_10_Algorithm8__fill_nENS_17__single_iteratorIT_EEEE15__has_algorithmEiE4typeELi0EEES6_S6_T0_RKT1_

NEW

+12

_ZNSt3__214__split_bufferIPjNS_9allocatorIS1_EENS_29__split_buffer_pointer_layoutEE18__construct_at_endINS_13move_iteratorIPS1_EETnNS_9enable_ifIXsr31__has_forward_iterator_categoryIT_EE5valueEiE4typeELi0EEEvSB_SB_

NEW

+12

_ZNSt3__25dequeIjNS_9allocatorIjEEE6assignINS_11__wrap_iterIPjEETnNS_9enable_ifIXsr37__has_random_access_iterator_categoryIT_EE5valueEiE4typeELi0EEEvS9_S9_

NEW

+12

_ZNSt3__28__fill_nB9nqn220000INS_16__deque_iteratorIjPjRjPS2_iLi0EEEjjTnNS_9enable_ifIXntsr23__specialized_algorithmINS_10_Algorithm8__fill_nENS_17__single_iteratorIT_EEEE15__has_algorithmEiE4typeELi0EEESA_SA_T0_RKT1_

NEW

+12

_ZSt28__throw_bad_array_new_lengthB9nqn220000v

NEW

+10

_ZNKSt3__25dequeIjNS_9allocatorIjEEE19__back_spare_blocksB9nqn220000Ev

NEW

+10

_ZNSt3__216__deque_iteratorIjPKjRS1_PKS2_iLi0EEmIB9nqn220000Ei

NEW

+10

_ZNSt3__216__deque_iteratorIjPjRjPS1_iLi0EEmIB9nqn220000Ei

NEW

+8

__aeabi_memmove4

NEW

+8

operator new()

NEW

+4

std::__2::__libcpp_verbose_abort()

+6,736

RAM

-8

[section .data]

+1

__Thumbv6MABSLongThunk_best_effort_wfe_or_timeout

NEW

+39

pw::containers::size_report::GetItems<>()::items

NEW

+24

_ZZN2pw10containers11size_report15MeasureStdDequeIjTpTnRiJENSt3__211__wrap_iterIPjEEEEiT1_S8_jE9std_deque

NEW

+4

_ZGVZN2pw10containers11size_report15MeasureStdDequeIjTpTnRiJENSt3__211__wrap_iterIPjEEEEiT1_S8_jE9std_deque

+60

Additional std::deque with different item type

FLASH

+700

std::__2::deque<>::__add_front_capacity()

+612

std::__2::deque<>::__add_back_capacity()

+518

std::__2::deque<>::insert()

+352

std::__2::deque<>::erase()

+284

std::__2::__split_buffer<>::emplace_front<>()

+276

std::__2::__split_buffer<>::emplace_back<>()

+212

std::__2::deque<>::__move_construct_backward_and_check()

+186

std::__2::deque<>::__move_backward_and_check()

+188

std::__2::deque<>::__move_construct_and_check()

+168

std::__2::deque<>::__move_and_check()

+144

std::__2::deque<>::__erase_to_end()

+138

std::__2::deque<>::__append()

+116

std::__2::deque<>::clear()

+98

std::__2::__split_buffer<>::shrink_to_fit()

+70

std::__2::deque<>::shrink_to_fit()

+70

std::__2::deque<>::push_front()

+60

std::__2::deque<>::resize()

+50

std::__2::__split_buffer<>::__split_buffer()

+46

std::__2::deque<>::push_back()

+42

pw::containers::size_report::MeasureContainer<>()

+36

std::__2::__split_buffer<>::~__split_buffer()

+20

pw::containers::size_report::Measure()

+24

std::__2::__split_buffer<>::__construct_at_end_with_size<>()

+24

std::__2::deque<>::back()

+22

std::__2::deque<>::pop_front()

+2

pw::allocator::LibCAllocator::DoReallocate()

-12

vClearInterruptMaskFromISR

+16

std::__2::deque<>::pop_back()

NEW

+284

_ZN2pw10containers11size_report12MeasureDequeINSt3__25dequeIyNS3_9allocatorIyEEEETpTnRiJENS3_11__wrap_iterIPyEEEEiRT_T1_SE_j

NEW

+146

_ZNSt3__25dequeIyNS_9allocatorIyEEE18__append_with_sizeB9nqn220000INS_11__wrap_iterIPyEEEEvT_j

NEW

+106

_ZNSt3__220__for_each_n_segmentB9nqn220000INS_16__deque_iteratorIyPyRyPS2_iLi0EEEjZNS_8__fill_nB9nqn220000IS5_jyTnNS_9enable_ifIXntsr23__specialized_algorithmINS_10_Algorithm8__fill_nENS_17__single_iteratorIT_EEEE15__has_algorithmEiE4typeELi0EEESB_SB_T0_RKT1_EUlS2_S2_E_EESB_SB_SF_SG_

NEW

+104

_ZNKSt3__211__copy_implclB9nqn220000IPyNS_16__deque_iteratorIyS2_RyPS2_iLi0EEETnNS_9enable_ifIXaaaasr37__has_random_access_iterator_categoryIT_EE5valuent25__is_segmented_iterator_vIS8_E25__is_segmented_iterator_vIT0_EEiE4typeELi0EEENS_4pairIS8_S9_EES8_S8_S9_

NEW

+104

_ZNKSt3__211__move_implINS_17_ClassicAlgPolicyEEclB9nqn220000IPyNS_16__deque_iteratorIyS4_RyPS4_iLi0EEETnNS_9enable_ifIXaaaasr37__has_random_access_iterator_categoryIT_EE5valuent25__is_segmented_iterator_vISA_E25__is_segmented_iterator_vIT0_EEiE4typeELi0EEENS_4pairISA_SB_EESA_SA_SB_

NEW

+96

_ZNSt3__25dequeIyNS_9allocatorIyEEE32__assign_with_size_random_accessB9nqn220000INS_11__wrap_iterIPyEEEEvT_i

NEW

+92

_ZNKSt3__220__move_backward_implINS_17_ClassicAlgPolicyEEclB9nqn220000IPyNS_16__deque_iteratorIyS4_RyPS4_iLi0EEETnNS_9enable_ifIXaaaasr37__has_random_access_iterator_categoryIT_EE5valuent25__is_segmented_iterator_vISA_E25__is_segmented_iterator_vIT0_EEiE4typeELi0EEENS_4pairISA_SB_EESA_SA_SB_

NEW

+68

_ZNSt3__216__deque_iteratorIyPKyRS1_PKS2_iLi0EEpLB9nqn220000Ei

NEW

+68

_ZNSt3__216__deque_iteratorIyPyRyPS1_iLi0EEpLB9nqn220000Ei

NEW

+66

_ZNSt3__227__for_each_segment_backwardB9nqn220000INS_16__deque_iteratorIyPyRyPS2_iLi0EEEZNKS_20__move_backward_implINS_17_ClassicAlgPolicyEEclB9nqn220000IS5_S5_TnNS_9enable_ifIX25__is_segmented_iterator_vIT_EEiE4typeELi0EEENS_4pairISB_T0_EESB_SB_SF_EUlS2_S2_E_EEvSB_SB_SF_

NEW

+56

_ZNSt3__218__for_each_segmentB9nqn220000INS_16__deque_iteratorIyPyRyPS2_iLi0EEENS_11__move_implINS_17_ClassicAlgPolicyEE12_MoveSegmentIS5_S5_EEEEvT_SB_T0_

NEW

+56

_ZNSt3__25dequeIyNS_9allocatorIyEEE26__maybe_remove_front_spareB9nqn220000Eb

NEW

+54

_ZNSt3__224__copy_move_unwrap_itersB9nqn220000INS_11__move_implINS_17_ClassicAlgPolicyEEENS_16__deque_iteratorIyPyRyPS5_iLi0EEES8_S8_TnNS_9enable_ifIXsr12__can_rewrapIT0_T2_EE5valueEiE4typeELi0EEENS_4pairISA_SB_EESA_T1_SB_

NEW

+54

_ZNSt3__224__copy_move_unwrap_itersB9nqn220000INS_20__move_backward_implINS_17_ClassicAlgPolicyEEENS_16__deque_iteratorIyPyRyPS5_iLi0EEES8_S8_TnNS_9enable_ifIXsr12__can_rewrapIT0_T2_EE5valueEiE4typeELi0EEENS_4pairISA_SB_EESA_T1_SB_

NEW

+54

_ZNSt3__25dequeIyNS_9allocatorIyEEE25__maybe_remove_back_spareB9nqn220000Eb

NEW

+52

_ZN2pw10containers11size_report15MeasureStdDequeIyTpTnRiJENSt3__211__wrap_iterIPyEEEEiT1_S8_j

NEW

+44

_ZNKSt3__211__move_implINS_17_ClassicAlgPolicyEEclB9nqn220000INS_16__deque_iteratorIyPyRyPS5_iLi0EEES8_TnNS_9enable_ifIX25__is_segmented_iterator_vIT_EEiE4typeELi0EEENS_4pairISA_T0_EESA_SA_SE_

NEW

+44

_ZNKSt3__220__move_backward_implINS_17_ClassicAlgPolicyEEclB9nqn220000INS_16__deque_iteratorIyPyRyPS5_iLi0EEES8_TnNS_9enable_ifIX25__is_segmented_iterator_vIT_EEiE4typeELi0EEENS_4pairISA_T0_EESA_SA_SE_

NEW

+42

_ZNSt3__224__copy_move_unwrap_itersB9nqn220000INS_11__copy_implENS_11__wrap_iterIPyEES4_NS_16__deque_iteratorIyS3_RyPS3_iLi0EEETnNS_9enable_ifIXsr12__can_rewrapIT0_T2_EE5valueEiE4typeELi0EEENS_4pairISA_SB_EESA_T1_SB_

NEW

+42

_ZNSt3__224__copy_move_unwrap_itersB9nqn220000INS_11__move_implINS_17_ClassicAlgPolicyEEEPyS4_NS_16__deque_iteratorIyS4_RyPS4_iLi0EEETnNS_9enable_ifIXsr12__can_rewrapIT0_T2_EE5valueEiE4typeELi0EEENS_4pairISA_SB_EESA_T1_SB_

NEW

+42

_ZNSt3__224__copy_move_unwrap_itersB9nqn220000INS_20__move_backward_implINS_17_ClassicAlgPolicyEEEPyS4_NS_16__deque_iteratorIyS4_RyPS4_iLi0EEETnNS_9enable_ifIXsr12__can_rewrapIT0_T2_EE5valueEiE4typeELi0EEENS_4pairISA_SB_EESA_T1_SB_

NEW

+40

_ZNSt3__2miB9nqn220000ERKNS_16__deque_iteratorIyPKyRS1_PKS2_iLi0EEES8_

NEW

+40

_ZNSt3__2miB9nqn220000ERKNS_16__deque_iteratorIyPyRyPS1_iLi0EEES6_

NEW

+38

_ZNSt3__25dequeIyNS_9allocatorIyEEE3endB9nqn220000Ev

NEW

+36

_ZNSt3__213move_backwardB9nqn220000INS_16__deque_iteratorIyPyRyPS2_iLi0EEES5_EET0_T_S7_S6_

NEW

+36

_ZNSt3__24moveB9nqn220000INS_16__deque_iteratorIyPyRyPS2_iLi0EEES5_EET0_T_S7_S6_

NEW

+34

_ZNSt3__25dequeIyNS_9allocatorIyEEE5beginB9nqn220000Ev

NEW

+30

_ZNKSt3__25dequeIyNS_9allocatorIyEEE12__back_spareB9nqn220000Ev

NEW

+28

_ZNSt3__211__move_implINS_17_ClassicAlgPolicyEE12_MoveSegmentINS_16__deque_iteratorIyPyRyPS5_iLi0EEES8_EclB9nqn220000ES5_S5_

NEW

+28

_ZZNKSt3__220__move_backward_implINS_17_ClassicAlgPolicyEEclB9nqn220000INS_16__deque_iteratorIyPyRyPS5_iLi0EEES8_TnNS_9enable_ifIX25__is_segmented_iterator_vIT_EEiE4typeELi0EEENS_4pairISA_T0_EESA_SA_SE_ENKUlS5_S5_E_clES5_S5_

NEW

+24

_ZNSt3__213move_backwardB9nqn220000IPyNS_16__deque_iteratorIyS1_RyPS1_iLi0EEEEET0_T_S7_S6_

NEW

+24

_ZNSt3__24copyB9nqn220000INS_11__wrap_iterIPyEENS_16__deque_iteratorIyS2_RyPS2_iLi0EEEEET0_T_S9_S8_

NEW

+24

_ZNSt3__24moveB9nqn220000IPyNS_16__deque_iteratorIyS1_RyPS1_iLi0EEEEET0_T_S7_S6_

NEW

+24

_ZNSt3__26copy_nB9nqn220000INS_11__wrap_iterIPyEEiNS_16__deque_iteratorIyS2_RyPS2_iLi0EEETnNS_9enable_ifIXntsr37__has_exactly_input_iterator_categoryIT_EE5valueEiE4typeELi0EEET1_S9_T0_SC_

NEW

+20

_ZNSt3__210unique_ptrIPyNS_22__allocator_destructorINS_9allocatorIyEEEEE5resetB9nqn220000ES1_

NEW

+20

_ZNSt3__28__fill_nB9nqn220000IPyiyTnNS_9enable_ifIXntsr23__specialized_algorithmINS_10_Algorithm8__fill_nENS_17__single_iteratorIT_EEEE15__has_algorithmEiE4typeELi0EEES6_S6_T0_RKT1_

NEW

+18

_ZNSt3__222__allocator_destructorINS_9allocatorIyEEEclB9nqn220000EPy

NEW

+18

_ZNSt3__28__copy_nB9nqn220000INS_17_ClassicAlgPolicyENS_11__wrap_iterIPyEENS_16__deque_iteratorIyS3_RyPS3_iLi0EEETnNS_9enable_ifIXsr37__has_random_access_iterator_categoryIT0_EE5valueEiE4typeELi0EEENS_4pairISA_T1_EESA_NS_8_IterOpsIT_E17__difference_typeISA_EESE_

NEW

+18

_ZNSt3__29allocatorIPyE8allocateB9nqn220000Ej

NEW

+18

_ZZNSt3__28__fill_nB9nqn220000INS_16__deque_iteratorIyPyRyPS2_iLi0EEEjyTnNS_9enable_ifIXntsr23__specialized_algorithmINS_10_Algorithm8__fill_nENS_17__single_iteratorIT_EEEE15__has_algorithmEiE4typeELi0EEESA_SA_T0_RKT1_ENKUlS2_S2_E_clES2_S2_

NEW

+14

_ZNSt3__210unique_ptrIPyNS_22__allocator_destructorINS_9allocatorIyEEEEED2B9nqn220000Ev

NEW

+12

_ZNSt3__214__split_bufferIPyNS_9allocatorIS1_EENS_29__split_buffer_pointer_layoutEE18__construct_at_endINS_13move_iteratorIPS1_EETnNS_9enable_ifIXsr31__has_forward_iterator_categoryIT_EE5valueEiE4typeELi0EEEvSB_SB_

NEW

+12

_ZNSt3__216__deque_iteratorIyPyRyPS1_iLi0EEmIB9nqn220000Ei

NEW

+12

_ZNSt3__25dequeIyNS_9allocatorIyEEE6assignINS_11__wrap_iterIPyEETnNS_9enable_ifIXsr37__has_random_access_iterator_categoryIT_EE5valueEiE4typeELi0EEEvS9_S9_

NEW

+12

_ZNSt3__28__fill_nB9nqn220000INS_16__deque_iteratorIyPyRyPS2_iLi0EEEjyTnNS_9enable_ifIXntsr23__specialized_algorithmINS_10_Algorithm8__fill_nENS_17__single_iteratorIT_EEEE15__has_algorithmEiE4typeELi0EEESA_SA_T0_RKT1_

NEW

+10

_ZNKSt3__25dequeIyNS_9allocatorIyEEE19__back_spare_blocksB9nqn220000Ev

NEW

+10

_ZNSt3__216__deque_iteratorIyPKyRS1_PKS2_iLi0EEmIB9nqn220000Ei

+6,736

RAM

+84

pw::containers::size_report::GetItems<>()::items

-4

[section .data]

NEW

+24

_ZZN2pw10containers11size_report15MeasureStdDequeIyTpTnRiJENSt3__211__wrap_iterIPyEEEEiT1_S8_jE9std_deque

NEW

+4

_ZGVZN2pw10containers11size_report15MeasureStdDequeIyTpTnRiJENSt3__211__wrap_iterIPyEEEEiT1_S8_jE9std_deque

+108

DynamicDeque

FLASH

+244

[section .rodata]

+2

pw::allocator::Layout::Of<>()

+4

pw::containers::size_report::Measure()

-4

__bi_84

+4

vClearInterruptMaskFromISR

NEW

+192

_ZN2pw10containers11size_report12MeasureDequeINS_12DynamicDequeIjtEETpTnRiJENSt3__211__wrap_iterIPjEEEEiRT_T1_SC_j

NEW

+156

pw::containers::internal::GenericDeque<>::erase()

NEW

+132

pw::DynamicDeque<>::ReallocateBuffer()

NEW

+100

_ZN2pw10containers8internal12GenericDequeINS_12DynamicDequeIjtEEjNS1_16CountAndCapacityItEEE10try_assignINSt3__211__wrap_iterIPjEETpTnRiJEvEEbT_SE_

NEW

+100

_ZNSt3__220__uninitialized_moveB9nqn220000IjN2pw10containers8internal13DequeIteratorINS1_12DynamicDequeIjtEEEES7_S7_NS_14__always_falseEZNS_18uninitialized_moveB9nqn220000IS7_S7_EET0_T_SB_SA_EUlOSB_E_EENS_4pairISA_T2_EESA_T1_SF_T3_T4_

NEW

+98

_ZNKSt3__211__move_implINS_17_ClassicAlgPolicyEEclB9nqn220000IN2pw10containers8internal13DequeIteratorINS4_12DynamicDequeIjtEEEESA_SA_EENS_4pairIT_T1_EESC_T0_SD_

NEW

+98

_ZNKSt3__220__move_backward_implINS_17_ClassicAlgPolicyEEclB9nqn220000IN2pw10containers8internal13DequeIteratorINS4_12DynamicDequeIjtEEEESA_SA_EENS_4pairIT_T1_EESC_T0_SD_

NEW

+86

_ZNSt3__222__uninitialized_move_nB9nqn220000IjN2pw10containers8internal13DequeIteratorINS1_12DynamicDequeIjtEEEEtS7_NS_14__always_falseEZNS_20uninitialized_move_nB9nqn220000IS7_tS7_EENS_4pairIT_T1_EESB_T0_SC_EUlOSB_E_EENSA_ISE_T2_EESE_SC_SH_T3_T4_

NEW

+84

pw::DynamicDeque<>::shrink_to_fit()

NEW

+84

pw::containers::internal::GenericDeque<>::ShiftLeft()

NEW

+82

pw::containers::internal::GenericDeque<>::contiguous_data()

NEW

+78

pw::containers::internal::GenericDeque<>::ShiftRight()

NEW

+76

pw::containers::internal::GenericDeque<>::try_resize()

NEW

+74

pw::DynamicDeque<>::try_reserve()

NEW

+68

pw::DynamicDeque<>::IncreaseCapacity()

NEW

+68

pw::containers::internal::GenericDeque<>::insert()

NEW

+66

pw::containers::internal::GenericDeque<>::try_insert()

NEW

+60

_ZN2pw10containers11size_report19MeasureDynamicDequeIjTpTnRiJENSt3__211__wrap_iterIPjEEEEiT1_S8_j

NEW

+60

pw::containers::internal::GenericDeque<>::back()

NEW

+54

_ZNSt3__224__copy_move_unwrap_itersB9nqn220000INS_11__move_implINS_17_ClassicAlgPolicyEEEN2pw10containers8internal13DequeIteratorINS4_12DynamicDequeIjtEEEESA_SA_TnNS_9enable_ifIXsr12__can_rewrapIT0_T2_EE5valueEiE4typeELi0EEENS_4pairISC_SD_EESC_T1_SD_

NEW

+54

_ZNSt3__224__copy_move_unwrap_itersB9nqn220000INS_20__move_backward_implINS_17_ClassicAlgPolicyEEEN2pw10containers8internal13DequeIteratorINS4_12DynamicDequeIjtEEEESA_SA_TnNS_9enable_ifIXsr12__can_rewrapIT0_T2_EE5valueEiE4typeELi0EEENS_4pairISC_SD_EESC_T1_SD_

NEW

+54

pw::containers::internal::GenericDeque<>::ShiftForInsert()

NEW

+54

pw::containers::internal::GenericDeque<>::resize()

NEW

+52

pw::containers::internal::GenericDequeBase<>::AbsoluteIndexChecked()

NEW

+44

pw::containers::internal::GenericDeque<>::front()

NEW

+44

pw::containers::internal::GenericDeque<>::pop_front()

NEW

+40

_ZN2pw10containers8internal12GenericDequeINS_12DynamicDequeIjtEEjNS1_16CountAndCapacityItEEE6assignINSt3__211__wrap_iterIPjEETpTnRiJEvEEvT_SE_

NEW

+40

_ZNSt3__222__uninitialized_fill_nB9nqn220000IjN2pw10containers8internal13DequeIteratorINS1_12DynamicDequeIjtEEEEtjEET0_S8_T1_RKT2_

NEW

+40

pw::containers::internal::GenericDeque<>::pop_back()

NEW

+40

pw::containers::internal::GenericDeque<>::push_back()

NEW

+40

pw::containers::internal::GenericDeque<>::push_front()

NEW

+40

pw::containers::internal::GenericDeque<>::try_emplace_front<>()

NEW

+36

_ZNSt3__213move_backwardB9nqn220000IN2pw10containers8internal13DequeIteratorINS1_12DynamicDequeIjtEEEES7_EET0_T_S9_S8_

NEW

+36

_ZNSt3__218uninitialized_moveB9nqn220000IN2pw10containers8internal13DequeIteratorINS1_12DynamicDequeIjtEEEES7_EET0_T_S9_S8_

NEW

+36

_ZNSt3__24moveB9nqn220000IN2pw10containers8internal13DequeIteratorINS1_12DynamicDequeIjtEEEES7_EET0_T_S9_S8_

NEW

+36

pw::containers::size_report::MeasureContainer<>()

NEW

+30

pw::containers::internal::GenericDeque<>::try_emplace_back<>()

NEW

+24

pw::containers::internal::GenericDequeBase<>::PopFront()

NEW

+24

pw::containers::internal::GenericDequeBase<>::PushBack()

NEW

+22

pw::containers::internal::GenericDeque<>::CheckCapacityAdd()

NEW

+22

pw::containers::internal::GenericDeque<>::EmplaceBackUnchecked<>()

NEW

+22

pw::containers::internal::GenericDequeBase<>::PopBack()

NEW

+20

pw::containers::internal::GenericDequeBase<>::PushFront()

NEW

+16

_ZNSt3__220uninitialized_move_nB9nqn220000IN2pw10containers8internal13DequeIteratorINS1_12DynamicDequeIjtEEEEtS7_EENS_4pairIT_T1_EES9_T0_SA_

NEW

+16

pw::containers::internal::GenericDeque<>::at()

NEW

+12

pw::containers::internal::DequeIterator<>::operator*()

+2,960

RAM

-8

[section .data]

+1

__Thumbv6MABSLongThunk_best_effort_wfe_or_timeout

NEW

+39

pw::containers::size_report::GetItems<>()::items

NEW

+16

_ZZN2pw10containers11size_report19MeasureDynamicDequeIjTpTnRiJENSt3__211__wrap_iterIPjEEEEiT1_S8_jE13dynamic_deque

NEW

+4

_ZGVZN2pw10containers11size_report19MeasureDynamicDequeIjTpTnRiJENSt3__211__wrap_iterIPjEEEEiT1_S8_jE13dynamic_deque

+52

Additional DynamicDeque with different item type

FLASH

+156

pw::containers::internal::GenericDeque<>::erase()

+148

pw::DynamicDeque<>::ReallocateBuffer()

+84

pw::DynamicDeque<>::shrink_to_fit()

+84

pw::containers::internal::GenericDeque<>::ShiftLeft()

+82

pw::containers::internal::GenericDeque<>::contiguous_data()

+78

pw::containers::internal::GenericDeque<>::ShiftRight()

+76

pw::containers::internal::GenericDeque<>::try_resize()

+74

pw::DynamicDeque<>::try_reserve()

+68

pw::DynamicDeque<>::IncreaseCapacity()

+68

pw::containers::internal::GenericDeque<>::insert()

+66

pw::containers::internal::GenericDeque<>::try_insert()

+60

pw::containers::internal::GenericDeque<>::back()

+54

pw::containers::internal::GenericDeque<>::ShiftForInsert()

+56

pw::containers::internal::GenericDeque<>::resize()

+44

pw::containers::internal::GenericDeque<>::front()

+44

pw::containers::internal::GenericDeque<>::pop_front()

+40

pw::containers::internal::GenericDeque<>::pop_back()

+40

pw::containers::internal::GenericDeque<>::push_back()

+40

pw::containers::internal::GenericDeque<>::push_front()

+46

pw::containers::internal::GenericDeque<>::try_emplace_front<>()

+36

pw::containers::size_report::MeasureContainer<>()

+30

pw::containers::internal::GenericDeque<>::try_emplace_back<>()

+20

pw::containers::size_report::Measure()

+22

pw::containers::internal::GenericDeque<>::CheckCapacityAdd()

+26

pw::containers::internal::GenericDeque<>::EmplaceBackUnchecked<>()

+14

pw::containers::internal::GenericDeque<>::at()

+4

vClearInterruptMaskFromISR

+12

pw::containers::internal::DequeIterator<>::operator*()

NEW

+200

_ZN2pw10containers11size_report12MeasureDequeINS_12DynamicDequeIytEETpTnRiJENSt3__211__wrap_iterIPyEEEEiRT_T1_SC_j

NEW

+108

_ZN2pw10containers8internal12GenericDequeINS_12DynamicDequeIytEEyNS1_16CountAndCapacityItEEE10try_assignINSt3__211__wrap_iterIPyEETpTnRiJEvEEbT_SE_

NEW

+106

_ZNKSt3__211__move_implINS_17_ClassicAlgPolicyEEclB9nqn220000IN2pw10containers8internal13DequeIteratorINS4_12DynamicDequeIytEEEESA_SA_EENS_4pairIT_T1_EESC_T0_SD_

NEW

+104

_ZNSt3__220__uninitialized_moveB9nqn220000IyN2pw10containers8internal13DequeIteratorINS1_12DynamicDequeIytEEEES7_S7_NS_14__always_falseEZNS_18uninitialized_moveB9nqn220000IS7_S7_EET0_T_SB_SA_EUlOSB_E_EENS_4pairISA_T2_EESA_T1_SF_T3_T4_

NEW

+102

_ZNKSt3__220__move_backward_implINS_17_ClassicAlgPolicyEEclB9nqn220000IN2pw10containers8internal13DequeIteratorINS4_12DynamicDequeIytEEEESA_SA_EENS_4pairIT_T1_EESC_T0_SD_

NEW

+90

_ZNSt3__222__uninitialized_move_nB9nqn220000IyN2pw10containers8internal13DequeIteratorINS1_12DynamicDequeIytEEEEtS7_NS_14__always_falseEZNS_20uninitialized_move_nB9nqn220000IS7_tS7_EENS_4pairIT_T1_EESB_T0_SC_EUlOSB_E_EENSA_ISE_T2_EESE_SC_SH_T3_T4_

NEW

+60

_ZN2pw10containers11size_report19MeasureDynamicDequeIyTpTnRiJENSt3__211__wrap_iterIPyEEEEiT1_S8_j

NEW

+54

_ZNSt3__224__copy_move_unwrap_itersB9nqn220000INS_11__move_implINS_17_ClassicAlgPolicyEEEN2pw10containers8internal13DequeIteratorINS4_12DynamicDequeIytEEEESA_SA_TnNS_9enable_ifIXsr12__can_rewrapIT0_T2_EE5valueEiE4typeELi0EEENS_4pairISC_SD_EESC_T1_SD_

NEW

+54

_ZNSt3__224__copy_move_unwrap_itersB9nqn220000INS_20__move_backward_implINS_17_ClassicAlgPolicyEEEN2pw10containers8internal13DequeIteratorINS4_12DynamicDequeIytEEEESA_SA_TnNS_9enable_ifIXsr12__can_rewrapIT0_T2_EE5valueEiE4typeELi0EEENS_4pairISC_SD_EESC_T1_SD_

NEW

+42

_ZNSt3__222__uninitialized_fill_nB9nqn220000IyN2pw10containers8internal13DequeIteratorINS1_12DynamicDequeIytEEEEtyEET0_S8_T1_RKT2_

NEW

+40

_ZN2pw10containers8internal12GenericDequeINS_12DynamicDequeIytEEyNS1_16CountAndCapacityItEEE6assignINSt3__211__wrap_iterIPyEETpTnRiJEvEEvT_SE_

NEW

+36

_ZNSt3__213move_backwardB9nqn220000IN2pw10containers8internal13DequeIteratorINS1_12DynamicDequeIytEEEES7_EET0_T_S9_S8_

NEW

+36

_ZNSt3__218uninitialized_moveB9nqn220000IN2pw10containers8internal13DequeIteratorINS1_12DynamicDequeIytEEEES7_EET0_T_S9_S8_

NEW

+36

_ZNSt3__24moveB9nqn220000IN2pw10containers8internal13DequeIteratorINS1_12DynamicDequeIytEEEES7_EET0_T_S9_S8_

NEW

+16

_ZNSt3__220uninitialized_move_nB9nqn220000IN2pw10containers8internal13DequeIteratorINS1_12DynamicDequeIytEEEEtS7_EENS_4pairIT_T1_EES9_T0_SA_

+2,656

RAM

+84

pw::containers::size_report::GetItems<>()::items

-4

[section .data]

NEW

+16

_ZZN2pw10containers11size_report19MeasureDynamicDequeIyTpTnRiJENSt3__211__wrap_iterIPyEEEEiT1_S8_jE13dynamic_deque

NEW

+4

_ZGVZN2pw10containers11size_report19MeasureDynamicDequeIyTpTnRiJENSt3__211__wrap_iterIPyEEEEiT1_S8_jE13dynamic_deque

+100

FixedDeque (static)

FLASH

+192

[section .rodata]

+2

pw::allocator::Layout::Of<>()

+4

pw::containers::size_report::Measure()

+4

vClearInterruptMaskFromISR

+2

main

NEW

+136

_ZN2pw10containers11size_report12MeasureDequeINS_5DequeIjtEETpTnRiJENSt3__211__wrap_iterIPjEEEEiRT_T1_SC_j

NEW

+68

pw::containers::internal::GenericDeque<>::try_resize()

NEW

+60

pw::containers::internal::GenericDeque<>::back()

NEW

+56

pw::containers::internal::GenericDeque<>::try_emplace_front<>()

NEW

+54

pw::containers::internal::GenericDeque<>::resize()

NEW

+48

pw::containers::size_report::GetContainer<>()

NEW

+46

pw::containers::size_report::MeasureContainer<>()

NEW

+44

pw::containers::internal::GenericDeque<>::front()

NEW

+44

pw::containers::internal::GenericDeque<>::pop_front()

NEW

+40

pw::containers::internal::GenericDeque<>::pop_back()

NEW

+40

pw::containers::internal::GenericDeque<>::push_back()

NEW

+40

pw::containers::internal::GenericDeque<>::push_front()

NEW

+38

pw::containers::internal::GenericDeque<>::try_emplace_back<>()

NEW

+34

_ZN2pw10containers8internal12GenericDequeINS_5DequeIjtEEjNS1_16CountAndCapacityItEEE6assignINSt3__211__wrap_iterIPjEETpTnRiJEvEEvT_SE_

NEW

+26

_ZN2pw10containers11size_report17MeasureFixedDequeIjTpTnRiJENSt3__211__wrap_iterIPjEEEEiT1_S8_j

NEW

+24

pw::containers::internal::GenericDequeBase<>::PopFront()

NEW

+24

pw::containers::internal::GenericDequeBase<>::PushBack()

NEW

+22

pw::containers::internal::GenericDequeBase<>::PopBack()

NEW

+20

pw::containers::internal::GenericDeque<>::EmplaceBackUnchecked<>()

NEW

+20

pw::containers::internal::GenericDequeBase<>::PushFront()

+1,088

RAM

-8

[section .data]

+1

__Thumbv6MABSLongThunk_best_effort_wfe_or_timeout

NEW

+56

pw::containers::size_report::GetContainer<>()::container

NEW

+39

pw::containers::size_report::GetItems<>()::items

+88

Additional FixedDeque (static) with different item type

FLASH

+68

pw::containers::internal::GenericDeque<>::try_resize()

+60

pw::containers::internal::GenericDeque<>::back()

+62

pw::containers::internal::GenericDeque<>::try_emplace_front<>()

+56

pw::containers::internal::GenericDeque<>::resize()

+48

pw::containers::size_report::GetContainer<>()

+46

pw::containers::size_report::MeasureContainer<>()

+44

pw::containers::internal::GenericDeque<>::front()

+44

pw::containers::internal::GenericDeque<>::pop_front()

+40

pw::containers::internal::GenericDeque<>::pop_back()

+40

pw::containers::internal::GenericDeque<>::push_back()

+40

pw::containers::internal::GenericDeque<>::push_front()

+38

pw::containers::internal::GenericDeque<>::try_emplace_back<>()

+20

pw::containers::size_report::Measure()

+28

pw::containers::internal::GenericDeque<>::EmplaceBackUnchecked<>()

-8

vClearInterruptMaskFromISR

-2

main

NEW

+148

_ZN2pw10containers11size_report12MeasureDequeINS_5DequeIytEETpTnRiJENSt3__211__wrap_iterIPyEEEEiRT_T1_SC_j

NEW

+34

_ZN2pw10containers8internal12GenericDequeINS_5DequeIytEEyNS1_16CountAndCapacityItEEE6assignINSt3__211__wrap_iterIPyEETpTnRiJEvEEvT_SE_

NEW

+26

_ZN2pw10containers11size_report17MeasureFixedDequeIyTpTnRiJENSt3__211__wrap_iterIPyEEEEiT1_S8_j

+832

RAM

+100

pw::containers::size_report::GetContainer<>()::container

+84

pw::containers::size_report::GetItems<>()::items

-4

[section .data]

+180

FixedDeque (dynamic)

FLASH

+308

[section .rodata]

+4

pw::containers::size_report::Measure()

-4

__bi_84

+8

vClearInterruptMaskFromISR

NEW

+136

_ZN2pw10containers11size_report12MeasureDequeINS_5DequeIjtEETpTnRiJENSt3__211__wrap_iterIPjEEEEiRT_T1_SC_j

NEW

+68

pw::containers::internal::GenericDeque<>::try_resize()

NEW

+64

pw::FixedDeque<>::TryAllocate()

NEW

+60

_ZN2pw10containers11size_report17MeasureFixedDequeIjTpTnRiJENSt3__211__wrap_iterIPjEEEEiT1_S8_j

NEW

+60

pw::containers::internal::GenericDeque<>::back()

NEW

+56

pw::containers::internal::GenericDeque<>::try_emplace_front<>()

NEW

+54

pw::containers::internal::GenericDeque<>::resize()

NEW

+46

pw::containers::size_report::MeasureContainer<>()

NEW

+44

pw::FixedDeque<>::Allocate()

NEW

+44

pw::containers::internal::GenericDeque<>::front()

NEW

+44

pw::containers::internal::GenericDeque<>::pop_front()

NEW

+40

pw::containers::internal::GenericDeque<>::pop_back()

NEW

+40

pw::containers::internal::GenericDeque<>::push_back()

NEW

+40

pw::containers::internal::GenericDeque<>::push_front()

NEW

+38

pw::containers::internal::GenericDeque<>::try_emplace_back<>()

NEW

+34

_ZN2pw10containers8internal12GenericDequeINS_5DequeIjtEEjNS1_16CountAndCapacityItEEE6assignINSt3__211__wrap_iterIPjEETpTnRiJEvEEvT_SE_

NEW

+26

pw::containers::internal::GenericDequeBase<>::PushBack()

NEW

+24

pw::containers::internal::GenericDequeBase<>::PopFront()

NEW

+22

pw::containers::internal::GenericDequeBase<>::PopBack()

NEW

+20

pw::containers::internal::GenericDeque<>::EmplaceBackUnchecked<>()

NEW

+20

pw::containers::internal::GenericDequeBase<>::PushFront()

+1,296

RAM

-8

[section .data]

+1

__Thumbv6MABSLongThunk_best_effort_wfe_or_timeout

NEW

+39

pw::containers::size_report::GetItems<>()::items

NEW

+16

_ZZN2pw10containers11size_report17MeasureFixedDequeIjTpTnRiJENSt3__211__wrap_iterIPjEEEEiT1_S8_jE11fixed_deque

NEW

+4

_ZGVZN2pw10containers11size_report17MeasureFixedDequeIjTpTnRiJENSt3__211__wrap_iterIPjEEEEiT1_S8_jE11fixed_deque

+52

Additional FixedDeque (dynamic) with different item type

FLASH

+68

pw::containers::internal::GenericDeque<>::try_resize()

+64

pw::FixedDeque<>::TryAllocate()

+60

pw::containers::internal::GenericDeque<>::back()

+62

pw::containers::internal::GenericDeque<>::try_emplace_front<>()

+56

pw::containers::internal::GenericDeque<>::resize()

+46

pw::containers::size_report::MeasureContainer<>()

+44

pw::FixedDeque<>::Allocate()

+44

pw::containers::internal::GenericDeque<>::front()

+44

pw::containers::internal::GenericDeque<>::pop_front()

+40

pw::containers::internal::GenericDeque<>::pop_back()

+40

pw::containers::internal::GenericDeque<>::push_back()

+40

pw::containers::internal::GenericDeque<>::push_front()

+38

pw::containers::internal::GenericDeque<>::try_emplace_back<>()

+20

pw::containers::size_report::Measure()

+28

pw::containers::internal::GenericDeque<>::EmplaceBackUnchecked<>()

-8

vClearInterruptMaskFromISR

NEW

+148

_ZN2pw10containers11size_report12MeasureDequeINS_5DequeIytEETpTnRiJENSt3__211__wrap_iterIPyEEEEiRT_T1_SC_j

NEW

+60

_ZN2pw10containers11size_report17MeasureFixedDequeIyTpTnRiJENSt3__211__wrap_iterIPyEEEEiT1_S8_j

NEW

+34

_ZN2pw10containers8internal12GenericDequeINS_5DequeIytEEyNS1_16CountAndCapacityItEEE6assignINSt3__211__wrap_iterIPyEETpTnRiJEvEEvT_SE_

+928

RAM

+84

pw::containers::size_report::GetItems<>()::items

-4

[section .data]

NEW

+16

_ZZN2pw10containers11size_report17MeasureFixedDequeIyTpTnRiJENSt3__211__wrap_iterIPyEEEEiT1_S8_jE11fixed_deque

NEW

+4

_ZGVZN2pw10containers11size_report17MeasureFixedDequeIyTpTnRiJENSt3__211__wrap_iterIPyEEEEiT1_S8_jE11fixed_deque

+100

FixedDeque (static and dynamic)

FLASH

+308

[section .rodata]

+2

pw::allocator::Layout::Of<>()

+68

pw::containers::size_report::Measure()

-4

__bi_84

+4

vClearInterruptMaskFromISR

NEW

+136

_ZN2pw10containers11size_report12MeasureDequeINS_5DequeIjtEETpTnRiJENSt3__211__wrap_iterIPjEEEEiRT_T1_SC_j

NEW

+68

pw::containers::internal::GenericDeque<>::try_resize()

NEW

+64

pw::FixedDeque<>::TryAllocate()

NEW

+60

pw::containers::internal::GenericDeque<>::back()

NEW

+56

pw::containers::internal::GenericDeque<>::try_emplace_front<>()

NEW

+54

pw::containers::internal::GenericDeque<>::resize()

NEW

+48

pw::containers::size_report::GetContainer<>()

NEW

+46

pw::containers::size_report::MeasureContainer<>()

NEW

+44

pw::FixedDeque<>::Allocate()

NEW

+44

pw::containers::internal::GenericDeque<>::front()

NEW

+44

pw::containers::internal::GenericDeque<>::pop_front()

NEW

+40

pw::containers::internal::GenericDeque<>::pop_back()

NEW

+40

pw::containers::internal::GenericDeque<>::push_back()

NEW

+40

pw::containers::internal::GenericDeque<>::push_front()

NEW

+38

pw::containers::internal::GenericDeque<>::try_emplace_back<>()

NEW

+34

_ZN2pw10containers8internal12GenericDequeINS_5DequeIjtEEjNS1_16CountAndCapacityItEEE6assignINSt3__211__wrap_iterIPjEETpTnRiJEvEEvT_SE_

NEW

+24

pw::containers::internal::GenericDequeBase<>::PopFront()

NEW

+24

pw::containers::internal::GenericDequeBase<>::PushBack()

NEW

+22

pw::containers::internal::GenericDequeBase<>::PopBack()

NEW

+20

pw::containers::internal::GenericDeque<>::EmplaceBackUnchecked<>()

NEW

+20

pw::containers::internal::GenericDequeBase<>::PushFront()

+1,344

RAM

-8

[section .data]

+1

__Thumbv6MABSLongThunk_best_effort_wfe_or_timeout

NEW

+56

pw::containers::size_report::GetContainer<>()::container

NEW

+39

pw::containers::size_report::GetItems<>()::items

NEW

+16

_ZZN2pw10containers11size_report12_GLOBAL__N_114MeasureDynamicIjTpTnRiJENSt3__211__wrap_iterIPjEEEEiT1_S9_jE11fixed_deque

NEW

+4

_ZGVZN2pw10containers11size_report12_GLOBAL__N_114MeasureDynamicIjTpTnRiJENSt3__211__wrap_iterIPjEEEEiT1_S9_jE11fixed_deque

+108

InlineDeque

FLASH

+192

[section .rodata]

+2

pw::allocator::Layout::Of<>()

+8

pw::containers::size_report::Measure()

NEW

+132

_ZN2pw10containers11size_report12MeasureDequeINS0_8internal20BasicInlineDequeImplIjNS3_16CountAndCapacityItEELj10EEETpTnRiJENSt3__211__wrap_iterIPjEEEEiRT_T1_SF_j

NEW

+68

pw::containers::internal::GenericDeque<>::try_resize()

NEW

+60

pw::containers::internal::GenericDeque<>::back()

NEW

+56

pw::containers::internal::GenericDeque<>::try_emplace_front<>()

NEW

+54

pw::containers::internal::GenericDeque<>::resize()

NEW

+46

pw::containers::size_report::MeasureContainer<>()

NEW

+44

pw::containers::internal::GenericDeque<>::front()

NEW

+44

pw::containers::internal::GenericDeque<>::pop_front()

NEW

+40

pw::containers::internal::GenericDeque<>::pop_back()

NEW

+40

pw::containers::internal::GenericDeque<>::push_back()

NEW

+40

pw::containers::internal::GenericDeque<>::push_front()

NEW

+38

pw::containers::internal::GenericDeque<>::try_emplace_back<>()

NEW

+34

_ZN2pw10containers8internal12GenericDequeINS1_20BasicInlineDequeImplIjNS1_16CountAndCapacityItEELj4294967295EEEjS5_E6assignINSt3__211__wrap_iterIPjEETpTnRiJEvEEvT_SE_

NEW

+24

pw::containers::internal::GenericDequeBase<>::PopFront()

NEW

+24

pw::containers::internal::GenericDequeBase<>::PushBack()

NEW

+22

pw::containers::internal::GenericDequeBase<>::PopBack()

NEW

+20

pw::containers::internal::GenericDeque<>::EmplaceBackUnchecked<>()

NEW

+20

pw::containers::internal::GenericDequeBase<>::PushFront()

+1,008

RAM

-8

[section .data]

+1

__Thumbv6MABSLongThunk_best_effort_wfe_or_timeout

NEW

+48

pw::containers::size_report::GetContainer<>()::container

NEW

+39

pw::containers::size_report::GetItems<>()::items

+80

Additional InlineDeque with different item type

FLASH

+68

pw::containers::internal::GenericDeque<>::try_resize()

+60

pw::containers::internal::GenericDeque<>::back()

+60

pw::containers::internal::GenericDeque<>::try_emplace_front<>()

+56

pw::containers::internal::GenericDeque<>::resize()

+46

pw::containers::size_report::MeasureContainer<>()

+44

pw::containers::internal::GenericDeque<>::front()

+44

pw::containers::internal::GenericDeque<>::pop_front()

+40

pw::containers::internal::GenericDeque<>::pop_back()

+40

pw::containers::internal::GenericDeque<>::push_back()

+40

pw::containers::internal::GenericDeque<>::push_front()

+38

pw::containers::internal::GenericDeque<>::try_emplace_back<>()

+28

pw::containers::size_report::Measure()

+26

pw::containers::internal::GenericDeque<>::EmplaceBackUnchecked<>()

NEW

+144

_ZN2pw10containers11size_report12MeasureDequeINS0_8internal20BasicInlineDequeImplIyNS3_16CountAndCapacityItEELj10EEETpTnRiJENSt3__211__wrap_iterIPyEEEEiRT_T1_SF_j

NEW

+34

_ZN2pw10containers8internal12GenericDequeINS1_20BasicInlineDequeImplIyNS1_16CountAndCapacityItEELj4294967295EEEyS5_E6assignINSt3__211__wrap_iterIPyEETpTnRiJEvEEvT_SE_

+768

RAM

+88

pw::containers::size_report::GetContainer<>()::container

+84

pw::containers::size_report::GetItems<>()::items

+4

[section .data]

+176

InlineQueue

FLASH

+172

[section .rodata]

+4

pw::containers::size_report::Measure()

-4

__bi_84

NEW

+92

_ZN2pw10containers11size_report18MeasureInlineQueueIjTpTnRiJENSt3__211__wrap_iterIPjEEEEiT1_S8_j

NEW

+44

pw::containers::internal::GenericDeque<>::front()

NEW

+44

pw::containers::internal::GenericDeque<>::pop_front()

NEW

+44

pw::containers::size_report::MeasureContainer<>()

NEW

+40

pw::containers::internal::GenericDeque<>::emplace_back<>()

NEW

+40

pw::containers::internal::GenericDeque<>::push_back()

NEW

+38

pw::containers::internal::GenericDeque<>::try_emplace_back<>()

NEW

+32

pw::containers::internal::BasicInlineQueueImpl<>::emplace_overwrite<>()

NEW

+26

pw::containers::internal::GenericDequeBase<>::PushBack()

NEW

+24

pw::containers::internal::GenericDequeBase<>::PopFront()

NEW

+20

pw::containers::internal::GenericDeque<>::EmplaceBackUnchecked<>()

+616

RAM

-8

[section .data]

+1

__Thumbv6MABSLongThunk_best_effort_wfe_or_timeout

NEW

+48

pw::containers::size_report::GetContainer<>()::container

NEW

+39

pw::containers::size_report::GetItems<>()::items

+80

Additional InlineQueue with different item type

FLASH

+44

pw::containers::internal::GenericDeque<>::front()

+44

pw::containers::internal::GenericDeque<>::pop_front()

+44

pw::containers::size_report::MeasureContainer<>()

+40

pw::containers::internal::GenericDeque<>::emplace_back<>()

+40

pw::containers::internal::GenericDeque<>::push_back()

+38

pw::containers::internal::GenericDeque<>::try_emplace_back<>()

+32

pw::containers::internal::BasicInlineQueueImpl<>::emplace_overwrite<>()

+20

pw::containers::size_report::Measure()

+26

pw::containers::internal::GenericDeque<>::EmplaceBackUnchecked<>()

+8

vClearInterruptMaskFromISR

NEW

+96

_ZN2pw10containers11size_report18MeasureInlineQueueIyTpTnRiJENSt3__211__wrap_iterIPyEEEEiT1_S8_j

+432

RAM

+88

pw::containers::size_report::GetContainer<>()::container

+84

pw::containers::size_report::GetItems<>()::items

+4

[section .data]

+176

InlineDeque and InlineQueue

FLASH

+204

[section .rodata]

+2

pw::allocator::Layout::Of<>()

+28

pw::containers::size_report::Measure()

-4

__bi_84

-4

vClearInterruptMaskFromISR

NEW

+132

_ZN2pw10containers11size_report12MeasureDequeINS0_8internal20BasicInlineDequeImplIjNS3_16CountAndCapacityItEELj10EEETpTnRiJENSt3__211__wrap_iterIPjEEEEiRT_T1_SF_j

NEW

+92

_ZN2pw10containers11size_report18MeasureInlineQueueIjTpTnRiJENSt3__211__wrap_iterIPjEEEEiT1_S8_j

NEW

+90

pw::containers::size_report::MeasureContainer<>()

NEW

+68

pw::containers::internal::GenericDeque<>::try_resize()

NEW

+60

pw::containers::internal::GenericDeque<>::back()

NEW

+56

pw::containers::internal::GenericDeque<>::try_emplace_front<>()

NEW

+54

pw::containers::internal::GenericDeque<>::resize()

NEW

+44

pw::containers::internal::GenericDeque<>::front()

NEW

+44

pw::containers::internal::GenericDeque<>::pop_front()

NEW

+40

pw::containers::internal::GenericDeque<>::emplace_back<>()

NEW

+40

pw::containers::internal::GenericDeque<>::pop_back()

NEW

+40

pw::containers::internal::GenericDeque<>::push_back()

NEW

+40

pw::containers::internal::GenericDeque<>::push_front()

NEW

+38

pw::containers::internal::GenericDeque<>::try_emplace_back<>()

NEW

+34

_ZN2pw10containers8internal12GenericDequeINS1_20BasicInlineDequeImplIjNS1_16CountAndCapacityItEELj4294967295EEEjS5_E6assignINSt3__211__wrap_iterIPjEETpTnRiJEvEEvT_SE_

NEW

+32

pw::containers::internal::BasicInlineQueueImpl<>::emplace_overwrite<>()

NEW

+24

pw::containers::internal::GenericDequeBase<>::PopFront()

NEW

+24

pw::containers::internal::GenericDequeBase<>::PushBack()

NEW

+22

pw::containers::internal::GenericDequeBase<>::PopBack()

NEW

+20

pw::containers::internal::GenericDeque<>::EmplaceBackUnchecked<>()

NEW

+20

pw::containers::internal::GenericDequeBase<>::PushFront()

+1,240

RAM

-8

[section .data]

+1

__Thumbv6MABSLongThunk_best_effort_wfe_or_timeout

NEW

+96

pw::containers::size_report::GetContainer<>()::container

NEW

+39

pw::containers::size_report::GetItems<>()::items

+128

API reference#

Moved: pw_containers_queues