__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_type
  • typedef _Traits::iterator_category iterator_category
  • typedef _Iterator iterator_type
  • typedef _Traits::pointer pointer
  • typedef _Traits::reference reference
  • typedef _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 as operator*, 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_sequence
  • unsigned 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) noexcept
  • bool operator!= (const _Self &__lhs, const _Self &__rhs) noexcept
  • bool operator== (const _Self &__lhs, const _OtherSelf &__rhs) noexcept
  • bool 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=().


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