29 #ifndef _GLIBCXX_DEBUG_SAFE_BASE_H 30 #define _GLIBCXX_DEBUG_SAFE_BASE_H 1 36 class _Safe_sequence_base;
82 : _M_sequence(0), _M_version(0), _M_prior(0), _M_next(0)
94 : _M_sequence(0), _M_version(0), _M_prior(0), _M_next(0)
96 if (!std::__is_constant_evaluated())
105 : _M_sequence(0), _M_version(0), _M_prior(0), _M_next(0)
107 if (!std::__is_constant_evaluated())
114 if (!std::__is_constant_evaluated())
133 bool __constant) _GLIBCXX_USE_NOEXCEPT;
141 #if !_GLIBCXX_INLINE_VERSION 150 bool __constant) _GLIBCXX_USE_NOEXCEPT;
162 {
return _M_sequence == __seq; }
236 : _M_iterators(0), _M_const_iterators(0), _M_version(1)
239 #if __cplusplus >= 201103L 249 if (!std::__is_constant_evaluated())
259 if (!std::__is_constant_evaluated())
260 this->_M_detach_all();
271 #if __cplusplus >= 201103L 276 __x._M_invalidate_all();
283 _M_detach_all()
const;
290 _M_detach_singular()
const;
298 _M_revalidate_singular()
const;
313 _GLIBCXX20_CONSTEXPR
void 315 {
if (++_M_version == 0) _M_version = 1; }
318 #if !_GLIBCXX_INLINE_VERSION 325 _M_detach_singular();
328 _M_revalidate_singular();
345 bool __constant)
const _GLIBCXX_USE_NOEXCEPT;
bool _M_can_compare(const _Safe_iterator_base &__x) const noexcept
Base class that supports tracking of iterators that reference a sequence.
constexpr ~_Safe_sequence_base() noexcept
bool _M_singular() const noexcept
constexpr _Safe_iterator_base(const _Safe_sequence_base *__seq, bool __constant)
const _Safe_sequence_base * _M_sequence
constexpr _Safe_iterator_base()
void _M_detach_single() noexcept
Basic functionality for a safe iterator.
GNU debug classes for public use.
_Safe_iterator_base * _M_const_iterators
The list of constant iterators that reference this container.
_Safe_iterator_base * _M_next
unsigned int _M_version
The container version number. This number may never be 0.
_Safe_iterator_base * _M_iterators
The list of mutable iterators that reference this container.
void _M_unlink() noexcept
void _M_attach(const _Safe_sequence_base *__seq, bool __constant)
__gnu_cxx::__mutex & _M_get_mutex() noexcept
_Safe_iterator_base * _M_prior
bool _M_attached_to(const _Safe_sequence_base *__seq) const
bool __check_singular_aux(const _Safe_iterator_base *__x)
constexpr _Safe_iterator_base(const _Safe_iterator_base &__x, bool __constant)
void _M_attach_single(const _Safe_sequence_base *__seq, bool __constant) noexcept
constexpr void _M_invalidate_all() const