// Safe sequence/iterator base implementation -*- C++ -*-
-// Copyright (C) 2003, 2004, 2005, 2006, 2009
+// Copyright (C) 2003, 2004, 2005, 2006, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
{
class _Safe_sequence_base;
- /** \brief Basic functionality for a "safe" iterator.
+ /** \brief Basic functionality for a @a safe iterator.
*
* The %_Safe_iterator_base base class implements the functionality
* of a safe iterator that is not specific to a particular iterator
{ }
/** Initialize the iterator to reference the sequence pointed to
- * by @p__seq. @p __constant is true when we are initializing a
+ * by @p __seq. @p __constant is true when we are initializing a
* constant iterator, and false if it is a mutable iterator. Note
* that @p __seq may be NULL, in which case the iterator will be
* singular. Otherwise, the iterator will reference @p __seq and
Returns true if both iterators are nonsingular and reference
the same sequence. */
_GLIBCXX_PURE bool _M_can_compare(const _Safe_iterator_base& __x) const throw ();
+
+ /** Invalidate the iterator, making it singular. */
+ void
+ _M_invalidate()
+ { _M_version = 0; }
+
+ /** Reset all member variables */
+ void
+ _M_reset() throw ();
+
+ /** Unlink itself */
+ void
+ _M_unlink() throw ()
+ {
+ if (_M_prior)
+ _M_prior->_M_next = _M_next;
+ if (_M_next)
+ _M_next->_M_prior = _M_prior;
+ }
};
/**
* invalidation of all iterators that reference the container.
*
* This class must ensure that no operation on it may throw an
- * exception, otherwise "safe" sequences may fail to provide the
+ * exception, otherwise @a safe sequences may fail to provide the
* exception-safety guarantees required by the C++ standard.
*/
class _Safe_sequence_base
void
_M_invalidate_all() const
{ if (++_M_version == 0) _M_version = 1; }
+
+ /** Attach an iterator to this sequence. */
+ void
+ _M_attach(_Safe_iterator_base* __it, bool __constant);
+
+ /** Likewise but not thread safe. */
+ void
+ _M_attach_single(_Safe_iterator_base* __it, bool __constant) throw ();
+
+ /** Detach an iterator from this sequence */
+ void
+ _M_detach(_Safe_iterator_base* __it);
+
+ /** Likewise but not thread safe. */
+ void
+ _M_detach_single(_Safe_iterator_base* __it) throw ();
};
} // namespace __gnu_debug