__GNU_DEBUG::_SAFE_ITERATOR(3)
π NAME π
__gnu_debug::_Safe_iterator< _Iterator, _Sequence, _Category > β Safe iterator wrapper. π
okay so real talk, bestie: this page comes from the Library Functions Manual, section 3 β that's the library-calls corner of the man pages, iykyk. And it's a class template, not some lil function, so there is a LOT going on. Grab a snack. π
β¨ SYNOPSIS β¨
#include <safe_iterator.h>
Inherits β the original literally just says "Inherits ." with nothing after the dot. Not me pointing that out, that's just what it says. π
Inherited by __gnu_debug::_Safe_iterator< _Iterator, _Sequence, std::random_access_iterator_tag >.
π¦ Public Types π¦
typedef _Safe_iterator< _Iterator, _Sequence, iterator_category > _Selfβ the class pointing at its own type, main character energy honestly. πtypedef _Traits::difference_type difference_typeβ borrowingdifference_typefrom_Traits.typedef _Traits::iterator_category iterator_categoryβ and theiterator_categorytoo.using iterator_conceptβ ausingforiterator_concept.typedef _Iterator iterator_typeβ the underlying iterator type, the one this whole thing is wrapping.typedef _Traits::pointer pointerβpointer, straight from_Traits.typedef _Traits::reference referenceβreference, also from_Traits.typedef _Traits::value_type value_typeβ andvalue_type. the whole_Traitsfamily reunion. π
πΈ Public Member Functions πΈ
constexpr _Safe_iterator () noexceptβ the plain default constructor, doing default-constructor things.constexpr _Safe_iterator (_Iterator __i, const _Safe_sequence_base *__seq) noexceptβ Safe iterator construction from an unsafe iterator and its sequence. β¨constexpr _Safe_iterator (_Safe_iterator &&__x) noexceptβ Move construction. π¦constexpr _Safe_iterator (const _Safe_iterator &__x) noexceptβ Copy construction. πtemplate<typename _MutableIterator> constexpr _Safe_iterator (const _Safe_iterator< _MutableIterator, _Sequence, typename __gnu_cxx::__enable_if< _IsConstant::__value &&std::__are_same< _MutableIterator, _OtherIterator >::__value, _Category >::__type > &__x) noexceptβ Converting constructor from a mutable iterator to a constant iterator. the glow-up from mutable to const, slay. πvoid _M_attach (const _Safe_sequence_base *__seq)β attach, but the internal one.void _M_attach_single (const _Safe_sequence_base *__seq)β attach, singular edition.bool _M_attached_to (const _Safe_sequence_base *__seq) constβ are we attached to__seq? inquiring minds.bool _M_before_dereferenceable () constβ Is the iterator before a dereferenceable one?template<typename _Diff> bool _M_can_advance (const std::pair< _Diff, _Distance_precision > &__dist, int __way) constβ the templated "can you advance" check.bool _M_can_advance (difference_type __n, bool __strict=false) constβ the non-template "can you advance" check, and yes__strictdefaults tofalse.bool _M_can_compare (const _Safe_iterator_base &__x) const noexceptβ "can you compare",noexcept.bool _M_dereferenceable () constβ Is the iterator dereferenceable? the vibe check before you*it. π₯void _M_detach_single () noexceptβ detach, singular edition._Distance_traits< _Iterator >::__type _M_get_distance_from_begin () constβ distance from the beginning._Distance_traits< _Iterator >::__type _M_get_distance_to (const _Safe_iterator &__rhs) constβ distance to__rhs._Distance_traits< _Iterator >::__type _M_get_distance_to_end () constβ distance to the end.__gnu_cxx::__conditional_type< _IsConstant::__value, const_Sequence *, _Sequence * >::__type _M_get_sequence () constβ hands you back the sequence, and whether it's const depends on_IsConstant::__value.bool _M_incrementable () constβ Is the iterator incrementable?void _M_invalidate ()β make it invalid.bool _M_is_before_begin () constβ Is this iterator equal to the sequence's before_begin() iterator if any?constexpr bool _M_is_begin () constβ Is this iterator equal to the sequence's begin() iterator?bool _M_is_beginnest () constβ Is this iterator equal to the sequence's before_begin() iterator if any or begin() otherwise? "beginnest" is such a word and I'm obsessed. πbool _M_is_end () constβ Is this iterator equal to the sequence's end() iterator?void _M_reset () noexceptβ reset it.bool _M_singular () const noexceptβ is it singular?void _M_unlink () noexceptβ unlink it.bool _M_valid_range (const _Safe_iterator &__rhs, std::pair< difference_type, _Distance_precision > &__dist, bool __check_dereferenceable=true) constβ the valid-range check, with__check_dereferenceabledefaulting totrue.bool _M_value_initialized () constβ Is the iterator value-initialized?constexpr const _Iterator & base () const noexceptβ the const flavour ofbase().constexpr _Iterator & base () noexceptβ Return the underlying iterator.constexpr operator _Iterator () const noexceptβ Conversion to underlying non-debug iterator to allow better interaction with non-debug containers.constexpr reference operator* () const noexceptβ Iterator dereference.constexpr _Safe_iterator & operator++ () noexceptβ Iterator preincrement.constexpr _Safe_iterator operator++ (int) noexceptβ Iterator postincrement.constexpr pointer operator-> () const noexceptβ Iterator dereference. again, but through the arrow this time.constexpr _Safe_iterator & operator= (_Safe_iterator &&__x) noexceptβ Move assignment.constexpr _Safe_iterator & operator= (const _Safe_iterator &__x) noexceptβ Copy assignment.
β Static Public Member Functions β
static constexpr bool _S_constant ()β Determine if this is a constant iterator.
π Public Attributes π
_Safe_iterator_base * _M_next_Safe_iterator_base * _M_priorconst _Safe_sequence_base * _M_sequenceunsigned int _M_version
π Protected Types π
typedef std::__are_same< typename _Sequence::_Base::const_iterator, _Iterator > _IsConstanttypedef __gnu_cxx::__conditional_type< _IsConstant::__value, typename_Sequence::_Base::iterator, typename_Sequence::_Base::const_iterator >::__type _OtherIterator
π§ Protected Member Functions π§
constexpr _Safe_iterator (const _Safe_iterator &__x, _Unchecked) noexceptvoid _M_attach (const _Safe_sequence_base *__seq, bool __constant)void _M_attach_single (const _Safe_sequence_base *__seq, bool __constant) noexceptvoid _M_detach ()__gnu_cxx::__mutex & _M_get_mutex () noexcept
π Friends π
template<typename _IteR> constexpr friend bool operator== (const _Self &__lhs, const _Safe_iterator< _IteR, _Sequence, iterator_category > &__rhs) noexceptconstexpr friend bool operator== (const _Self &__lhs, const _Self &__rhs) noexcept
π« Detailed Description π«
template<typename _Iterator, typename _Sequence, typename _Category =
typename std::iterator_traits<_Iterator>::iterator_category>
class __gnu_debug::_Safe_iterator< _Iterator, _Sequence, _Category >
Safe iterator wrapper.
okay so here's the whole concept, bestie. The class template _Safe_iterator is a wrapper around an iterator that keeps track of where that iterator is moving around among sequences, and it checks that whatever you're doing to the "safe" iterator is actually legal. On top of the basic iterator operations (which get validated, and then passed to the underlying iterator), _Safe_iterator has member functions for iterator invalidation, for attaching/detaching the iterator from sequences, and for querying the iterator's state. so it's like a bodyguard for your iterator, fr fr. π«Ά
β οΈ Note that_Iteratormust be the first base class so that it gets initialized before the iterator is being attached to the container's list of iterators and it is being detached before_Iteratorget destroyed. Otherwise it would result in a data race. no cap, that's a real one. π
π₯ Constructor & Destructor Documentation π₯
_Safe_iterator ()
template<typename _Iterator, typename _Sequence, typename _Category =
typename std::iterator_traits<_Iterator>::iterator_category>
__gnu_debug::_Safe_iterator< _Iterator, _Sequence, _Category
>::_Safe_iterator () [inline], [constexpr], [noexcept]
Postcondition
- the iterator is singular and unattached
_Safe_iterator (_Iterator __i, const _Safe_sequence_base * __seq)
template<typename _Iterator, typename _Sequence, typename _Category =
typename std::iterator_traits<_Iterator>::iterator_category>
__gnu_debug::_Safe_iterator< _Iterator, _Sequence, _Category
>::_Safe_iterator (_Iterator __i, const _Safe_sequence_base * __seq)
[inline], [constexpr], [noexcept]
Safe iterator construction from an unsafe iterator and its sequence.
Precondition
seqis notNULL
Postcondition
thisis not singular
_Safe_iterator (const _Safe_iterator< _Iterator, _Sequence, _Category > & __x)
template<typename _Iterator, typename _Sequence, typename _Category =
typename std::iterator_traits<_Iterator>::iterator_category>
__gnu_debug::_Safe_iterator< _Iterator, _Sequence, _Category
>::_Safe_iterator (const _Safe_iterator< _Iterator, _Sequence, _Category
> & __x) [inline], [constexpr], [noexcept]
Copy construction.
_Safe_iterator (_Safe_iterator< _Iterator, _Sequence, _Category > && __x)
template<typename _Iterator, typename _Sequence, typename _Category =
typename std::iterator_traits<_Iterator>::iterator_category>
__gnu_debug::_Safe_iterator< _Iterator, _Sequence, _Category
>::_Safe_iterator (_Safe_iterator< _Iterator, _Sequence, _Category > &&
__x) [inline], [constexpr], [noexcept]
Move construction.
Postcondition
__xis singular and unattached
_Safe_iterator (const _Safe_iterator< _MutableIterator, _Sequence, ... > & __x)
template<typename _Iterator, typename _Sequence, typename _Category =
typename std::iterator_traits<_Iterator>::iterator_category>
template<typename _MutableIterator> __gnu_debug::_Safe_iterator<
_Iterator, _Sequence, _Category >::_Safe_iterator (const _Safe_iterator<
_MutableIterator, _Sequence, typename __gnu_cxx::__enable_if<
_IsConstant::__value &&std::__are_same< _MutableIterator, _OtherIterator
>::__value, _Category >::__type > & __x) [inline], [constexpr],
[noexcept]
Converting constructor from a mutable iterator to a constant iterator.
π Member Function Documentation π
_M_attach
template<typename _Iterator, typename _Sequence, typename _Category =
typename std::iterator_traits<_Iterator>::iterator_category> void
__gnu_debug::_Safe_iterator< _Iterator, _Sequence, _Category
>::_M_attach (const _Safe_sequence_base * __seq) [inline]
Attach iterator to the given sequence.
Referenced by __gnu_debug::_Safe_iterator< _Base_iterator, map >::_Safe_iterator(), __gnu_debug::_Safe_iterator< _Base_iterator, map >::_Safe_iterator(), __gnu_debug::_Safe_iterator< _Base_iterator, map >::_Safe_iterator(), __gnu_debug::_Safe_iterator< _Base_iterator, map >::operator=(), and __gnu_debug::_Safe_iterator< _Base_iterator, map >::operator=().
_Safe_iterator_base::_M_attach
void __gnu_debug::_Safe_iterator_base::_M_attach (const _Safe_sequence_base
* __seq, bool __constant) [protected], [inherited]
Attaches this iterator to the given sequence, detaching it from whatever sequence it was attached to originally. If the new sequence is the NULL pointer, the iterator is left unattached.
References _M_attach().
Referenced by _Safe_iterator_base(), _Safe_iterator_base(), __gnu_debug::_Safe_iterator< _Base_iterator, map >::_M_attach(), and _M_attach().
_M_attach_single
template<typename _Iterator, typename _Sequence, typename _Category =
typename std::iterator_traits<_Iterator>::iterator_category> void
__gnu_debug::_Safe_iterator< _Iterator, _Sequence, _Category
>::_M_attach_single (const _Safe_sequence_base * __seq) [inline]
Likewise, but not thread-safe.
_Safe_iterator_base::_M_attach_single
void __gnu_debug::_Safe_iterator_base::_M_attach_single (const
_Safe_sequence_base * __seq, bool __constant) [protected], [noexcept],
[inherited]
Likewise, but not thread-safe.
References _M_attach_single().
Referenced by __gnu_debug::_Safe_iterator< _Base_iterator, map >::_M_attach_single(), and _M_attach_single().
_Safe_iterator_base::_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.
References _M_attached_to(), and _M_sequence.
Referenced by _M_attached_to().
_M_before_dereferenceable
template<typename _Iterator, typename _Sequence, typename _Category =
typename std::iterator_traits<_Iterator>::iterator_category> bool
__gnu_debug::_Safe_iterator< _Iterator, _Sequence, _Category
>::_M_before_dereferenceable () const [inline]
Is the iterator before a dereferenceable one?
_M_can_compare π
bool __gnu_debug::_Safe_iterator_base::_M_can_compare (const _Safe_iterator_base & __x) const [noexcept], [inherited]
okay so bestie, this one is literally asking: can we even compare this iterator to the one you passed in, __x? It returns true only if both iterators are nonsingular and reference the same sequence. No cap.
- References:
_Safe_iterator_base(), and_M_can_compare(). - Referenced by:
_M_can_compare().
_M_dereferenceable β¨
template<typename _Iterator, typename _Sequence, typename _Category = typename std::iterator_traits<_Iterator>::iterator_category> bool __gnu_debug::_Safe_iterator< _Iterator, _Sequence, _Category >::_M_dereferenceable () const [inline]
Is the iterator dereferenceable? Like, can you actually do *it without it being a whole mess? That's the question. π
- Referenced by:
__gnu_debug::_Safe_iterator< _Base_iterator, map >::operator*(), and__gnu_debug::_Safe_iterator< _Base_iterator, map >::operator->().
_M_detach π
void __gnu_debug::_Safe_iterator_base::_M_detach () [protected], [inherited]
Detach the iterator from whatever sequence it's attached to, if any. Like, it's breaking up with the container. π
- References:
_M_detach(). - Referenced by:
__gnu_debug::_Safe_iterator< _Base_iterator, map >::_Safe_iterator()_M_detach()__gnu_debug::_Safe_iterator< _Base_iterator, map >::operator=()__gnu_debug::_Safe_iterator< _Base_iterator, map >::operator=()
_M_detach_single π¦
void __gnu_debug::_Safe_iterator_base::_M_detach_single () [noexcept], [inherited]
Likewise, but not thread-safe. So like, same energy but don't try this in a multithreaded situation, bestie. π
_M_get_mutex π
__gnu_cxx::__mutex & __gnu_debug::_Safe_iterator_base::_M_get_mutex () [protected], [noexcept], [inherited]
For use in _Safe_iterator. It's giving "I'm the lock, you need me for thread safety." π
- Referenced by:
__gnu_debug::_Safe_iterator< _Base_iterator, map >::operator++()__gnu_debug::_Safe_local_iterator< _OtherIterator, _UContainer >::operator++()__gnu_debug::_Safe_iterator< _Base_iterator, map >::operator=()__gnu_debug::_Safe_iterator< _Base_iterator, map >::operator=()__gnu_debug::_Safe_local_iterator< _OtherIterator, _UContainer >::operator=()__gnu_debug::_Safe_local_iterator< _OtherIterator, _UContainer >::operator=()
_M_incrementable π
template<typename _Iterator, typename _Sequence, typename _Category = typename std::iterator_traits<_Iterator>::iterator_category> bool __gnu_debug::_Safe_iterator< _Iterator, _Sequence, _Category >::_M_incrementable () const [inline]
Is the iterator incrementable? Like, can you do ++it without the universe exploding? That's the vibe check. π₯
- Referenced by:
__gnu_debug::_Safe_iterator< _Base_iterator, map >::_M_before_dereferenceable()__gnu_debug::_Safe_iterator< _Base_iterator, map >::operator++()__gnu_debug::_Safe_iterator< _Base_iterator, map >::operator++()
_M_invalidate π
void __gnu_debug::_Safe_iterator_base::_M_invalidate () [inline], [inherited]
Invalidate the iterator, making it singular. So it's like, poof, you're nothing now. No cap. π
- References:
_M_invalidate(), and_M_version. - Referenced by:
_M_invalidate().
_M_is_before_begin πΈ
template<typename _Iterator, typename _Sequence, typename _Category = typename std::iterator_traits<_Iterator>::iterator_category> bool __gnu_debug::_Safe_iterator< _Iterator, _Sequence, _Category >::_M_is_before_begin () const [inline]
Is this iterator equal to the sequence's before_begin() iterator if any? So like, are you the "before the beginning" vibe? π€
- Referenced by:
__gnu_debug::_Safe_iterator< _Base_iterator, map >::_M_dereferenceable().
_M_is_begin β
template<typename _Iterator, typename _Sequence, typename _Category = typename std::iterator_traits<_Iterator>::iterator_category> bool __gnu_debug::_Safe_iterator< _Iterator, _Sequence, _Category >::_M_is_begin () const [inline], [constexpr]
Is this iterator equal to the sequence's begin() iterator? Like, are you the first? The main character? π
_M_is_beginnest π§
template<typename _Iterator, typename _Sequence, typename _Category = typename std::iterator_traits<_Iterator>::iterator_category> bool __gnu_debug::_Safe_iterator< _Iterator, _Sequence, _Category >::_M_is_beginnest () const [inline]
Is this iterator equal to the sequence's before_begin() iterator if any or begin() otherwise? So like, the "beginning-est" you can be? That's a vibe. β¨
_M_is_end π
template<typename _Iterator, typename _Sequence, typename _Category = typename std::iterator_traits<_Iterator>::iterator_category> bool __gnu_debug::_Safe_iterator< _Iterator, _Sequence, _Category >::_M_is_end () const [inline]
Is this iterator equal to the sequence's end() iterator? Like, are you at the end? The final boss? π
- Referenced by:
__gnu_debug::_Safe_iterator< _Base_iterator, map >::_M_dereferenceable()__gnu_debug::_Safe_iterator< _Base_iterator, map >::_M_incrementable()
_M_reset π
void __gnu_debug::_Safe_iterator_base::_M_reset () [noexcept], [inherited]
Reset all member variables. Like a factory reset but for your iterator. π
_M_singular π«₯
bool __gnu_debug::_Safe_iterator_base::_M_singular () const [noexcept], [inherited]
Is this iterator singular? Like, is it all alone, not attached to any sequence? That's the question. πΆ
- Referenced by:
__gnu_debug::_Safe_iterator< _Base_iterator, map >::_Safe_iterator()__gnu_debug::_Safe_iterator< _Base_iterator, map >::_Safe_iterator()__gnu_debug::_Safe_iterator< _Base_iterator, map >::_Safe_iterator()__gnu_debug::_Safe_local_iterator< _OtherIterator, _UContainer >::_Safe_local_iterator()__gnu_debug::_Safe_local_iterator< _OtherIterator, _UContainer >::_Safe_local_iterator()__gnu_debug::_Safe_local_iterator< _OtherIterator, _UContainer >::_Safe_local_iterator()__gnu_debug::__check_singular_aux()__gnu_debug::_Safe_iterator< _Base_iterator, map >::_M_dereferenceable()__gnu_debug::_Safe_local_iterator< _OtherIterator, _UContainer >::_M_dereferenceable()__gnu_debug::_Safe_iterator< _Base_iterator, map >::_M_incrementable()__gnu_debug::_Safe_local_iterator< _OtherIterator, _UContainer >::_M_incrementable()__gnu_debug::_Safe_iterator< _Base_iterator, map >::operator=()__gnu_debug::_Safe_iterator< _Base_iterator, map >::operator=()__gnu_debug::_Safe_local_iterator< _OtherIterator, _UContainer >::operator=()__gnu_debug::_Safe_local_iterator< _OtherIterator, _UContainer >::operator=()
_M_unlink π
void __gnu_debug::_Safe_iterator_base::_M_unlink () [inline], [noexcept], [inherited]
Unlink itself. Like, removing yourself from the group chat. π
- References:
_M_next,_M_prior, and_M_unlink(). - Referenced by:
_M_unlink().
_M_value_initialized πΌ
template<typename _Iterator, typename _Sequence, typename _Category = typename std::iterator_traits<_Iterator>::iterator_category> bool __gnu_debug::_Safe_iterator< _Iterator, _Sequence, _Category >::_M_value_initialized () const [inline]
Is the iterator value-initialized? Like, is it a fresh baby iterator? πΆ
- Referenced by:
__gnu_debug::_Safe_iterator< _Base_iterator, map >::_Safe_iterator()__gnu_debug::_Safe_iterator< _Base_iterator, map >::_Safe_iterator()__gnu_debug::_Safe_iterator< _Base_iterator, map >::_Safe_iterator()__gnu_debug::_Safe_iterator< _Base_iterator, map >::operator=()__gnu_debug::_Safe_iterator< _Base_iterator, map >::operator=()
_S_constant π§
template<typename _Iterator, typename _Sequence, typename _Category = typename std::iterator_traits<_Iterator>::iterator_category> constexpr bool __gnu_debug::_Safe_iterator< _Iterator, _Sequence, _Category >::_S_constant () [inline], [static], [constexpr]
Determine if this is a constant iterator. Like, is it unchangeable? Frozen? βοΈ
- Referenced by:
__gnu_debug::_Safe_iterator< _Base_iterator, map >::_M_attach()__gnu_debug::_Safe_iterator< _Base_iterator, map >::_M_attach_single()
base π
template<typename _Iterator, typename _Sequence, typename _Category = typename std::iterator_traits<_Iterator>::iterator_category> _Iterator & __gnu_debug::_Safe_iterator< _Iterator, _Sequence, _Category >::base () [inline], [constexpr], [noexcept]
Return the underlying iterator. Like, unwrapping the gift to see the real iterator inside. π
- Referenced by:
__gnu_debug::_Safe_iterator< _Base_iterator, map >::_Safe_iterator()__gnu_debug::_Safe_iterator< _Base_iterator, map >::_M_before_dereferenceable()__gnu_debug::_Safe_iterator< _Base_iterator, map >::_M_is_begin()__gnu_debug::_Safe_iterator< _Base_iterator, map >::_M_is_end()__gnu_debug::_Safe_iterator< _Base_iterator, map >::_M_value_initialized()__gnu_debug::_Safe_iterator< _Base_iterator, map >::operator*()__gnu_debug::_Safe_iterator< _Base_iterator, map >::operator++()__gnu_debug::_Safe_iterator< _Base_iterator, map >::operator->()__gnu_debug::_Safe_iterator< _Base_iterator, map >::operator=()__gnu_debug::_Safe_iterator< _Base_iterator, map >::operator=()
operator _Iterator π
template<typename _Iterator, typename _Sequence, typename _Category = typename std::iterator_traits<_Iterator>::iterator_category> __gnu_debug::_Safe_iterator< _Iterator, _Sequence, _Category >::operator _Iterator () const [inline], [constexpr], [noexcept]
Conversion to underlying non-debug iterator to allow better interaction with non-debug containers. So like, you can vibe with the normal iterators too. π€
operator* π
template<typename _Iterator, typename _Sequence, typename _Category = typename std::iterator_traits<_Iterator>::iterator_category> reference __gnu_debug::_Safe_iterator< _Iterator, _Sequence, _Category >::operator* () const [inline], [nodiscard], [constexpr], [noexcept]
Iterator dereference. Like, getting the actual value. β¨
Precondition: iterator is dereferenceable
operator++ (pre) π
template<typename _Iterator, typename _Sequence, typename _Category = typename std::iterator_traits<_Iterator>::iterator_category> _Safe_iterator & __gnu_debug::_Safe_iterator< _Iterator, _Sequence, _Category >::operator++ () [inline], [constexpr], [noexcept]
Iterator preincrement. Like, moving forward. π«
Precondition: iterator is incrementable
operator++ (post) πββοΈ
template<typename _Iterator, typename _Sequence, typename _Category = typename std::iterator_traits<_Iterator>::iterator_category> _Safe_iterator __gnu_debug::_Safe_iterator< _Iterator, _Sequence, _Category >::operator++ (int ) [inline], [constexpr], [noexcept]
Iterator postincrement. Like, moving forward but returning the old vibe. β¨
Precondition: iterator is incrementable
operator-> π
template<typename _Iterator, typename _Sequence, typename _Category = typename std::iterator_traits<_Iterator>::iterator_category> pointer __gnu_debug::_Safe_iterator< _Iterator, _Sequence, _Category >::operator-> () const [inline], [nodiscard], [constexpr], [noexcept]
Iterator dereference. Like, getting the pointer to the value. π―
Precondition: iterator is dereferenceable
operator= (move) π
template<typename _Iterator, typename _Sequence, typename _Category = typename std::iterator_traits<_Iterator>::iterator_category> _Safe_iterator & __gnu_debug::_Safe_iterator< _Iterator, _Sequence, _Category >::operator= (_Safe_iterator< _Iterator, _Sequence, _Category > && __x) [inline], [constexpr], [noexcept]
Move assignment. Like, taking everything from __x and leaving it empty. π¨
Postcondition: __x is singular and unattached
operator= (copy) π
template<typename _Iterator, typename _Sequence, typename _Category = typename std::iterator_traits<_Iterator>::iterator_category> _Safe_iterator & __gnu_debug::_Safe_iterator< _Iterator, _Sequence, _Category >::operator= (const _Safe_iterator< _Iterator, _Sequence, _Category > & __x) [inline], [constexpr], [noexcept]
Copy assignment. Like, making a copy of __x into this. π
β¨ Member Data Documentation β¨
_Safe_iterator_base* __gnu_debug::_Safe_iterator_base::_M_next[inherited] This is a pointer to the next iterator in the sequence's list of iterators. It's only valid when_M_sequence != NULL. So if_M_sequenceis NULL, don't even look at it, bestie. π
Referenced by _Safe_iterator_base(), _Safe_iterator_base(),
_Safe_iterator_base(), __gnu_debug::_Safe_sequence< _Sequence
>::_M_transfer_from_if(), and _M_unlink().
_Safe_iterator_base* __gnu_debug::_Safe_iterator_base::_M_prior[inherited] This is a pointer to the previous iterator in the sequence's list of iterators. It's only valid when_M_sequence != NULL. Same energy as_M_nextbut backwards. π
Referenced by _Safe_iterator_base(), _Safe_iterator_base(),
_Safe_iterator_base(), __gnu_debug::_Safe_sequence< _Sequence
>::_M_transfer_from_if(), and _M_unlink().
const _Safe_sequence_base* __gnu_debug::_Safe_iterator_base::_M_sequence[inherited] This is the sequence that the iterator references. It may beNULLto indicate a singular iterator. It's stored as pointer-to-const because the sequence could be declared as const. So it's giving const-correctness realness. β¨
Referenced by __gnu_debug::_Safe_iterator< _Base_iterator, map
>::_Safe_iterator(), __gnu_debug::_Safe_iterator< _Base_iterator, map
>::_Safe_iterator(), __gnu_debug::_Safe_iterator< _Base_iterator, map
>::_Safe_iterator(), _Safe_iterator_base(), _Safe_iterator_base(),
_Safe_iterator_base(), _M_attached_to(), __gnu_debug::_Safe_sequence<
_Sequence >::_M_transfer_from_if(), __gnu_debug::_Safe_iterator<
_Base_iterator, map >::operator=(), __gnu_debug::_Safe_iterator<
_Base_iterator, map >::operator=(), __gnu_debug::_Safe_local_iterator<
_OtherIterator, _UContainer >::operator=(), and
__gnu_debug::_Safe_local_iterator< _OtherIterator, _UContainer
>::operator=().
unsigned int __gnu_debug::_Safe_iterator_base::_M_version[inherited] This is the version number of the iterator. The sentinel value0means the iterator is invalidated (i.e., it's singular because of an operation on the container). For the iterator to be non-singular, this version number must equal the version number in the sequence referenced by_M_sequence. So it's a whole vibe check. π
Referenced by _Safe_iterator_base(), _Safe_iterator_base(),
_Safe_iterator_base(), _M_invalidate(), and __gnu_debug::_Safe_sequence<
_Sequence >::_M_transfer_from_if().
π Author π
This page was auto-generated by Doxygen for libstdc++ straight from the source code. No human wrote this by hand, bestie. It's giving robot magic. β¨
And that's a wrap on this page, bestie! This gem comes from libstdc++, and its title is __gnu_debu...Category >(3). The footer didn't show a date, but honestly, it's timeless. Stay iconic, and may your iterators always be safe. πβ¨
π¦ where this page comes from
- arch rolling: gcc 16.2.1+r23+gd564253eb6c8-1 Β· GPL-3.0-or-later WITH GCC-exception-3.1 AND GFDL-1.3-or-later
- fedora 44: libstdc++-docs 16.0.1-0.10.fc44 Β· GPL-3.0-or-later AND LGPL-3.0-or-later AND (GPL-3.0-or-later WITH GCC-exception-3.1) AND (GPL-3.0-or-later WITH Texinfo-exception) AND (LGPL-2.1-or-later WITH GCC-exception-2.0) AND (GPL-2.0-or-later WITH GCC-exception-2.0) AND (GPL-2.0-or-later WITH GNU-compiler-exception) AND BSL-1.0 AND GFDL-1.3-or-later AND Linux-man-pages-copyleft-2-para AND SunPro AND BSD-1-Clause AND BSD-2-Clause AND BSD-2-Clause-Views AND BSD-3-Clause AND BSD-4-Clause AND BSD-Source-Code AND Zlib AND MIT AND Apache-2.0 AND (Apache-2.0 WITH LLVM-Exception) AND ZPL-2.1 AND ISC AND LicenseRef-Fedora-Public-Domain AND HP-1986 AND curl AND Martin-Birgmeier AND HPND-Markus-Kuhn AND dtoa AND SMLNJ AND AMD-newlib AND OAR AND HPND-merchantability-variant AND HPND-Intel
- fedora 44: libstdc++-docs 16.2.1-2.fc44
- fedora 44: libstdc++-docs 16.2.1-3.fc44 Β· GPL-3.0-or-later AND LGPL-3.0-or-later AND (GPL-3.0-or-later WITH GCC-exception-3.1) AND (GPL-3.0-or-later WITH Texinfo-exception) AND (LGPL-2.1-or-later WITH GCC-exception-2.0) AND (GPL-2.0-or-later WITH GCC-exception-2.0) AND (GPL-2.0-or-later WITH GNU-compiler-exception) AND BSL-1.0 AND GFDL-1.3-or-later AND Linux-man-pages-copyleft-2-para AND SunPro AND BSD-1-Clause AND BSD-2-Clause AND BSD-2-Clause-Views AND BSD-3-Clause AND BSD-4-Clause AND BSD-Source-Code AND Zlib AND MIT AND Apache-2.0 AND (Apache-2.0 WITH LLVM-Exception) AND ZPL-2.1 AND ISC AND LicenseRef-Fedora-Public-Domain AND HP-1986 AND curl AND Martin-Birgmeier AND HPND-Markus-Kuhn AND dtoa AND SMLNJ AND AMD-newlib AND OAR AND HPND-merchantability-variant AND HPND-Intel
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms