__GNU_DEBUG::_SAFE_LOCAL_ITERATOR(3cxx)
πΈ NAME πΈ
__gnu_debug::_Safe_local_iterator< _Iterator, _Sequence > β and yes bestie, that whole mouthful is the manual name, it's (3cxx) territory, we're in C++ docs now π
So what is it? It's a Safe iterator wrapper. That's the whole vibe. It wraps your iterator so it can't do anything sketchy without getting caught π«Ά
β¨ SYNOPSIS β¨
#include <safe_local_iterator.h>
Inherits _Iterator, and __gnu_debug::_Safe_local_iterator_base.
Lowkey iconic lineage ngl π
π Public Types π
typedef _Traits::difference_type difference_typetypedef _Traits::iterator_category iterator_categorytypedef _Iterator iterator_typetypedef _Traits::pointer pointertypedef _Traits::reference referencetypedef _Traits::value_type value_type
π¦ Public Member Functions π¦
_Safe_local_iterator () noexceptβ the no-arg one, it exists, that's the whole tweet._Safe_local_iterator (_Iterator __i, const _Safe_sequence_base *__cont)β Safe iterator construction from an unsafe iterator and its sequence. Glow-up from unsafe to safe, we love a transformation arc β¨_Safe_local_iterator (_Safe_local_iterator &&__x) noexceptβ Move construction. It's giving relocation._Safe_local_iterator (const _Safe_local_iterator &__x) noexceptβ Copy construction. Twin energy.template<typename _MutableIterator> _Safe_local_iterator (const _Safe_local_iterator< _MutableIterator, typename __gnu_cxx::__enable_if< _IsConstant::__value &&std::__are_same< _MutableIterator, _OtherIterator >::__value, _Sequence >::__type > &__x) noexceptβ Converting constructor from a mutable iterator to a constant iterator. Mutable β‘οΈ constant, it's a whole character development moment.void _M_attach (_Safe_sequence_base *__seq)β attach that iterator, periodt.void _M_attach_single (_Safe_sequence_base *__seq)β attach, but the single-threaded version of the vibe.bool _M_attached_to (const _Safe_sequence_base *__seq) constβ are we attached to this sequence or not, asking for a friend.bool _M_can_compare (const _Safe_iterator_base &__x) const throw ()β can we compare, yes or no.bool _M_dereferenceable () constβ Is the iterator dereferenceable?_Distance_traits< _Iterator >::__type _M_get_distance_to (const _Safe_local_iterator &__rhs) constβ distance check between you and your rhs π«__gnu_cxx::__conditional_type< _IsConstant::__value, const_Sequence *, _Sequence * >::__type _M_get_sequence () constβ gets the sequence, conditional-type flavoured.template<typename _Other> bool _M_in_same_bucket (const _Safe_local_iterator< _Other, _Sequence > &__other) constβ Is this iterator part of the same bucket as the other one?bool _M_incrementable () constβ Is the iterator incrementable?void _M_invalidate ()β invalidate, bye πbool _M_is_begin () constβ Is this iterator equal to the sequence's begin(bucket) iterator?bool _M_is_end () constβ Is this iterator equal to the sequence's end(bucket) iterator?void _M_reset () throw ()β reset moment.bool _M_singular () const throw ()β singular check, no cap.void _M_unlink () throw ()β unlink it.bool _M_valid_range (const _Safe_local_iterator &__rhs, std::pair< difference_type, _Distance_precision > &__dist_info) constβ is this a valid range or are we delulu.bool _M_value_initialized () constβ Is the iterator value-initialized?const _Iterator & base () const noexceptβ base access, const flavour._Iterator & base () noexceptβ Return the underlying iterator. The real one. The one behind the curtain π§size_type bucket () constβ Return the bucket. πͺ£operator _Iterator () constβ Conversion to underlying non-debug iterator to allow better interaction with non-debug containers. Diplomacy with the non-debug world fr fr π«Άreference operator* () constβ Iterator dereference._Safe_local_iterator & operator++ ()β Iterator preincrement._Safe_local_iterator operator++ (int)β Iterator postincrement.pointer operator-> () constβ Iterator dereference. (Yes, same description asoperator*, they said what they said π)_Safe_local_iterator & operator= (_Safe_local_iterator &&__x) noexceptβ Move assignment._Safe_local_iterator & operator= (const _Safe_local_iterator &__x)β Copy assignment.
π Static Public Member Functions π
static constexpr bool _S_constant ()β Determine if this is a constant iterator. Simple as that, bestie.
π Public Attributes π
_Safe_iterator_base * _M_next_Safe_iterator_base * _M_prior_Safe_sequence_base * _M_sequenceunsigned int _M_version
πΈ Protected Member Functions πΈ
void _M_attach (_Safe_sequence_base *__seq, bool __constant)void _M_attach_single (_Safe_sequence_base *__seq, bool __constant) throw ()void _M_detach ()void _M_detach_single () throw ()_Safe_unordered_container_base * _M_get_container () const noexcept__gnu_cxx::__mutex & _M_get_mutex () throw ()
π Friends π
bool operator!= (const _Self &__lhs, const _OtherSelf &__rhs) noexceptbool operator!= (const _Self &__lhs, const _Self &__rhs) noexceptbool operator== (const _Self &__lhs, const _OtherSelf &__rhs) noexceptbool operator== (const _Self &__lhs, const _Self &__rhs) noexcept
π Detailed Description π
template<typename _Iterator, typename _Sequence>
class __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >
"Safe iterator wrapper." β
The class template _Safe_local_iterator is a wrapper around an iterator that tracks the iterator's movement among sequences and checks that operations performed on the 'safe' iterator are legal. So it's literally the chaperone at the party, watching every move π In addition to the basic iterator operations (which are validated, and then passed to the underlying iterator), _Safe_local_iterator has member functions for iterator invalidation, attaching/detaching the iterator from sequences, and querying the iterator's state. It does the most, honestly.
π§ Constructor & Destructor Documentation π§
__gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_Safe_local_iterator () [inline], [noexcept]
template<typename _Iterator, typename _Sequence>
__gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_Safe_local_iterator ()
Postcondition: the iterator is singular and unattached. Alone. Unbothered. In its singular era π
__gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_Safe_local_iterator (_Iterator __i, const _Safe_sequence_base * __cont) [inline]
template<typename _Iterator, typename _Sequence>
__gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_Safe_local_iterator (_Iterator __i, const _Safe_sequence_base * __cont)
Safe iterator construction from an unsafe iterator and its sequence.
Precondition: seq is not NULL. Like, do NOT pass NULL, that's not the move π
Postcondition: this is not singular. We're attached, we're committed, we're in our attached era π«Ά
__gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_Safe_local_iterator (const _Safe_local_iterator< _Iterator, _Sequence > & __x) [inline], [noexcept]
template<typename _Iterator, typename _Sequence>
__gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_Safe_local_iterator (const _Safe_local_iterator< _Iterator, _Sequence > & __x)
Copy construction. Clone behavior, we stan.
References __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_M_attach(), __gnu_debug::_Safe_iterator_base::_M_sequence, __gnu_debug::_Safe_iterator_base::_M_singular(), and __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_M_value_initialized().
__gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_Safe_local_iterator (_Safe_local_iterator< _Iterator, _Sequence > && __x) [inline], [noexcept]
template<typename _Iterator, typename _Sequence>
__gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_Safe_local_iterator (_Safe_local_iterator< _Iterator, _Sequence > && __x)
Move construction.
Postcondition: __x is singular and unattached. It gave everything and now it's empty, we've all been there π
References __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_M_attach(), __gnu_debug::_Safe_local_iterator_base::_M_detach(), __gnu_debug::_Safe_iterator_base::_M_sequence, __gnu_debug::_Safe_iterator_base::_M_singular(), __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_M_value_initialized(), and __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::base().
template<typename _MutableIterator > __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_Safe_local_iterator (const _Safe_local_iterator< _MutableIterator, typename __gnu_cxx::__enable_if< _IsConstant::__value &&std::__are_same< _MutableIterator, _OtherIterator >::__value, _Sequence >::__type > & __x) [inline], [noexcept]
template<typename _Iterator, typename _Sequence>
template<typename _MutableIterator>
__gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_Safe_local_iterator (const _Safe_local_iterator< _MutableIterator, typename __gnu_cxx::__enable_if< _IsConstant::__value &&std::__are_same< _MutableIterator, _OtherIterator >::__value, _Sequence >::__type > & __x)
Converting constructor from a mutable iterator to a constant iterator. The mutable-to-constant pipeline, it's giving growth π±
References __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_M_attach(), __gnu_debug::_Safe_iterator_base::_M_sequence, __gnu_debug::_Safe_iterator_base::_M_singular(), and __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_M_value_initialized().
π₯ Member Function Documentation π₯
_M_attach
template<typename _Iterator, typename _Sequence>
void __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_M_attach (_Safe_sequence_base * __seq) [inline]
Attach iterator to the given sequence. Get in, bestie, we're going to __seq π
References __gnu_debug::_Safe_local_iterator_base::_M_attach(), and __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_S_constant().
Referenced by __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_Safe_local_iterator(), __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_Safe_local_iterator(), __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_Safe_local_iterator(), __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::operator=(), and __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::operator=().
_M_attach (the inherited base one)
void __gnu_debug::_Safe_local_iterator_base::_M_attach (_Safe_sequence_base * __seq, bool __constant) [protected], [inherited]
Attaches this iterator to the given container, detaching it from whatever container it was attached to originally. If the new container is the NULL pointer, the iterator is left unattached. So it's a whole situationship switch β new container or nobody π«
Referenced by __gnu_debug::_Safe_local_iterator_base::_Safe_local_iterator_base(), __gnu_debug::_Safe_local_iterator_base::_Safe_local_iterator_base(), and __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_M_attach().
_M_attach_single
template<typename _Iterator, typename _Sequence>
void __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_M_attach_single (_Safe_sequence_base * __seq) [inline]
Likewise, but not thread-safe. β οΈ Yeah β not thread-safe, so keep that in mind, no cap, don't be reckless with it.
References __gnu_debug::_Safe_local_iterator_base::_M_attach_single(), and __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_S_constant().
_M_attach_single (the inherited base one)
void __gnu_debug::_Safe_local_iterator_base::_M_attach_single (_Safe_sequence_base * __seq, bool __constant) [protected], [inherited]
Likewise, but not thread-safe. Same warning, same energy π
Referenced by __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_M_attach_single().
_M_attached_to
bool __gnu_debug::_Safe_iterator_base::_M_attached_to (const _Safe_sequence_base * __seq) const [inline], [inherited]
Determines if we are attached to the given sequence. Are we or are we not, quiz time π
References __gnu_debug::_Safe_iterator_base::_M_sequence.
_M_can_compare
bool __gnu_debug::_Safe_iterator_base::_M_can_compare (const _Safe_iterator_base & __x) const [inherited]
Can we compare this iterator to the given iterator __x? Returns true if both iterators are nonsingular and reference the same sequence. So it's a compatibility check, and honestly good for them.
_M_dereferenceable
template<typename _Iterator, typename _Sequence>
bool __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_M_dereferenceable () const [inline]
Is the iterator dereferenceable? That's it, that's the question π
References __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_M_is_end(), and __gnu_debug::_Safe_iterator_base::_M_singular().
Referenced by __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::operator*(), and __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::operator->().
_M_detach
void __gnu_debug::_Safe_local_iterator_base::_M_detach () [protected], [inherited]
Detach the iterator for whatever container it is attached to, if any. Breaking up with the container, respectfully πΈ (note the "if any" β sometimes there's nobody to detach from, and that's fine)
Referenced by __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_Safe_local_iterator(), __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::operator=(), and __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::operator=().
void __gnu_debug::_Safe_local_iterator_base::_M_detach_single () π
protected, inherited
okay so this is the same detachment situation as its sibling β likewise, bestie β but with one huge caveat: it is not thread-safe. π No mutex, no safety net, no vibes check. Know the difference before you reach for it.
__gnu_cxx::__mutex & __gnu_debug::_Safe_iterator_base::_M_get_mutex () π protected, inherited
Hands you a reference to the mutex. The whole documented purpose is: for use in _Safe_iterator. That's it, that's the job. β¨
Referenced by __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::operator++(), __gnu_debug::_Safe_iterator< _Iterator, _Sequence, _Category >::operator++(), __gnu_debug::_Safe_iterator< _Iterator, _Sequence, _Category >::operator=(), __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::operator=(), __gnu_debug::_Safe_iterator< _Iterator, _Sequence, _Category >::operator=(), and __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::operator=().
template<typename _Iterator , typename _Sequence > template<typename _Other > bool __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_M_in_same_bucket (const _Safe_local_iterator< _Other, _Sequence > & __other) const πͺ£ inline
The vibe check of bucket membership β is this iterator part of the same bucket as __other? π
References __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::bucket().
template<typename _Iterator , typename _Sequence > bool __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_M_incrementable () const β¬οΈ inline
Can you even increment it? That's the question. π
References __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_M_is_end(), and __gnu_debug::_Safe_iterator_base::_M_singular().
Referenced by __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::operator++(), and __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::operator++().
void __gnu_debug::_Safe_iterator_base::_M_invalidate () π inline, inherited
Invalidates the iterator, which makes it singular. That's the whole thing β once it's singular, it's giving don't touch me energy.
References __gnu_debug::_Safe_iterator_base::_M_version.
template<typename _Iterator , typename _Sequence > bool __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_M_is_begin () const πΈ inline
Are we literally equal to the sequence's begin(bucket) iterator? Yes/no, no in-between. π
References __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::base(), and __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::bucket().
template<typename _Iterator , typename _Sequence > bool __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_M_is_end () const π inline
Same energy, other end of the bucket β are we equal to the sequence's end(bucket) iterator? π¦
References __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::base(), and __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::bucket().
Referenced by __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_M_dereferenceable(), and __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_M_incrementable().
void __gnu_debug::_Safe_iterator_base::_M_reset () π inherited
Resets all the member variables. Factory-reset, but for an iterator. β¨
bool __gnu_debug::_Safe_iterator_base::_M_singular () const π inherited
Is this iterator singular? Literally just a yes/no, but the "referenced by" list on this one is iconic levels of long. π
Referenced by __gnu_debug::_Safe_iterator< _Iterator, _Sequence, _Category >::_Safe_iterator(), __gnu_debug::_Safe_iterator< _Iterator, _Sequence, _Category >::_Safe_iterator(), __gnu_debug::_Safe_iterator< _Iterator, _Sequence, _Category >::_Safe_iterator(), __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_Safe_local_iterator(), __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_Safe_local_iterator(), __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_Safe_local_iterator(), __gnu_debug::__check_singular_aux(), __gnu_debug::_Safe_iterator< _Iterator, _Sequence, _Category >::_M_dereferenceable(), __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_M_dereferenceable(), __gnu_debug::_Safe_iterator< _Iterator, _Sequence, _Category >::_M_incrementable(), __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_M_incrementable(), __gnu_debug::_Safe_iterator< _Iterator, _Sequence, _Category >::operator=(), __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::operator=(), __gnu_debug::_Safe_iterator< _Iterator, _Sequence, _Category >::operator=(), and __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::operator=().
void __gnu_debug::_Safe_iterator_base::_M_unlink () βοΈ inline, inherited
Unlinks itself. Like leaving the group chat but β¨officialβ¨.
References __gnu_debug::_Safe_iterator_base::_M_next, and __gnu_debug::_Safe_iterator_base::_M_prior.
template<typename _Iterator , typename _Sequence > bool __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_M_value_initialized () const π inline
Is the iterator value-initialized? That's the question, and honestly it matters way more than you'd think. π«Ά
References __gnu_debug::_Safe_iterator_base::_M_version, and __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::base().
Referenced by __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_Safe_local_iterator(), __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_Safe_local_iterator(), __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_Safe_local_iterator(), __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::operator=(), and __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::operator=().
template<typename _Iterator , typename _Sequence > static constexpr bool __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_S_constant () π§ inline, static, constexpr
Figures out whether this is a constant iterator. Compile-time knowledge, no runtime drama. π
Referenced by __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_M_attach(), and __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_M_attach_single().
template<typename _Iterator , typename _Sequence > _Iterator & __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::base () π inline, noexcept
Returns the underlying iterator β the real one hiding under all the debug layers. And it's noexcept, so it will not surprise you. π
Referenced by __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_Safe_local_iterator(), __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_M_is_begin(), __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_M_is_end(), __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_M_value_initialized(), __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::bucket(), __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::operator*(), __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::operator++(), __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::operator->(), __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::operator=(), and __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::operator=().
template<typename _Iterator , typename _Sequence > size_type __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::bucket () const πͺ£ inline
Returns the bucket. Which bucket, you ask? The one it's in. π
References __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::base().
Referenced by __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_M_in_same_bucket(), __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_M_is_begin(), and __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_M_is_end().
template<typename _Iterator , typename _Sequence > __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::operator _Iterator () const π inline
Conversion to the underlying non-debug iterator, so it can play nicely with non-debug containers. It's giving "I can code-switch." π
template<typename _Iterator , typename _Sequence > reference __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::operator* () const β¨ inline
Iterator dereference. Classic. The main character of operators. π
Precondition: iterator is dereferenceable.
References __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_M_dereferenceable(), and __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::base().
template<typename _Iterator , typename _Sequence > _Safe_local_iterator & __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::operator++ () β¬οΈ inline
Iterator preincrement β increments, then hands you back a reference. π₯
Precondition: iterator is incrementable.
References __gnu_debug::_Safe_iterator_base::_M_get_mutex(), __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_M_incrementable(), and __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::base().
template<typename _Iterator , typename _Sequence > _Safe_local_iterator __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::operator++ (int) β¬οΈ inline
Iterator postincrement β returns the old one and then moves on. Note the sneaky int in the signature, that's just how postincrement says hi. π¦
Precondition: iterator is incrementable.
References __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_M_incrementable().
template<typename _Iterator , typename _Sequence > pointer __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::operator-> () const π― inline
Dereference, but make it ->. Same precondition, same energy. β¨
Precondition: iterator is dereferenceable.
References __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_M_dereferenceable(), and __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::base().
template<typename _Iterator , typename _Sequence > _Safe_local_iterator & __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::operator= (_Safe_local_iterator< _Iterator, _Sequence > && __x) π inline, noexcept
Move assignment. Takes everything __x has, and noexcept about it.
Postcondition: __x is singular and unattached.
References std::__addressof(), __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_M_attach(), __gnu_debug::_Safe_local_iterator_base::_M_detach(), __gnu_debug::_Safe_iterator_base::_M_get_mutex(), __gnu_debug::_Safe_iterator_base::_M_sequence, __gnu_debug::_Safe_iterator_base::_M_singular(), __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_M_value_initialized(), __gnu_debug::_Safe_iterator_base::_M_version, __gnu_debug::_Safe_sequence_base::_M_version, and __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::base().
template<typename _Iterator , typename _Sequence > _Safe_local_iterator & __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::operator= (const _Safe_local_iterator< _Iterator, _Sequence > & __x) π inline
Copy assignment. Copies the whole situation from __x. π«Ά
References __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_M_attach(), __gnu_debug::_Safe_local_iterator_base::_M_detach(), __gnu_debug::_Safe_iterator_base::_M_get_mutex(), __gnu_debug::_Safe_iterator_base::_M_sequence, __gnu_debug::_Safe_iterator_base::_M_singular(), __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_M_value_initialized(), __gnu_debug::_Safe_iterator_base::_M_version, __gnu_debug::_Safe_sequence_base::_M_version, and __gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::base().
π MEMBER DATA DOCUMENTATION π
Okay bestie, these are the data members, and yes, theyβre all inherited β nepo baby energy, but make it C++ π
π¦ _M_next π¦
_Safe_iterator_base* __gnu_debug::_Safe_iterator_base::_M_next[inherited]
Pointer to the next iterator in the sequenceβs list of iterators. Only valid when _M_sequence != NULL.
Referenced by __gnu_debug::_Safe_sequence< _SafeSequence >::_M_invalidate_if(), __gnu_debug::_Safe_sequence< _Sequence >::_M_transfer_from_if(), and __gnu_debug::_Safe_iterator_base::_M_unlink().
π _M_prior π
_Safe_iterator_base* __gnu_debug::_Safe_iterator_base::_M_prior[inherited]
Pointer to the previous iterator in the sequenceβs list of iterators. Only valid when _M_sequence != NULL.
Referenced by __gnu_debug::_Safe_sequence< _SafeSequence >::_M_invalidate_if(), __gnu_debug::_Safe_sequence< _Sequence >::_M_transfer_from_if(), and __gnu_debug::_Safe_iterator_base::_M_unlink().
πΈ _M_sequence πΈ
_Safe_sequence_base* __gnu_debug::_Safe_iterator_base::_M_sequence[inherited]
The sequence this iterator references; may be NULL to indicate a singular iterator.
Referenced by:
__gnu_debug::_Safe_iterator< _Iterator, _Sequence, _Category >::_Safe_iterator()__gnu_debug::_Safe_iterator< _Iterator, _Sequence, _Category >::_Safe_iterator()__gnu_debug::_Safe_iterator< _Iterator, _Sequence, _Category >::_Safe_iterator()__gnu_debug::_Safe_iterator_base::_Safe_iterator_base()__gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_Safe_local_iterator()__gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_Safe_local_iterator()__gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_Safe_local_iterator()__gnu_debug::_Safe_local_iterator_base::_Safe_local_iterator_base()__gnu_debug::_Safe_iterator_base::_M_attached_to()__gnu_debug::_Safe_sequence< _Sequence >::_M_transfer_from_if()__gnu_debug::_Safe_iterator< _Iterator, _Sequence, _Category >::operator=()__gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::operator=()__gnu_debug::_Safe_iterator< _Iterator, _Sequence, _Category >::operator=()__gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::operator=()
β _M_version β
unsigned int __gnu_debug::_Safe_iterator_base::_M_version[inherited]
The version number of this iterator. The sentinel value 0 is used to indicate an invalidated iterator (i.e., one that is singular because of an operation on the container). This version number must equal the version number in the sequence referenced by _M_sequence for the iterator to be non-singular.
Referenced by:
__gnu_debug::_Safe_iterator_base::_M_invalidate()__gnu_debug::_Safe_sequence< _Sequence >::_M_transfer_from_if()__gnu_debug::_Safe_iterator< _Iterator, _Sequence, _Category >::_M_value_initialized()__gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::_M_value_initialized()__gnu_debug::_Safe_iterator< _Iterator, _Sequence, _Category >::operator=()__gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::operator=()__gnu_debug::_Safe_iterator< _Iterator, _Sequence, _Category >::operator=()__gnu_debug::_Safe_local_iterator< _Iterator, _Sequence >::operator=()
π AUTHOR π
Generated automatically by Doxygen for libstdc++ from the source code.
Source/version: libstd__gnu_debug::_...or, _Sequence >(3cxx) β¨ β and the date is the one stamped in the footer, periodt. Byeee bestie π«Άπ
π¦ where this page comes from
- ubuntu noble: libstdc++-14-doc 14-20240412-0ubuntu1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms