Maps#

pw_containers: Generic collections of objects for embedded devices

A map is an associative collection of keys that map to values. Pigweed provides an implementation of a constant “flat” map that can find values by key in constant time. It also provides implementations of dynamic maps that can insert, find, and remove key-value pairs in logarithmic time.

pw::containers::FlatMap#

FlatMap provides a simple, fixed-size associative array with O(log n) lookup by key.

pw::containers::FlatMap contains the same methods and features for looking up data as std::map. However, modification of the underlying data is limited to the mapped values, via .at() (key must exist) and mapped_iterator objects returned by .mapped_begin() and .mapped_end(). mapped_iterator objects are bidirectional iterators that can be dereferenced to access and mutate the mapped value objects.

The underlying array in pw::containers::FlatMap does not need to be sorted. During construction, pw::containers::FlatMap will perform a constexpr insertion sort.

Examples#

A FlatMap can be created in one of several ways. Each of the following examples defines a FlatMap with two items.

 1using pw::containers::FlatMap;
 2using pw::containers::Pair;
 3
 4// Initialized by an initializer list.
 5FlatMap<int, char, 2> my_flat_map1({{
 6    {1, 'a'},
 7    {-3, 'b'},
 8}});
 9
10// Initialized by a std::array of Pair<K, V> objects.
11std::array<Pair<int, char>, 2> my_array{{
12    {1, 'a'},
13    {-3, 'b'},
14}};
15FlatMap my_flat_map2(my_array);
16
17// Initialized by Pair<K, V> objects.
18FlatMap my_flat_map3 = {
19    Pair<int, char>{1, 'a'},
20    Pair<int, char>{-3, 'b'},
21};

pw::IntrusiveMap#

pw::IntrusiveMap provides an embedded-friendly, tree-based, intrusive map implementation. The intrusive aspect of the map is very similar to that of pw::IntrusiveList.

This class is similar to std::map<K, V>. Items to be added must derive from pw::IntrusiveMap<K, V>::Item or an equivalent type.

See also Using items with multiple containers.

Example#

 1struct Book : public pw::IntrusiveMap<uint32_t, Book>::Pair {
 2 private:
 3  using Pair = pw::IntrusiveMap<uint32_t, Book>::Pair;
 4
 5 public:
 6  Book(const char* name, uint32_t oclc) : Pair(oclc), name_(name) {}
 7  const char* name() const { return name_; }
 8
 9 private:
10  const char* name_;
11};
12
13std::array<Book, 8> books = {{
14    {"A Tale of Two Cities", 20848014u},
15    {"The Little Prince", 182537909u},
16    {"The Alchemist", 26857452u},
17    {"Harry Potter and the Philosopher's Stone", 44795766u},
18    {"And Then There Were None", 47032439u},
19    {"Dream of the Red Chamber", 20692970u},
20    {"The Hobbit", 1827184u},
21    {"Alice's Adventures in Wonderland", 5635965u},
22}};
23
24pw::IntrusiveMap<uint32_t, Book> library(books.begin(), books.end());
25
26void VisitLibrary(pw::IntrusiveMap<uint32_t, Book>& book_bag) {
27  // Return any books we previously checked out.
28  library.merge(book_bag);
29
30  // Pick out some new books to read to the kids, but only if they're available.
31  std::array<uint32_t, 3> oclcs = {
32      1827184u,   // The Hobbit
33      11914189u,  // Curious George
34      44795766u,  // Harry Potter
35  };
36  for (uint32_t oclc : oclcs) {
37    auto iter = library.find(oclc);
38    if (iter != library.end()) {
39      Book& book = *iter;
40      library.erase(iter);
41      book_bag.insert(book);
42    }
43  }
44}

If you need to add this item to containers of more than one type, see Using items with multiple containers,

pw::IntrusiveMultiMap#

pw::IntrusiveMultiMap provides an embedded-friendly, tree-based, intrusive multimap implementation. This is very similar to pw::IntrusiveMap, except that the tree may contain multiple items with equivalent keys.

This class is similar to std::multimap<K, V>. Items to be added must derive from pw::IntrusiveMultiMap<K, V>::Item or an equivalent type.

See also Using items with multiple containers.

Example#

 1struct Book : public pw::IntrusiveMultiMap<uint32_t, Book>::Pair {
 2 private:
 3  using Pair = pw::IntrusiveMultiMap<uint32_t, Book>::Pair;
 4
 5 public:
 6  Book(const char* name, uint32_t oclc) : Pair(oclc), name_(name) {}
 7  const char* name() const { return name_; }
 8
 9 private:
10  const char* name_;
11};
12
13std::array<Book, 12> books = {{
14    {"The Little Prince", 182537909u},
15    {"Harry Potter and the Philosopher's Stone", 44795766u},
16    {"Harry Potter and the Philosopher's Stone", 44795766u},
17    {"Harry Potter and the Philosopher's Stone", 44795766u},
18    {"Harry Potter and the Philosopher's Stone", 44795766u},
19    {"Harry Potter and the Philosopher's Stone", 44795766u},
20    {"The Hobbit", 1827184u},
21    {"The Hobbit", 1827184u},
22    {"The Hobbit", 1827184u},
23    {"The Hobbit", 1827184u},
24    {"Alice's Adventures in Wonderland", 5635965u},
25    {"Alice's Adventures in Wonderland", 5635965u},
26}};
27pw::IntrusiveMultiMap<uint32_t, Book> library(books.begin(), books.end());
28
29void VisitLibrary(pw::IntrusiveMultiMap<uint32_t, Book>& book_bag) {
30  // Pick out some new books to read to the kids, but only if they're available.
31  std::array<uint32_t, 3> oclcs = {
32      1827184u,    // The Hobbit
33      5635965u,    // Alice's Adventures in Wonderland
34      182537909u,  // The Little Prince
35  };
36  for (uint32_t oclc : oclcs) {
37    auto iter = library.find(oclc);
38    if (iter != library.end()) {
39      Book& book = *iter;
40      library.erase(iter);
41      book_bag.insert(book);
42    }
43  }
44}

If you need to add this item to containers of more than one type, see Using items with multiple containers.

pw::DynamicHashMap#

pw::DynamicHashMap is an unordered associative container, similar to std::unordered_map, but optimized for memory-constrained environments.

Key features of pw::DynamicHashMap:

  • Allocator-driven: Uses a pw::Allocator for all memory operations.

  • Hybrid Storage:
    • Nodes: Stored in a dense pw::DynamicPtrVector to enable efficient, linear iteration.

    • Buckets: Stored in a pw::DynamicDeque for O(1) average lookup.

  • Fallible API: Adds try_* versions of operations (e.g., try_insert, try_emplace, try_rehash) that return std::nullopt or false on allocation failure instead of crashing.

  • Unstable Iteration: Uses “swap-and-pop” erasure for efficiency. Erasing an element moves the last element of the map into the erased position, changing the iteration order.

  • Flexible Load Factor: Supports a load factor up to 500%. While 75% is standard for speed, higher limits allow shrinking the bucket array’s footprint when RAM is more scarce than CPU cycles.

Example#

 1struct Book {
 2  Book(const char* n, uint32_t o) : name(n), oclc(o) {}
 3
 4  const char* name;
 5  uint32_t oclc;
 6};
 7
 8void PopulateLibrary(pw::DynamicHashMap<uint32_t, Book>& library) {
 9  library.emplace(20848014u, "A Tale of Two Cities", 20848014u);
10  library.emplace(182537909u, "The Little Prince", 182537909u);
11  library.emplace(26857452u, "The Alchemist", 26857452u);
12  library.emplace(
13      44795766u, "Harry Potter and the Philosopher's Stone", 44795766u);
14  library.emplace(47032439u, "And Then There Were None", 47032439u);
15  library.emplace(20692970u, "Dream of the Red Chamber", 20692970u);
16  library.emplace(1827184u, "The Hobbit", 1827184u);
17  library.emplace(5635965u, "Alice's Adventures in Wonderland", 5635965u);
18}
19
20void VisitLibrary(pw::DynamicHashMap<uint32_t, Book>& library,
21                  pw::DynamicHashMap<uint32_t, Book>& book_bag) {
22  // Return any books we previously checked out.
23  // The merge function moves elements from book_bag into library if the
24  // key doesn't already exist in library.
25  library.merge(book_bag);
26
27  // Pick out some new books to read to the kids, but only if they're available.
28  std::array<uint32_t, 3> oclcs = {
29      1827184u,   // The Hobbit
30      11914189u,  // Curious George (Not in library)
31      44795766u,  // Harry Potter
32  };
33
34  for (uint32_t oclc : oclcs) {
35    auto iter = library.find(oclc);
36    if (iter != library.end()) {
37      // Move the book from the library into our bag.
38      // *iter refers to a pair<const Key, Value>.
39      if (book_bag.try_insert(*iter)) {
40        library.erase(iter);
41      }
42    }
43  }
44}

pw::DynamicMap#

pw::DynamicMap provides an embedded-friendly, tree-based, dynamic map implementation. It uses a pw::Allocator for all memory operations.

This class is similar to std::map<K, V>.

Key features of pw::DynamicMap:

Example#

 1struct Book {
 2  Book(const char* n, uint32_t o) : name(n), oclc(o) {}
 3
 4  const char* name;
 5  uint32_t oclc;
 6};
 7
 8void PopulateLibrary(pw::DynamicMap<uint32_t, Book>& library) {
 9  library.emplace(20848014u, "A Tale of Two Cities", 20848014u);
10  library.emplace(182537909u, "The Little Prince", 182537909u);
11  library.emplace(26857452u, "The Alchemist", 26857452u);
12  library.emplace(
13      44795766u, "Harry Potter and the Philosopher's Stone", 44795766u);
14  library.emplace(47032439u, "And Then There Were None", 47032439u);
15  library.emplace(20692970u, "Dream of the Red Chamber", 20692970u);
16  library.emplace(1827184u, "The Hobbit", 1827184u);
17  library.emplace(5635965u, "Alice's Adventures in Wonderland", 5635965u);
18}
19
20void VisitLibrary(pw::DynamicMap<uint32_t, Book>& library,
21                  pw::DynamicMap<uint32_t, Book>& book_bag) {
22  // Return any books we previously checked out.
23  library.merge(book_bag);
24
25  // Pick out some new books to read to the kids, but only if they're available.
26  std::array<uint32_t, 3> oclcs = {
27      1827184u,   // The Hobbit
28      11914189u,  // Curious George
29      44795766u,  // Harry Potter
30  };
31
32  for (uint32_t oclc : oclcs) {
33    auto iter = library.find(oclc);
34    if (iter != library.end()) {
35      if (book_bag.try_insert(*iter)) {
36        library.erase(iter);
37      }
38    }
39  }
40}

API reference#

Moved: pw_containers_maps

Size reports#

The tables below illustrate the following scenarios:

  • Scenarios related to FlatMap:

    • The memory and code size cost incurred by adding another FlatMap

    • The memory and code size cost incurred by adding another FlatMap with different key and value types. As FlatMap is templated on both key and value types, this results in additional code being generated.

  • Scenarios related to IntrusiveMap:

    • The memory and code size cost incurred by a adding a single IntrusiveMap.

    • The memory and code size cost incurred by adding another IntrusiveMap with the same key type, but a different value type. As IntrusiveMap is templated on both key and value types, this results in additional code being generated.

    • The memory and code size cost incurred by adding another IntrusiveMap with the same value type, but a different key type. As IntrusiveMap is templated on both key and value types, this results in additional code being generated.

  • Scenarios related to IntrusiveMultiMap:

    • The memory and code size cost incurred by a adding a single IntrusiveMultiMap.

    • The memory and code size cost incurred by adding another IntrusiveMultiMap with the same key type, but a different value type. As IntrusiveMultiMap is templated on both key and value types, this results in additional code being generated.

    • The memory and code size cost incurred by adding another IntrusiveMultiMap with the same value type, but a different key type. As IntrusiveMultiMap is templated on both key and value types, this results in additional code being generated.

  • The memory and code size cost incurred by a adding both an IntrusiveMap and an IntrusiveMultiMap of the same type. These types reuse code, so the combined sum is less than the sum of its parts.

  • Scenarios related to DynamicHashMap:

    • The memory and code size cost incurred by a adding a single DynamicHashMap.

    • The memory and code size cost incurred by adding another DynamicHashMap with the same key type, but a different value type. As DynamicHashMap is templated on both key and value types, this results in additional code being generated.

    • The memory and code size cost incurred by adding another DynamicHashMap with a different key type and a different value type. As DynamicHashMap is templated on both key and value types, this results in additional code being generated.

  • Scenarios related to DynamicMap:

    • The memory and code size cost incurred by a adding a single DynamicMap.

    • The memory and code size cost incurred by adding another DynamicMap with the same key type, but a different value type. As DynamicMap is templated on both key and value types, this results in additional code being generated.

    • The memory and code size cost incurred by adding another DynamicMap with a different key type and a different value type. As DynamicMap is templated on both key and value types, this results in additional code being generated.

Label

Segment

Delta

std::unordered_map

FLASH

+620

[section .rodata]

-8

vPortSVCHandler_C

+86

pw::string::FormatVaList()

-2

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

+4

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

-4

__bi_84

NEW

+712

std::__2::__hash_table<>::__emplace_unique[abi:nqn240000]<>()::{lambda()#1}::operator()[abi:nqn240000]()

NEW

+536

__aeabi_fdiv

NEW

+328

__subsf3

NEW

+316

std::__2::__next_prime()

NEW

+248

std::__2::__hash_table<>::remove[abi:nqn240000]()

NEW

+240

__aeabi_fadd

NEW

+240

std::__2::__hash_table<>::find[abi:nqn240000]<>()

NEW

+236

__aeabi_fmul

NEW

+192

std::__2::(anonymous namespace)::indices

NEW

+192

std::__2::(anonymous namespace)::small_primes

NEW

+174

std::__2::__hash_table<>::__do_rehash[abi:nqn240000]<>()

NEW

+168

__cmpsf2

NEW

+168

__gesf2

NEW

+154

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

NEW

+118

std::__2::__hash_table<>::__rehash[abi:nqn240000]<>()

NEW

+100

std::__2::__libcpp_verbose_abort()

NEW

+96

__compiler_rt_fnorm2

NEW

+96

ceilf

NEW

+92

__aeabi_ui2f

NEW

+92

__compiler_rt_funder

NEW

+80

__aeabi_frsub

NEW

+74

std::__2::__hash_table<>::__construct_node_hash[abi:nqn240000]<>()

NEW

+64

__aeabi_f2uiz

NEW

+60

__compiler_rt_fnan2

NEW

+56

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

NEW

+52

pw::InlineBasicString<>::SetSizeAndTerminate()

NEW

+48

std::__2::(anonymous namespace)::increments

NEW

+48

std::__2::unordered_map<>::insert[abi:nqn240000]<>()

NEW

+46

std::__2::__hash_table<>::clear[abi:nqn240000]()

NEW

+42

pw::InlineBasicString<>::InlineBasicString()

NEW

+42

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

NEW

+40

pw::string_impl::CheckedCastToSize<>()

NEW

+36

std::__2::__try_key_extraction[abi:nqn240000]<>()

NEW

+36

std::__2::__try_key_extraction_impl[abi:nqn240000]<>()

NEW

+34

std::__2::__hash_table<>::__reserve_unique[abi:nqn240000]()

NEW

+28

std::__2::__hash_table<>::__emplace_unique[abi:nqn240000]<>()

NEW

+28

std::__2::__hash_table<>::__erase_unique[abi:nqn240000]<>()

NEW

+28

std::__2::__hash_table<>::erase[abi:nqn240000]()

NEW

+26

std::__2::__hash_table<>::__equal_range_unique[abi:nqn240000]<>()

NEW

+22

std::__2::__hash_table<>::__deallocate_node_list[abi:nqn240000]()

NEW

+20

__aeabi_fcmpeq

NEW

+20

__aeabi_fcmpge

NEW

+20

__aeabi_fcmpgt

NEW

+20

__aeabi_fcmple

NEW

+20

__aeabi_fcmplt

NEW

+20

std::__2::unique_ptr<>::reset[abi:nqn240000]()

NEW

+20

std::__2::unique_ptr<>::reset[abi:nqn240000]<>()

NEW

+20

std::__2::unordered_map<>::emplace[abi:nqn240000]<>()

NEW

+18

std::__2::allocator<>::allocate[abi:nqn240000]()

NEW

+18

std::__2::unordered_map<>::equal_range[abi:nqn240000]()

NEW

+16

std::__2::__bucket_list_deallocator<>::operator()[abi:nqn240000]()

NEW

+16

std::__2::__throw_overflow_error[abi:nqn240000]()

NEW

+16

std::__2::unique_ptr<>::~unique_ptr[abi:nqn240000]()

NEW

+12

std::__2::__hash_table<>::__count_unique[abi:nqn240000]<>()

NEW

+12

std::__throw_bad_array_new_length[abi:nqn240000]()

NEW

+8

operator new()

+6,360

RAM

+1

__Thumbv6MABSLongThunk_best_effort_wfe_or_timeout

NEW

+79

pw::containers::size_report::GetPairs<>()::pairs

NEW

+24

pw::containers::size_report::MeasureStdUnorderedMap<>()::std_hash_map

+104

Additional std::unordered_map with different value type

FLASH

+712

std::__2::__hash_table<>::__emplace_unique[abi:nqn240000]<>()::{lambda()#1}::operator()[abi:nqn240000]()

+248

std::__2::__hash_table<>::remove[abi:nqn240000]()

+242

std::__2::__hash_table<>::find[abi:nqn240000]<>()

+174

std::__2::__hash_table<>::__do_rehash[abi:nqn240000]<>()

+156

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

+118

std::__2::__hash_table<>::__rehash[abi:nqn240000]<>()

+84

std::__2::__hash_table<>::__construct_node_hash[abi:nqn240000]<>()

+56

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

+8

vPortSVCHandler_C

+48

std::__2::unordered_map<>::insert[abi:nqn240000]<>()

+46

std::__2::__hash_table<>::clear[abi:nqn240000]()

+48

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

+36

std::__2::__try_key_extraction[abi:nqn240000]<>()

+36

std::__2::__try_key_extraction_impl[abi:nqn240000]<>()

+34

std::__2::__hash_table<>::__reserve_unique[abi:nqn240000]()

+20

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

+28

std::__2::__hash_table<>::__emplace_unique[abi:nqn240000]<>()

+28

std::__2::__hash_table<>::__erase_unique[abi:nqn240000]<>()

+28

std::__2::__hash_table<>::erase[abi:nqn240000]()

+26

std::__2::__hash_table<>::__equal_range_unique[abi:nqn240000]<>()

+22

std::__2::__hash_table<>::__deallocate_node_list[abi:nqn240000]()

+20

std::__2::unique_ptr<>::reset[abi:nqn240000]()

+20

std::__2::unique_ptr<>::reset[abi:nqn240000]<>()

+20

std::__2::unordered_map<>::emplace[abi:nqn240000]<>()

+18

std::__2::allocator<>::allocate[abi:nqn240000]()

+18

std::__2::unordered_map<>::equal_range[abi:nqn240000]()

+16

std::__2::__bucket_list_deallocator<>::operator()[abi:nqn240000]()

+14

std::__2::unique_ptr<>::~unique_ptr[abi:nqn240000]()

+12

std::__2::__hash_table<>::__count_unique[abi:nqn240000]<>()

+2,336

RAM

+164

pw::containers::size_report::GetPairs<>()::pairs

-4

[section .data]

+24

pw::containers::size_report::MeasureStdUnorderedMap<>()::std_hash_map

+184

Additional std::unordered_map with different key and value types

FLASH

+712

std::__2::__hash_table<>::__emplace_unique[abi:nqn240000]<>()::{lambda()#1}::operator()[abi:nqn240000]()

+248

std::__2::__hash_table<>::remove[abi:nqn240000]()

+240

std::__2::__hash_table<>::find[abi:nqn240000]<>()

+174

std::__2::__hash_table<>::__do_rehash[abi:nqn240000]<>()

+156

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

+118

std::__2::__hash_table<>::__rehash[abi:nqn240000]<>()

+86

std::__2::__hash_table<>::__construct_node_hash[abi:nqn240000]<>()

+56

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

+8

vPortSVCHandler_C

+48

std::__2::unordered_map<>::insert[abi:nqn240000]<>()

+46

std::__2::__hash_table<>::clear[abi:nqn240000]()

+48

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

+36

std::__2::__try_key_extraction[abi:nqn240000]<>()

+36

std::__2::__try_key_extraction_impl[abi:nqn240000]<>()

+34

std::__2::__hash_table<>::__reserve_unique[abi:nqn240000]()

+20

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

+28

std::__2::__hash_table<>::__emplace_unique[abi:nqn240000]<>()

+28

std::__2::__hash_table<>::__erase_unique[abi:nqn240000]<>()

+28

std::__2::__hash_table<>::erase[abi:nqn240000]()

+26

std::__2::__hash_table<>::__equal_range_unique[abi:nqn240000]<>()

+22

std::__2::__hash_table<>::__deallocate_node_list[abi:nqn240000]()

+20

std::__2::unique_ptr<>::reset[abi:nqn240000]()

+20

std::__2::unique_ptr<>::reset[abi:nqn240000]<>()

+20

std::__2::unordered_map<>::emplace[abi:nqn240000]<>()

+18

std::__2::allocator<>::allocate[abi:nqn240000]()

+18

std::__2::unordered_map<>::equal_range[abi:nqn240000]()

+16

std::__2::__bucket_list_deallocator<>::operator()[abi:nqn240000]()

+14

std::__2::unique_ptr<>::~unique_ptr[abi:nqn240000]()

+12

std::__2::__hash_table<>::__count_unique[abi:nqn240000]<>()

+2,336

RAM

+164

pw::containers::size_report::GetPairs<>()::pairs

-4

[section .data]

+24

pw::containers::size_report::MeasureStdUnorderedMap<>()::std_hash_map

+184

DynamicHashMap

FLASH

+344

[section .rodata]

+18

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

+4

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

NEW

+432

pw::DynamicHashMap<>::TryEmplaceImpl<>()

NEW

+176

pw::DynamicHashMap<>::try_rehash()

NEW

+168

pw::DynamicPtrVector<>::try_emplace<>()

NEW

+162

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

NEW

+126

pw::DynamicDeque<>::ReallocateBuffer()

NEW

+120

pw::containers::internal::GenericDeque<>::operator[]()

NEW

+112

pw::DynamicHashMap<>::emplace<>()

NEW

+100

std::__2::__move_backward_impl<>::operator()[abi:nqn240000]<>()

NEW

+100

std::__2::__uninitialized_move[abi:nqn240000]<>()

NEW

+82

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

NEW

+80

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

NEW

+78

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

NEW

+74

pw::DynamicDeque<>::try_reserve()

NEW

+74

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

NEW

+68

pw::Allocator::New<>()

NEW

+68

pw::DynamicDeque<>::IncreaseCapacity()

NEW

+68

pw::DynamicHashMap<>::GetBucketIndex()

NEW

+60

pw::DynamicHashMap<>::FindAndUnlinkFromBucket<>()

NEW

+60

pw::DynamicPtrVector<>::try_emplace_back<>()

NEW

+60

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

NEW

+56

pw::DynamicVector<>::try_emplace<>()

NEW

+54

pw::DynamicHashMap<>::try_reserve()

NEW

+54

std::__2::__copy_move_unwrap_iters[abi:nqn240000]<>()

NEW

+52

pw::DynamicHashMap<>::FindImpl()

NEW

+52

pw::DynamicHashMap<>::find()

NEW

+52

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

NEW

+50

pw::DynamicHashMap<>::EraseFromVector()

NEW

+48

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

NEW

+44

pw::DynamicDeque<>::operator=()

NEW

+44

pw::DynamicHashMap<>::equal_range()

NEW

+44

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

NEW

+42

pw::DynamicPtrVector<>::clear()

NEW

+40

pw::DynamicHashMap<>::rehash()

NEW

+40

pw::DynamicHashMap<>::reserve()

NEW

+36

std::__2::move_backward[abi:nqn240000]<>()

NEW

+36

std::__2::uninitialized_move[abi:nqn240000]<>()

NEW

+34

pw::DynamicPtrVector<>::pop_back()

NEW

+34

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

NEW

+30

pw::DynamicHashMap<>::insert<>()

NEW

+28

pw::DynamicHashMap<>::erase<>()

NEW

+28

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

NEW

+24

pw::DynamicHashMap<>::UnlinkFromBucket<>()

NEW

+24

pw::DynamicHashMap<>::count()

NEW

+24

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

NEW

+22

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

NEW

+22

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

NEW

+20

pw::DynamicHashMap<>::clear()

NEW

+18

std::__2::__advance[abi:nqn240000]<>()

NEW

+14

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

NEW

+14

std::__2::__uninitialized_fill_n[abi:nqn240000]<>()

NEW

+14

std::__2::next[abi:nqn240000]<>()

NEW

+12

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

NEW

+10

pw::DynamicHashMap<>::insert()

NEW

+10

pw::DynamicPtrVector<>::back()

NEW

+8

std::__2::advance[abi:nqn240000]<>()

+3,768

RAM

+1

__Thumbv6MABSLongThunk_best_effort_wfe_or_timeout

NEW

+79

pw::containers::size_report::GetPairs<>()::pairs

NEW

+44

pw::containers::size_report::MeasureDynamicHashMap<>()::dynamic_hash_map

+124

Additional DynamicHashMap with different value type

FLASH

+432

pw::DynamicHashMap<>::TryEmplaceImpl<>()

+176

pw::DynamicHashMap<>::try_rehash()

+168

pw::DynamicPtrVector<>::try_emplace<>()

+168

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

+126

pw::DynamicDeque<>::ReallocateBuffer()

+120

pw::containers::internal::GenericDeque<>::operator[]()

+112

pw::DynamicHashMap<>::emplace<>()

+100

std::__2::__move_backward_impl<>::operator()[abi:nqn240000]<>()

+100

std::__2::__uninitialized_move[abi:nqn240000]<>()

+82

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

+80

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

+78

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

+74

pw::DynamicDeque<>::try_reserve()

+74

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

+76

pw::Allocator::New<>()

+68

pw::DynamicDeque<>::IncreaseCapacity()

+68

pw::DynamicHashMap<>::GetBucketIndex()

+60

pw::DynamicHashMap<>::FindAndUnlinkFromBucket<>()

+60

pw::DynamicPtrVector<>::try_emplace_back<>()

+20

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

+60

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

-8

vPortSVCHandler_C

+56

pw::DynamicVector<>::try_emplace<>()

+54

pw::DynamicHashMap<>::try_reserve()

+54

std::__2::__copy_move_unwrap_iters[abi:nqn240000]<>()

+52

pw::DynamicHashMap<>::FindImpl()

+52

pw::DynamicHashMap<>::find()

+50

pw::DynamicHashMap<>::EraseFromVector()

+48

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

+44

pw::DynamicDeque<>::operator=()

+44

pw::DynamicHashMap<>::equal_range()

+44

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

+42

pw::DynamicPtrVector<>::clear()

+40

pw::DynamicHashMap<>::rehash()

+40

pw::DynamicHashMap<>::reserve()

+36

std::__2::move_backward[abi:nqn240000]<>()

+36

std::__2::uninitialized_move[abi:nqn240000]<>()

+34

pw::DynamicPtrVector<>::pop_back()

+34

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

+32

pw::DynamicHashMap<>::insert<>()

+28

pw::DynamicHashMap<>::erase<>()

+20

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

+24

pw::DynamicHashMap<>::UnlinkFromBucket<>()

+24

pw::DynamicHashMap<>::count()

+22

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

+20

pw::DynamicHashMap<>::clear()

+2

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

+18

std::__2::__advance[abi:nqn240000]<>()

+14

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

+14

std::__2::__uninitialized_fill_n[abi:nqn240000]<>()

+14

std::__2::next[abi:nqn240000]<>()

+12

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

+12

pw::DynamicHashMap<>::insert()

+10

pw::DynamicPtrVector<>::back()

+8

std::__2::advance[abi:nqn240000]<>()

+3,328

RAM

+164

pw::containers::size_report::GetPairs<>()::pairs

-4

[section .data]

+44

pw::containers::size_report::MeasureDynamicHashMap<>()::dynamic_hash_map

+204

Additional DynamicHashMap with different key and value types

FLASH

+432

pw::DynamicHashMap<>::TryEmplaceImpl<>()

+176

pw::DynamicHashMap<>::try_rehash()

+168

pw::DynamicPtrVector<>::try_emplace<>()

+168

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

+126

pw::DynamicDeque<>::ReallocateBuffer()

+120

pw::containers::internal::GenericDeque<>::operator[]()

+112

pw::DynamicHashMap<>::emplace<>()

+100

std::__2::__move_backward_impl<>::operator()[abi:nqn240000]<>()

+100

std::__2::__uninitialized_move[abi:nqn240000]<>()

+82

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

+80

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

+78

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

+74

pw::DynamicDeque<>::try_reserve()

+74

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

+76

pw::Allocator::New<>()

+68

pw::DynamicDeque<>::IncreaseCapacity()

+68

pw::DynamicHashMap<>::GetBucketIndex()

+60

pw::DynamicHashMap<>::FindAndUnlinkFromBucket<>()

+60

pw::DynamicPtrVector<>::try_emplace_back<>()

+20

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

+60

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

-8

vPortSVCHandler_C

+56

pw::DynamicVector<>::try_emplace<>()

+54

pw::DynamicHashMap<>::try_reserve()

+54

std::__2::__copy_move_unwrap_iters[abi:nqn240000]<>()

+52

pw::DynamicHashMap<>::FindImpl()

+52

pw::DynamicHashMap<>::find()

+50

pw::DynamicHashMap<>::EraseFromVector()

+48

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

+44

pw::DynamicDeque<>::operator=()

+44

pw::DynamicHashMap<>::equal_range()

+44

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

+42

pw::DynamicPtrVector<>::clear()

+40

pw::DynamicHashMap<>::rehash()

+40

pw::DynamicHashMap<>::reserve()

+36

std::__2::move_backward[abi:nqn240000]<>()

+36

std::__2::uninitialized_move[abi:nqn240000]<>()

+34

pw::DynamicPtrVector<>::pop_back()

+34

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

+32

pw::DynamicHashMap<>::insert<>()

+28

pw::DynamicHashMap<>::erase<>()

+20

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

+24

pw::DynamicHashMap<>::UnlinkFromBucket<>()

+24

pw::DynamicHashMap<>::count()

+22

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

+20

pw::DynamicHashMap<>::clear()

+2

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

+18

std::__2::__advance[abi:nqn240000]<>()

+14

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

+14

std::__2::__uninitialized_fill_n[abi:nqn240000]<>()

+14

std::__2::next[abi:nqn240000]<>()

+12

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

+12

pw::DynamicHashMap<>::insert()

+10

pw::DynamicPtrVector<>::back()

+8

std::__2::advance[abi:nqn240000]<>()

+3,328

RAM

+164

pw::containers::size_report::GetPairs<>()::pairs

-4

[section .data]

+44

pw::containers::size_report::MeasureDynamicHashMap<>()::dynamic_hash_map

+204

std::map

FLASH

-12

vPortSVCHandler_C

+4

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

+2

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

NEW

+428

std::__2::__tree_remove[abi:nqn240000]<>()

NEW

+154

std::__2::__tree<>::__emplace_unique[abi:nqn240000]<>()::{lambda()#1}::operator()[abi:nqn240000]()

NEW

+134

std::__2::__tree_balance_after_insert[abi:nqn240000]<>()

NEW

+130

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

NEW

+116

std::__2::__tree<>::__insert_range_unique[abi:nqn240000]<>()::{lambda()#1}::operator()[abi:nqn240000]()

NEW

+94

std::__2::__tree<>::__insert_range_unique[abi:nqn240000]<>()

NEW

+68

std::__2::__tree<>::__construct_node[abi:nqn240000]<>()

NEW

+58

std::__2::__try_key_extraction[abi:nqn240000]<>()

NEW

+56

std::__2::__tree<>::__equal_range_unique[abi:nqn240000]<>()

NEW

+54

std::__2::__try_key_extraction_impl[abi:nqn240000]<>()

NEW

+48

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

NEW

+48

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

NEW

+48

std::__2::__tree<>::__find_equal[abi:nqn240000]<>()

NEW

+40

std::__2::__tree<>::__insert_node_at[abi:nqn240000]()

NEW

+40

std::__2::__tree<>::__remove_node_pointer[abi:nqn240000]()

NEW

+34

std::__2::__tree<>::__tree_deleter::operator()[abi:nqn240000]()

NEW

+34

std::__2::__tree_left_rotate[abi:nqn240000]<>()

NEW

+34

std::__2::__tree_right_rotate[abi:nqn240000]<>()

NEW

+30

std::__2::__tree<>::__erase_unique[abi:nqn240000]<>()

NEW

+28

std::__2::__tree<>::__count_unique[abi:nqn240000]<>()

NEW

+28

std::__2::__tree<>::__emplace_unique[abi:nqn240000]<>()

NEW

+28

std::__2::__tree_next[abi:nqn240000]<>()

NEW

+28

std::__2::__tree_next_iter[abi:nqn240000]<>()

NEW

+26

std::__2::__tree<>::find[abi:nqn240000]<>()

NEW

+22

std::__2::__tree<>::clear[abi:nqn240000]()

NEW

+22

std::__2::__tree<>::erase[abi:nqn240000]()

NEW

+20

std::__2::map<>::emplace[abi:nqn240000]<>()

NEW

+20

std::__2::map<>::insert[abi:nqn240000]<>()

NEW

+20

std::__2::unique_ptr<>::reset[abi:nqn240000]()

NEW

+18

std::__2::map<>::equal_range[abi:nqn240000]()

NEW

+14

std::__2::unique_ptr<>::~unique_ptr[abi:nqn240000]()

NEW

+12

std::__2::__tree<>::destroy[abi:nqn240000]()

NEW

+12

std::__2::__tree_max[abi:nqn240000]<>()

NEW

+12

std::__2::__tree_min[abi:nqn240000]<>()

NEW

+8

operator new()

+1,960

RAM

+1

__Thumbv6MABSLongThunk_best_effort_wfe_or_timeout

NEW

+79

pw::containers::size_report::GetPairs<>()::pairs

NEW

+16

pw::containers::size_report::MeasureStdMap<>()::std_map

+96

Additional std::map with different value type

FLASH

+154

std::__2::__tree<>::__emplace_unique[abi:nqn240000]<>()::{lambda()#1}::operator()[abi:nqn240000]()

+134

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

+116

std::__2::__tree<>::__insert_range_unique[abi:nqn240000]<>()::{lambda()#1}::operator()[abi:nqn240000]()

+94

std::__2::__tree<>::__insert_range_unique[abi:nqn240000]<>()

+76

std::__2::__tree<>::__construct_node[abi:nqn240000]<>()

+58

std::__2::__try_key_extraction[abi:nqn240000]<>()

+56

std::__2::__tree<>::__equal_range_unique[abi:nqn240000]<>()

+54

std::__2::__try_key_extraction_impl[abi:nqn240000]<>()

+48

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

+48

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

+48

std::__2::__tree<>::__find_equal[abi:nqn240000]<>()

+40

std::__2::__tree<>::__insert_node_at[abi:nqn240000]()

+40

std::__2::__tree<>::__remove_node_pointer[abi:nqn240000]()

+34

std::__2::__tree<>::__tree_deleter::operator()[abi:nqn240000]()

+30

std::__2::__tree<>::__erase_unique[abi:nqn240000]<>()

+20

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

+28

std::__2::__tree<>::__count_unique[abi:nqn240000]<>()

+28

std::__2::__tree<>::__emplace_unique[abi:nqn240000]<>()

+26

std::__2::__tree<>::find[abi:nqn240000]<>()

+22

std::__2::__tree<>::clear[abi:nqn240000]()

+22

std::__2::__tree<>::erase[abi:nqn240000]()

+20

std::__2::map<>::emplace[abi:nqn240000]<>()

+20

std::__2::map<>::insert[abi:nqn240000]<>()

+20

std::__2::unique_ptr<>::reset[abi:nqn240000]()

+18

std::__2::map<>::equal_range[abi:nqn240000]()

+14

std::__2::unique_ptr<>::~unique_ptr[abi:nqn240000]()

+12

std::__2::__tree<>::destroy[abi:nqn240000]()

+1,280

RAM

+164

pw::containers::size_report::GetPairs<>()::pairs

-4

[section .data]

+16

pw::containers::size_report::MeasureStdMap<>()::std_map

+176

Additional std::map with different key and value types

FLASH

+154

std::__2::__tree<>::__emplace_unique[abi:nqn240000]<>()::{lambda()#1}::operator()[abi:nqn240000]()

+134

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

+116

std::__2::__tree<>::__insert_range_unique[abi:nqn240000]<>()::{lambda()#1}::operator()[abi:nqn240000]()

+94

std::__2::__tree<>::__insert_range_unique[abi:nqn240000]<>()

+76

std::__2::__tree<>::__construct_node[abi:nqn240000]<>()

+58

std::__2::__try_key_extraction[abi:nqn240000]<>()

+56

std::__2::__tree<>::__equal_range_unique[abi:nqn240000]<>()

+54

std::__2::__try_key_extraction_impl[abi:nqn240000]<>()

+48

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

+48

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

+48

std::__2::__tree<>::__find_equal[abi:nqn240000]<>()

+40

std::__2::__tree<>::__insert_node_at[abi:nqn240000]()

+40

std::__2::__tree<>::__remove_node_pointer[abi:nqn240000]()

+34

std::__2::__tree<>::__tree_deleter::operator()[abi:nqn240000]()

+30

std::__2::__tree<>::__erase_unique[abi:nqn240000]<>()

+20

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

+28

std::__2::__tree<>::__count_unique[abi:nqn240000]<>()

+28

std::__2::__tree<>::__emplace_unique[abi:nqn240000]<>()

+26

std::__2::__tree<>::find[abi:nqn240000]<>()

+22

std::__2::__tree<>::clear[abi:nqn240000]()

+22

std::__2::__tree<>::erase[abi:nqn240000]()

+20

std::__2::map<>::emplace[abi:nqn240000]<>()

+20

std::__2::map<>::insert[abi:nqn240000]<>()

+20

std::__2::unique_ptr<>::reset[abi:nqn240000]()

+18

std::__2::map<>::equal_range[abi:nqn240000]()

+14

std::__2::unique_ptr<>::~unique_ptr[abi:nqn240000]()

+12

std::__2::__tree<>::destroy[abi:nqn240000]()

+1,280

RAM

+164

pw::containers::size_report::GetPairs<>()::pairs

-4

[section .data]

+16

pw::containers::size_report::MeasureStdMap<>()::std_map

+176

DynamicMap

FLASH

+552

[section .rodata]

-8

vPortSVCHandler_C

-2

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

+4

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

+2

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

-4

__bi_84

NEW

+288

pw::DynamicMap<>::TryEmplaceImpl<>()

NEW

+190

pw::containers::internal::KeyedAATree<>::InsertImpl()

NEW

+184

pw::containers::internal::AATreeItem::Rebalance()

NEW

+150

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

NEW

+138

pw::containers::internal::AATreeItem::Unmap()

NEW

+104

pw::DynamicMap<>::emplace<>()

NEW

+98

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

NEW

+90

pw::containers::internal::AATreeItem::Split()

NEW

+86

pw::containers::internal::KeyedAATree<>::find()

NEW

+84

pw::containers::internal::KeyedAATree<>::GetLowerBoundImpl()

NEW

+84

pw::containers::internal::KeyedAATree<>::GetUpperBoundImpl()

NEW

+78

pw::IntrusiveMap<>::IntrusiveMap<>()

NEW

+72

pw::Allocator::New<>()

NEW

+72

pw::containers::internal::AATreeIterator<>::operator++()

NEW

+68

pw::containers::internal::AATreeItem::Skew()

NEW

+62

pw::DynamicMap<>::erase<>()

NEW

+60

fit::internal::target<>::ops

NEW

+60

pw::containers::internal::AATree<>::AATree()

NEW

+60

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

NEW

+56

pw::containers::internal::GenericAATree::erase_one()

NEW

+56

pw::containers::internal::KeyedAATree<>::KeyedAATree()

NEW

+52

pw::containers::internal::AATreeItem::IsMapped()

NEW

+48

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

NEW

+44

pw::DynamicMap<>::contains()

NEW

+44

pw::DynamicMap<>::end()

NEW

+44

pw::DynamicMap<>::find()

NEW

+44

pw::IntrusiveMap<>::find()

NEW

+44

pw::PackedPtr<>::set()

NEW

+44

pw::PackedPtr<>::set_packed_value()

NEW

+42

pw::containers::internal::AATreeItem::GetPredecessor()

NEW

+42

pw::containers::internal::AATreeItem::GetSuccessor()

NEW

+42

pw::containers::internal::GenericAATree::end()

NEW

+40

pw::IntrusiveMap<>::end()

NEW

+40

pw::containers::internal::AATreeItem::GetTreeSize()

NEW

+40

pw::containers::internal::AATreeItem::SetLevel()

NEW

+40

pw::containers::internal::AATreeItem::~AATreeItem()

NEW

+38

pw::containers::internal::AATreeItem::Replace()

NEW

+36

pw::Deallocator::DeleteArray<>()

NEW

+36

pw::containers::internal::KeyedAATree<>::equal_range()

NEW

+34

pw::DynamicMap<>::clear()

NEW

+34

pw::DynamicMap<>::erase()

NEW

+34

pw::containers::internal::KeyedAATree<>::lower_bound()

NEW

+34

pw::containers::internal::KeyedAATree<>::upper_bound()

NEW

+30

fit::internal::target<>::invoke()

NEW

+30

pw::DynamicMap<>::equal_range()

NEW

+30

pw::DynamicMap<>::insert<>()

NEW

+30

pw::IntrusiveMap<>::equal_range()

NEW

+30

pw::containers::internal::AATreeItem::SetRight()

NEW

+28

pw::containers::internal::AATreeItem::SetLeft()

NEW

+26

pw::containers::internal::GenericAATree::begin()

NEW

+24

__aeabi_uread4

NEW

+24

pw::IntrusiveMap<>::insert()

NEW

+22

fit::internal::inline_trivial_target_move<>()

NEW

+22

pw::DynamicMap<>::begin()

NEW

+22

pw::IntrusiveMap<>::erase()

NEW

+22

pw::containers::internal::AATreeItem::GetLevel()

NEW

+22

std::__2::destroy_n[abi:nqn240000]<>()

NEW

+20

pw::IntrusiveMap<>::begin()

NEW

+18

pw::containers::internal::GenericAATree::size()

NEW

+16

pw::containers::internal::GenericAATree::SetRoot()

NEW

+14

pw::containers::internal::AATreeItem::GetLeftmost()

NEW

+14

pw::containers::internal::AATreeItem::GetRightmost()

NEW

+14

pw::containers::internal::AATreeItem::GetRoot()

NEW

+12

pw::DynamicMap<>::insert()

NEW

+10

pw::Deallocator::Delete<>()

NEW

+10

pw::containers::internal::AATreeItem::Reset()

NEW

+8

pw::DynamicMap<>::count()

NEW

+8

pw::IntrusiveMap<>::IntrusiveMap()

NEW

+2

fit::internal::inline_target_get()

+4,088

RAM

+1

__Thumbv6MABSLongThunk_best_effort_wfe_or_timeout

NEW

+79

pw::containers::size_report::GetPairs<>()::pairs

NEW

+40

pw::containers::size_report::MeasureDynamicMap<>()::dynamic_map

+120

Additional DynamicMap with different value type

FLASH

+288

pw::DynamicMap<>::TryEmplaceImpl<>()

+156

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

+104

pw::DynamicMap<>::emplace<>()

+76

pw::IntrusiveMap<>::IntrusiveMap<>()

+80

pw::Allocator::New<>()

+62

pw::DynamicMap<>::erase<>()

+40

fit::internal::target<>::ops

+60

pw::containers::internal::AATree<>::AATree()

+60

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

+8

vPortSVCHandler_C

+48

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

+44

pw::DynamicMap<>::contains()

+44

pw::DynamicMap<>::end()

+44

pw::DynamicMap<>::find()

+44

pw::IntrusiveMap<>::find()

+40

pw::IntrusiveMap<>::end()

+36

pw::Deallocator::DeleteArray<>()

+34

pw::DynamicMap<>::clear()

+34

pw::DynamicMap<>::erase()

+18

fit::internal::target<>::invoke()

+30

pw::DynamicMap<>::equal_range()

+32

pw::DynamicMap<>::insert<>()

+30

pw::IntrusiveMap<>::equal_range()

+20

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

+24

pw::IntrusiveMap<>::insert()

+22

pw::DynamicMap<>::begin()

+22

pw::IntrusiveMap<>::erase()

-2

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

+20

std::__2::destroy_n[abi:nqn240000]<>()

+20

pw::IntrusiveMap<>::begin()

+12

pw::DynamicMap<>::insert()

+10

pw::Deallocator::Delete<>()

+8

pw::DynamicMap<>::count()

+8

pw::IntrusiveMap<>::IntrusiveMap()

+1,576

RAM

+164

pw::containers::size_report::GetPairs<>()::pairs

-4

[section .data]

+40

pw::containers::size_report::MeasureDynamicMap<>()::dynamic_map

+200

Additional DynamicMap with different key and value types

FLASH

+288

pw::DynamicMap<>::TryEmplaceImpl<>()

+190

pw::containers::internal::KeyedAATree<>::InsertImpl()

+156

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

+104

pw::DynamicMap<>::emplace<>()

+98

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

+86

pw::containers::internal::KeyedAATree<>::find()

+84

pw::containers::internal::KeyedAATree<>::GetLowerBoundImpl()

+86

pw::containers::internal::KeyedAATree<>::GetUpperBoundImpl()

+76

pw::IntrusiveMap<>::IntrusiveMap<>()

+80

pw::Allocator::New<>()

+62

pw::DynamicMap<>::erase<>()

+60

fit::internal::target<>::ops

+60

pw::containers::internal::AATree<>::AATree()

+60

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

+56

pw::containers::internal::KeyedAATree<>::KeyedAATree()

-4

vPortSVCHandler_C

+48

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

+44

pw::DynamicMap<>::contains()

+44

pw::DynamicMap<>::end()

+44

pw::DynamicMap<>::find()

+44

pw::IntrusiveMap<>::find()

+40

pw::IntrusiveMap<>::end()

+36

pw::Deallocator::DeleteArray<>()

+36

pw::containers::internal::KeyedAATree<>::equal_range()

+34

pw::DynamicMap<>::clear()

+34

pw::DynamicMap<>::erase()

+34

pw::containers::internal::KeyedAATree<>::lower_bound()

+34

pw::containers::internal::KeyedAATree<>::upper_bound()

+30

fit::internal::target<>::invoke()

+30

pw::DynamicMap<>::equal_range()

+32

pw::DynamicMap<>::insert<>()

+30

pw::IntrusiveMap<>::equal_range()

+20

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

+24

pw::IntrusiveMap<>::insert()

+22

pw::DynamicMap<>::begin()

+22

pw::IntrusiveMap<>::erase()

-2

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

+20

std::__2::destroy_n[abi:nqn240000]<>()

+20

pw::IntrusiveMap<>::begin()

+4

__bi_84

+12

pw::DynamicMap<>::insert()

+10

pw::Deallocator::Delete<>()

+8

pw::DynamicMap<>::count()

+8

pw::IntrusiveMap<>::IntrusiveMap()

+2,304

RAM

+164

pw::containers::size_report::GetPairs<>()::pairs

-4

[section .data]

+40

pw::containers::size_report::MeasureDynamicMap<>()::dynamic_map

+200

FlatMap

FLASH

+2

pw::containers::size_report::SetBaseline()

-4

vPortSVCHandler_C

-8

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

NEW

+74

pw::containers::FlatMap<>::ConstexprSort()

NEW

+56

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

NEW

+56

std::__2::__lower_bound_bisecting[abi:nqn240000]<>()

NEW

+42

std::__2::__upper_bound[abi:nqn240000]<>()

NEW

+36

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

NEW

+32

pw::containers::FlatMap<>::equal_range()

NEW

+28

pw::containers::FlatMap<>::find()

NEW

+22

pw::containers::FlatMap<>::FlatMap()

NEW

+22

std::__2::lower_bound[abi:nqn240000]<>()

NEW

+20

pw::containers::FlatMap<>::lower_bound()

NEW

+20

std::__2::__lower_bound[abi:nqn240000]<>()

NEW

+20

std::__2::upper_bound[abi:nqn240000]<>()

NEW

+18

pw::containers::FlatMap<>::contains()

NEW

+14

pw::containers::FlatMap<>::IsItemKeyLessThanGivenKey()

NEW

+14

pw::containers::FlatMap<>::upper_bound()

+464

RAM

+1

__Thumbv6MABSLongThunk_best_effort_wfe_or_timeout

NEW

+84

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

NEW

+79

pw::containers::size_report::GetPairs<>()::pairs

+164

Additional FlatMap with different key and value types

FLASH

+104

pw::containers::FlatMap<>::ConstexprSort()

+56

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

+56

std::__2::__lower_bound_bisecting[abi:nqn240000]<>()

-4

vPortSVCHandler_C

+42

std::__2::__upper_bound[abi:nqn240000]<>()

+36

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

+32

pw::containers::FlatMap<>::equal_range()

+28

pw::containers::FlatMap<>::find()

+22

pw::containers::FlatMap<>::FlatMap()

+22

std::__2::lower_bound[abi:nqn240000]<>()

+20

pw::containers::FlatMap<>::lower_bound()

+20

std::__2::__lower_bound[abi:nqn240000]<>()

+20

std::__2::upper_bound[abi:nqn240000]<>()

+18

pw::containers::FlatMap<>::contains()

+12

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

+14

pw::containers::FlatMap<>::IsItemKeyLessThanGivenKey()

+14

pw::containers::FlatMap<>::upper_bound()

+512

RAM

+164

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

+164

pw::containers::size_report::GetPairs<>()::pairs

-4

[section .data]

+324

IntrusiveMap

FLASH

+356

[section .rodata]

-8

vPortSVCHandler_C

-2

pw::Allocator::Resize()

+4

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

+38

std::__2::__distance[abi:nqn240000]<>()

NEW

+188

pw::containers::internal::KeyedAATree<>::InsertImpl()

NEW

+184

pw::containers::internal::AATreeItem::Rebalance()

NEW

+170

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

NEW

+138

pw::containers::internal::AATreeItem::Unmap()

NEW

+98

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

NEW

+90

pw::containers::internal::AATreeItem::Split()

NEW

+86

pw::containers::internal::KeyedAATree<>::find()

NEW

+84

pw::containers::internal::KeyedAATree<>::GetLowerBoundImpl()

NEW

+84

pw::containers::internal::KeyedAATree<>::GetUpperBoundImpl()

NEW

+78

pw::IntrusiveMap<>::IntrusiveMap<>()

NEW

+72

pw::containers::internal::AATreeIterator<>::operator++()

NEW

+68

pw::containers::internal::AATreeItem::Skew()

NEW

+60

fit::internal::target<>::ops

NEW

+60

pw::containers::internal::AATree<>::AATree()

NEW

+56

pw::containers::internal::GenericAATree::erase_one()

NEW

+56

pw::containers::internal::KeyedAATree<>::KeyedAATree()

NEW

+56

pw::containers::internal::KeyedAATree<>::merge()

NEW

+52

pw::containers::internal::AATreeItem::IsMapped()

NEW

+46

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

NEW

+44

pw::PackedPtr<>::set()

NEW

+44

pw::PackedPtr<>::set_packed_value()

NEW

+42

pw::containers::internal::AATreeItem::GetPredecessor()

NEW

+42

pw::containers::internal::AATreeItem::GetSuccessor()

NEW

+42

pw::containers::internal::GenericAATree::end()

NEW

+42

pw::containers::internal::KeyedAATree<>::count()

NEW

+40

pw::containers::internal::AATreeItem::GetTreeSize()

NEW

+40

pw::containers::internal::AATreeItem::SetLevel()

NEW

+40

pw::containers::internal::CheckIntrusiveContainerIsEmpty()

NEW

+38

pw::containers::internal::AATreeItem::Replace()

NEW

+36

pw::containers::internal::KeyedAATree<>::equal_range()

NEW

+36

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

NEW

+34

pw::containers::internal::KeyedAATree<>::lower_bound()

NEW

+34

pw::containers::internal::KeyedAATree<>::upper_bound()

NEW

+32

pw::containers::internal::KeyedAATree<>::~KeyedAATree()

NEW

+30

fit::internal::target<>::invoke()

NEW

+30

pw::IntrusiveMap<>::equal_range()

NEW

+30

pw::containers::internal::AATreeItem::SetRight()

NEW

+28

pw::containers::internal::AATreeItem::SetLeft()

NEW

+28

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

NEW

+26

pw::containers::internal::GenericAATree::begin()

NEW

+24

__aeabi_uread4

NEW

+24

pw::IntrusiveMap<>::insert()

NEW

+22

fit::internal::inline_trivial_target_move<>()

NEW

+22

pw::IntrusiveMap<>::find()

NEW

+22

pw::containers::internal::AATree<>::~AATree()

NEW

+22

pw::containers::internal::AATreeItem::GetLevel()

NEW

+20

pw::IntrusiveMap<>::begin()

NEW

+20

pw::IntrusiveMap<>::end()

NEW

+20

pw::IntrusiveMap<>::erase()

NEW

+18

pw::containers::internal::GenericAATree::size()

NEW

+18

pw::containers::internal::GenericAATree::~GenericAATree()

NEW

+16

pw::containers::internal::GenericAATree::SetRoot()

NEW

+14

pw::containers::internal::AATreeItem::GetLeftmost()

NEW

+14

pw::containers::internal::AATreeItem::GetRightmost()

NEW

+14

pw::containers::internal::AATreeItem::GetRoot()

NEW

+10

pw::containers::internal::AATreeItem::Reset()

NEW

+10

pw::containers::internal::GenericAATree::swap()

NEW

+8

pw::IntrusiveMap<>::IntrusiveMap()

NEW

+2

fit::internal::inline_target_get()

+3,192

RAM

-8

[section .data]

+1

__Thumbv6MABSLongThunk_best_effort_wfe_or_timeout

NEW

+199

pw::containers::size_report::GetPairs<>()::pairs

NEW

+36

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

+228

Additional IntrusiveMap with different key type

(ALL)

0

Additional IntrusiveMap with different key and value types

FLASH

+2

pw::containers::size_report::SetBaseline()

+170

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

+78

pw::IntrusiveMap<>::IntrusiveMap<>()

+40

fit::internal::target<>::ops

+60

pw::containers::internal::AATree<>::AATree()

+46

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

+36

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

+18

fit::internal::target<>::invoke()

+30

pw::IntrusiveMap<>::equal_range()

+28

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

+20

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

+24

pw::IntrusiveMap<>::insert()

+22

pw::IntrusiveMap<>::find()

+22

pw::containers::internal::AATree<>::~AATree()

+20

pw::IntrusiveMap<>::begin()

+20

pw::IntrusiveMap<>::end()

+20

pw::IntrusiveMap<>::erase()

+8

pw::IntrusiveMap<>::IntrusiveMap()

+664

RAM

+244

pw::containers::size_report::GetPairs<>()::pairs

-4

[section .data]

+36

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

+276

IntrusiveMultiMap

FLASH

+356

[section .rodata]

-4

vPortSVCHandler_C

-2

pw::Allocator::Resize()

+4

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

+38

std::__2::__distance[abi:nqn240000]<>()

NEW

+188

pw::containers::internal::KeyedAATree<>::InsertImpl()

NEW

+184

pw::containers::internal::AATreeItem::Rebalance()

NEW

+170

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

NEW

+138

pw::containers::internal::AATreeItem::Unmap()

NEW

+98

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

NEW

+90

pw::containers::internal::AATreeItem::Split()

NEW

+86

pw::containers::internal::KeyedAATree<>::find()

NEW

+84

pw::containers::internal::KeyedAATree<>::GetLowerBoundImpl()

NEW

+84

pw::containers::internal::KeyedAATree<>::GetUpperBoundImpl()

NEW

+78

pw::IntrusiveMultiMap<>::IntrusiveMultiMap<>()

NEW

+72

pw::containers::internal::AATreeIterator<>::operator++()

NEW

+68

pw::containers::internal::AATreeItem::Skew()

NEW

+60

fit::internal::target<>::ops

NEW

+60

pw::containers::internal::AATree<>::AATree()

NEW

+56

pw::containers::internal::GenericAATree::erase_one()

NEW

+56

pw::containers::internal::KeyedAATree<>::KeyedAATree()

NEW

+56

pw::containers::internal::KeyedAATree<>::merge()

NEW

+52

pw::containers::internal::AATreeItem::IsMapped()

NEW

+46

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

NEW

+44

pw::PackedPtr<>::set()

NEW

+44

pw::PackedPtr<>::set_packed_value()

NEW

+42

pw::containers::internal::AATreeItem::GetPredecessor()

NEW

+42

pw::containers::internal::AATreeItem::GetSuccessor()

NEW

+42

pw::containers::internal::GenericAATree::end()

NEW

+42

pw::containers::internal::KeyedAATree<>::count()

NEW

+40

pw::containers::internal::AATreeItem::GetTreeSize()

NEW

+40

pw::containers::internal::AATreeItem::SetLevel()

NEW

+40

pw::containers::internal::CheckIntrusiveContainerIsEmpty()

NEW

+38

pw::containers::internal::AATreeItem::Replace()

NEW

+36

pw::containers::internal::KeyedAATree<>::equal_range()

NEW

+36

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

NEW

+34

pw::containers::internal::KeyedAATree<>::lower_bound()

NEW

+34

pw::containers::internal::KeyedAATree<>::upper_bound()

NEW

+32

pw::containers::internal::KeyedAATree<>::~KeyedAATree()

NEW

+30

fit::internal::target<>::invoke()

NEW

+30

pw::IntrusiveMultiMap<>::equal_range()

NEW

+30

pw::containers::internal::AATreeItem::SetRight()

NEW

+28

pw::containers::internal::AATreeItem::SetLeft()

NEW

+28

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

NEW

+26

pw::containers::internal::GenericAATree::begin()

NEW

+24

__aeabi_uread4

NEW

+22

fit::internal::inline_trivial_target_move<>()

NEW

+22

pw::IntrusiveMultiMap<>::find()

NEW

+22

pw::containers::internal::AATree<>::~AATree()

NEW

+22

pw::containers::internal::AATreeItem::GetLevel()

NEW

+20

pw::IntrusiveMultiMap<>::begin()

NEW

+20

pw::IntrusiveMultiMap<>::end()

NEW

+20

pw::IntrusiveMultiMap<>::erase()

NEW

+20

pw::IntrusiveMultiMap<>::insert()

NEW

+18

pw::containers::internal::GenericAATree::size()

NEW

+18

pw::containers::internal::GenericAATree::~GenericAATree()

NEW

+16

pw::containers::internal::GenericAATree::SetRoot()

NEW

+14

pw::containers::internal::AATreeItem::GetLeftmost()

NEW

+14

pw::containers::internal::AATreeItem::GetRightmost()

NEW

+14

pw::containers::internal::AATreeItem::GetRoot()

NEW

+10

pw::containers::internal::AATreeItem::Reset()

NEW

+10

pw::containers::internal::GenericAATree::swap()

NEW

+8

pw::IntrusiveMultiMap<>::IntrusiveMultiMap()

NEW

+2

fit::internal::inline_target_get()

+3,192

RAM

-8

[section .data]

+1

__Thumbv6MABSLongThunk_best_effort_wfe_or_timeout

NEW

+199

pw::containers::size_report::GetPairs<>()::pairs

NEW

+36

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

+228

Additional IntrusiveMultiMap with different key type

(ALL)

0

Additional IntrusiveMultiMap with different key and value types

FLASH

+2

pw::containers::size_report::SetBaseline()

+170

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

+78

pw::IntrusiveMultiMap<>::IntrusiveMultiMap<>()

+40

fit::internal::target<>::ops

+60

pw::containers::internal::AATree<>::AATree()

+4

vPortSVCHandler_C

+46

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

+36

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

+18

fit::internal::target<>::invoke()

+30

pw::IntrusiveMultiMap<>::equal_range()

+16

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

+22

pw::IntrusiveMultiMap<>::find()

+22

pw::containers::internal::AATree<>::~AATree()

+20

pw::IntrusiveMultiMap<>::begin()

+20

pw::IntrusiveMultiMap<>::end()

+20

pw::IntrusiveMultiMap<>::erase()

+20

pw::IntrusiveMultiMap<>::insert()

+8

pw::IntrusiveMultiMap<>::IntrusiveMultiMap()

+632

RAM

+36

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

+36

IntrusiveMap and IntrusiveMultiMap

FLASH

+356

[section .rodata]

+2

pw::containers::size_report::SetBaseline()

-4

vPortSVCHandler_C

-2

pw::Allocator::Resize()

+24

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

+38

std::__2::__distance[abi:nqn240000]<>()

NEW

+188

pw::containers::internal::KeyedAATree<>::InsertImpl()

NEW

+184

pw::containers::internal::AATreeItem::Rebalance()

NEW

+170

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

NEW

+170

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

NEW

+138

pw::containers::internal::AATreeItem::Unmap()

NEW

+120

pw::containers::internal::AATree<>::AATree()

NEW

+100

fit::internal::target<>::ops

NEW

+98

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

NEW

+92

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

NEW

+90

pw::containers::internal::AATreeItem::Split()

NEW

+86

pw::containers::internal::KeyedAATree<>::find()

NEW

+84

pw::containers::internal::KeyedAATree<>::GetLowerBoundImpl()

NEW

+84

pw::containers::internal::KeyedAATree<>::GetUpperBoundImpl()

NEW

+78

pw::IntrusiveMap<>::IntrusiveMap<>()

NEW

+78

pw::IntrusiveMultiMap<>::IntrusiveMultiMap<>()

NEW

+72

pw::containers::internal::AATreeIterator<>::operator++()

NEW

+72

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

NEW

+68

pw::containers::internal::AATreeItem::Skew()

NEW

+56

pw::containers::internal::GenericAATree::erase_one()

NEW

+56

pw::containers::internal::KeyedAATree<>::KeyedAATree()

NEW

+56

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

NEW

+56

pw::containers::internal::KeyedAATree<>::merge()

NEW

+52

pw::containers::internal::AATreeItem::IsMapped()

NEW

+48

fit::internal::target<>::invoke()

NEW

+44

pw::PackedPtr<>::set()

NEW

+44

pw::PackedPtr<>::set_packed_value()

NEW

+44

pw::containers::internal::AATree<>::~AATree()

NEW

+42

pw::containers::internal::AATreeItem::GetPredecessor()

NEW

+42

pw::containers::internal::AATreeItem::GetSuccessor()

NEW

+42

pw::containers::internal::GenericAATree::end()

NEW

+42

pw::containers::internal::KeyedAATree<>::count()

NEW

+40

pw::containers::internal::AATreeItem::GetTreeSize()

NEW

+40

pw::containers::internal::AATreeItem::SetLevel()

NEW

+40

pw::containers::internal::CheckIntrusiveContainerIsEmpty()

NEW

+38

pw::containers::internal::AATreeItem::Replace()

NEW

+36

pw::containers::internal::KeyedAATree<>::equal_range()

NEW

+34

pw::containers::internal::KeyedAATree<>::lower_bound()

NEW

+34

pw::containers::internal::KeyedAATree<>::upper_bound()

NEW

+32

pw::containers::internal::KeyedAATree<>::~KeyedAATree()

NEW

+30

pw::IntrusiveMap<>::equal_range()

NEW

+30

pw::IntrusiveMultiMap<>::equal_range()

NEW

+30

pw::containers::internal::AATreeItem::SetRight()

NEW

+28

pw::containers::internal::AATreeItem::SetLeft()

NEW

+26

pw::containers::internal::GenericAATree::begin()

NEW

+24

__aeabi_uread4

NEW

+24

pw::IntrusiveMap<>::insert()

NEW

+22

fit::internal::inline_trivial_target_move<>()

NEW

+22

pw::IntrusiveMap<>::find()

NEW

+22

pw::IntrusiveMultiMap<>::find()

NEW

+22

pw::containers::internal::AATreeItem::GetLevel()

NEW

+20

pw::IntrusiveMap<>::begin()

NEW

+20

pw::IntrusiveMap<>::end()

NEW

+20

pw::IntrusiveMap<>::erase()

NEW

+20

pw::IntrusiveMultiMap<>::begin()

NEW

+20

pw::IntrusiveMultiMap<>::end()

NEW

+20

pw::IntrusiveMultiMap<>::erase()

NEW

+20

pw::IntrusiveMultiMap<>::insert()

NEW

+18

pw::containers::internal::GenericAATree::size()

NEW

+18

pw::containers::internal::GenericAATree::~GenericAATree()

NEW

+16

pw::containers::internal::GenericAATree::SetRoot()

NEW

+14

pw::containers::internal::AATreeItem::GetLeftmost()

NEW

+14

pw::containers::internal::AATreeItem::GetRightmost()

NEW

+14

pw::containers::internal::AATreeItem::GetRoot()

NEW

+10

pw::containers::internal::AATreeItem::Reset()

NEW

+10

pw::containers::internal::GenericAATree::swap()

NEW

+8

pw::IntrusiveMap<>::IntrusiveMap()

NEW

+8

pw::IntrusiveMultiMap<>::IntrusiveMultiMap()

NEW

+2

fit::internal::inline_target_get()

+3,856

RAM

+1

__Thumbv6MABSLongThunk_best_effort_wfe_or_timeout

NEW

+399

pw::containers::size_report::GetPairs<>()::pairs

NEW

+72

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

+472