FastLED
3.10.9
Loading...
Searching...
No Matches
◆
operator[]()
template<typename
Key
, typename T, typename
Hash
= Hash<Key>, typename KeyEqual = EqualTo<Key>, int INLINED_COUNT = FASTLED_HASHMAP_INLINED_COUNT>
T &
fl::unordered_map
<
Key
, T,
Hash
, KeyEqual, INLINED_COUNT >::operator[]
(
const
Key
&
key
)
inline
Definition at line
683
of file
unordered_map.h
.
683
{
684
fl::size
idx
;
685
bool
is_new
;
686
687
fl::pair<fl::size, bool>
p
=
find_slot
(
key
);
688
idx
=
p
.first;
689
is_new
=
p
.second;
690
691
// Check if find_slot failed to find a valid slot (unordered_map is full)
692
if
(
idx
==
npos
()) {
693
// Need to resize to make room
694
if
(
needs_rehash
()) {
695
// if half the buckets are tombstones, rehash inline to prevent
696
// memory growth. Otherwise, double the size.
697
if
(
_tombstones
>=
_buckets
.size() / 2) {
698
rehash_inline_no_resize
();
699
}
else
{
700
rehash_internal
(
_buckets
.size() * 2);
701
}
702
}
else
{
703
// Force a rehash with double size if needs_rehash() doesn't detect the issue
704
rehash_internal
(
_buckets
.size() * 2);
705
}
706
707
// Try find_slot again after resize
708
p
=
find_slot
(
key
);
709
idx
=
p
.first;
710
is_new
=
p
.second;
711
712
// If still npos() after resize, allocation failed catastrophically
713
if
(
idx
==
npos
()) {
714
// This should never happen after a successful resize
715
static
T
default_value
{};
716
FASTLED_ASSERT
(
false
,
"unordered_map::operator[]: Failed to allocate after rehash"
);
717
return
default_value
;
718
}
719
}
720
721
if
(
is_new
) {
722
_buckets
[
idx
].key =
key
;
723
_buckets
[
idx
].value =
T
{};
724
mark_occupied
(
idx
);
725
++
_size
;
726
}
727
return
_buckets
[
idx
].value;
728
}
fl::unordered_map::rehash_internal
void rehash_internal(fl::size new_cap) FL_NO_EXCEPT
Definition
unordered_map.h:916
fl::unordered_map::needs_rehash
bool needs_rehash() const FL_NO_EXCEPT
Definition
unordered_map.h:321
fl::unordered_map::npos
static fl::size npos() FL_NO_EXCEPT
Definition
unordered_map.h:805
fl::unordered_map::_buckets
fl::vector_inlined< Entry, INLINED_COUNT > _buckets
Definition
unordered_map.h:1078
fl::unordered_map::_size
fl::size _size
Definition
unordered_map.h:1079
fl::unordered_map::mark_occupied
void mark_occupied(fl::size idx) FL_NO_EXCEPT
Definition
unordered_map.h:818
fl::unordered_map::rehash_inline_no_resize
FL_DISABLE_WARNING_PUSH FL_DISABLE_WARNING_NULL_DEREFERENCE void rehash_inline_no_resize() FL_NO_EXCEPT
Definition
unordered_map.h:972
fl::unordered_map::find_slot
pair< fl::size, bool > find_slot(const Key &key) const FL_NO_EXCEPT
Definition
unordered_map.h:850
fl::unordered_map::_tombstones
fl::size _tombstones
Definition
unordered_map.h:1080
fl::unordered_map
Definition
unordered_map.h:61
fl
unordered_map
Generated on Mon Nov 2 2026 09:25:25 for FastLED by
1.13.2