⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 safe_iterator.h

📁 mingw32.rar
💻 H
📖 第 1 页 / 共 2 页
字号:
      /**       * @brief Conversion to underlying non-debug iterator to allow       * better interaction with non-debug containers.       */      operator _Iterator() const { return _M_current; }      /** Attach iterator to the given sequence. */      void      _M_attach(const _Sequence* __seq)      {	_Safe_iterator_base::_M_attach(const_cast<_Sequence*>(__seq),				       _M_constant());      }      /** Invalidate the iterator, making it singular. */      void      _M_invalidate();      /// Is the iterator dereferenceable?      bool      _M_dereferenceable() const      { return !this->_M_singular() && !_M_is_end(); }      /// Is the iterator incrementable?      bool      _M_incrementable() const { return this->_M_dereferenceable(); }      // Is the iterator decrementable?      bool      _M_decrementable() const { return !_M_singular() && !_M_is_begin(); }      // Can we advance the iterator @p __n steps (@p __n may be negative)      bool      _M_can_advance(const difference_type& __n) const;      // Is the iterator range [*this, __rhs) valid?      template<typename _Other>        bool        _M_valid_range(const _Safe_iterator<_Other, _Sequence>& __rhs) const;      // The sequence this iterator references.      const _Sequence*      _M_get_sequence() const      { return static_cast<const _Sequence*>(_M_sequence); }    /** Determine the distance between two iterators with some known     *	precision.    */    template<typename _Iterator1, typename _Iterator2>      static pair<difference_type, _Distance_precision>      _M_get_distance(const _Iterator1& __lhs, const _Iterator2& __rhs)      {        typedef typename iterator_traits<_Iterator1>::iterator_category	  _Category;        return _M_get_distance(__lhs, __rhs, _Category());      }    template<typename _Iterator1, typename _Iterator2>      static pair<difference_type, _Distance_precision>      _M_get_distance(const _Iterator1& __lhs, const _Iterator2& __rhs,		      std::random_access_iterator_tag)      {        return std::make_pair(__rhs.base() - __lhs.base(), __dp_exact);      }    template<typename _Iterator1, typename _Iterator2>      static pair<difference_type, _Distance_precision>      _M_get_distance(const _Iterator1& __lhs, const _Iterator2& __rhs,		    std::forward_iterator_tag)      {        return std::make_pair(__lhs.base() == __rhs.base()? 0 : 1,			      __dp_equality);      }      /// Is this iterator equal to the sequence's begin() iterator?      bool _M_is_begin() const      {	return *this == static_cast<const _Sequence*>(_M_sequence)->begin(); }      /// Is this iterator equal to the sequence's end() iterator?      bool _M_is_end() const      {	return *this == static_cast<const _Sequence*>(_M_sequence)->end(); }    };  template<typename _IteratorL, typename _IteratorR, typename _Sequence>    inline bool    operator==(const _Safe_iterator<_IteratorL, _Sequence>& __lhs,	       const _Safe_iterator<_IteratorR, _Sequence>& __rhs)    {      _GLIBCXX_DEBUG_VERIFY(! __lhs._M_singular() && ! __rhs._M_singular(),			    _M_message(__msg_iter_compare_bad)			    ._M_iterator(__lhs, "lhs")			    ._M_iterator(__rhs, "rhs"));      _GLIBCXX_DEBUG_VERIFY(__lhs._M_can_compare(__rhs),			    _M_message(__msg_compare_different)			    ._M_iterator(__lhs, "lhs")			    ._M_iterator(__rhs, "rhs"));      return __lhs.base() == __rhs.base();    }  template<typename _Iterator, typename _Sequence>    inline bool    operator==(const _Safe_iterator<_Iterator, _Sequence>& __lhs,               const _Safe_iterator<_Iterator, _Sequence>& __rhs)    {      _GLIBCXX_DEBUG_VERIFY(! __lhs._M_singular() && ! __rhs._M_singular(),			    _M_message(__msg_iter_compare_bad)			    ._M_iterator(__lhs, "lhs")			    ._M_iterator(__rhs, "rhs"));      _GLIBCXX_DEBUG_VERIFY(__lhs._M_can_compare(__rhs),			    _M_message(__msg_compare_different)			    ._M_iterator(__lhs, "lhs")			    ._M_iterator(__rhs, "rhs"));      return __lhs.base() == __rhs.base();    }  template<typename _IteratorL, typename _IteratorR, typename _Sequence>    inline bool    operator!=(const _Safe_iterator<_IteratorL, _Sequence>& __lhs,	       const _Safe_iterator<_IteratorR, _Sequence>& __rhs)    {      _GLIBCXX_DEBUG_VERIFY(! __lhs._M_singular() && ! __rhs._M_singular(),			    _M_message(__msg_iter_compare_bad)			    ._M_iterator(__lhs, "lhs")			    ._M_iterator(__rhs, "rhs"));      _GLIBCXX_DEBUG_VERIFY(__lhs._M_can_compare(__rhs),			    _M_message(__msg_compare_different)			    ._M_iterator(__lhs, "lhs")			    ._M_iterator(__rhs, "rhs"));      return __lhs.base() != __rhs.base();    }  template<typename _Iterator, typename _Sequence>    inline bool    operator!=(const _Safe_iterator<_Iterator, _Sequence>& __lhs,               const _Safe_iterator<_Iterator, _Sequence>& __rhs)    {      _GLIBCXX_DEBUG_VERIFY(! __lhs._M_singular() && ! __rhs._M_singular(),			    _M_message(__msg_iter_compare_bad)			    ._M_iterator(__lhs, "lhs")			    ._M_iterator(__rhs, "rhs"));      _GLIBCXX_DEBUG_VERIFY(__lhs._M_can_compare(__rhs),			    _M_message(__msg_compare_different)			    ._M_iterator(__lhs, "lhs")			    ._M_iterator(__rhs, "rhs"));      return __lhs.base() != __rhs.base();    }  template<typename _IteratorL, typename _IteratorR, typename _Sequence>    inline bool    operator<(const _Safe_iterator<_IteratorL, _Sequence>& __lhs,	      const _Safe_iterator<_IteratorR, _Sequence>& __rhs)    {      _GLIBCXX_DEBUG_VERIFY(! __lhs._M_singular() && ! __rhs._M_singular(),			    _M_message(__msg_iter_order_bad)			    ._M_iterator(__lhs, "lhs")			    ._M_iterator(__rhs, "rhs"));      _GLIBCXX_DEBUG_VERIFY(__lhs._M_can_compare(__rhs),			    _M_message(__msg_order_different)			    ._M_iterator(__lhs, "lhs")			    ._M_iterator(__rhs, "rhs"));      return __lhs.base() < __rhs.base();    }  template<typename _Iterator, typename _Sequence>    inline bool    operator<(const _Safe_iterator<_Iterator, _Sequence>& __lhs,	      const _Safe_iterator<_Iterator, _Sequence>& __rhs)    {      _GLIBCXX_DEBUG_VERIFY(! __lhs._M_singular() && ! __rhs._M_singular(),			    _M_message(__msg_iter_order_bad)			    ._M_iterator(__lhs, "lhs")			    ._M_iterator(__rhs, "rhs"));      _GLIBCXX_DEBUG_VERIFY(__lhs._M_can_compare(__rhs),			    _M_message(__msg_order_different)			    ._M_iterator(__lhs, "lhs")			    ._M_iterator(__rhs, "rhs"));      return __lhs.base() < __rhs.base();    }  template<typename _IteratorL, typename _IteratorR, typename _Sequence>    inline bool    operator<=(const _Safe_iterator<_IteratorL, _Sequence>& __lhs,	       const _Safe_iterator<_IteratorR, _Sequence>& __rhs)    {      _GLIBCXX_DEBUG_VERIFY(! __lhs._M_singular() && ! __rhs._M_singular(),			    _M_message(__msg_iter_order_bad)			    ._M_iterator(__lhs, "lhs")			    ._M_iterator(__rhs, "rhs"));      _GLIBCXX_DEBUG_VERIFY(__lhs._M_can_compare(__rhs),			    _M_message(__msg_order_different)			    ._M_iterator(__lhs, "lhs")			    ._M_iterator(__rhs, "rhs"));      return __lhs.base() <= __rhs.base();    }  template<typename _Iterator, typename _Sequence>    inline bool    operator<=(const _Safe_iterator<_Iterator, _Sequence>& __lhs,               const _Safe_iterator<_Iterator, _Sequence>& __rhs)    {      _GLIBCXX_DEBUG_VERIFY(! __lhs._M_singular() && ! __rhs._M_singular(),			    _M_message(__msg_iter_order_bad)			    ._M_iterator(__lhs, "lhs")			    ._M_iterator(__rhs, "rhs"));      _GLIBCXX_DEBUG_VERIFY(__lhs._M_can_compare(__rhs),			    _M_message(__msg_order_different)			    ._M_iterator(__lhs, "lhs")			    ._M_iterator(__rhs, "rhs"));      return __lhs.base() <= __rhs.base();    }  template<typename _IteratorL, typename _IteratorR, typename _Sequence>    inline bool    operator>(const _Safe_iterator<_IteratorL, _Sequence>& __lhs,	      const _Safe_iterator<_IteratorR, _Sequence>& __rhs)    {      _GLIBCXX_DEBUG_VERIFY(! __lhs._M_singular() && ! __rhs._M_singular(),			    _M_message(__msg_iter_order_bad)			    ._M_iterator(__lhs, "lhs")			    ._M_iterator(__rhs, "rhs"));      _GLIBCXX_DEBUG_VERIFY(__lhs._M_can_compare(__rhs),			    _M_message(__msg_order_different)			    ._M_iterator(__lhs, "lhs")			    ._M_iterator(__rhs, "rhs"));      return __lhs.base() > __rhs.base();    }  template<typename _Iterator, typename _Sequence>    inline bool    operator>(const _Safe_iterator<_Iterator, _Sequence>& __lhs,	      const _Safe_iterator<_Iterator, _Sequence>& __rhs)    {      _GLIBCXX_DEBUG_VERIFY(! __lhs._M_singular() && ! __rhs._M_singular(),			    _M_message(__msg_iter_order_bad)			    ._M_iterator(__lhs, "lhs")			    ._M_iterator(__rhs, "rhs"));      _GLIBCXX_DEBUG_VERIFY(__lhs._M_can_compare(__rhs),			    _M_message(__msg_order_different)			    ._M_iterator(__lhs, "lhs")			    ._M_iterator(__rhs, "rhs"));      return __lhs.base() > __rhs.base();    }  template<typename _IteratorL, typename _IteratorR, typename _Sequence>    inline bool    operator>=(const _Safe_iterator<_IteratorL, _Sequence>& __lhs,	       const _Safe_iterator<_IteratorR, _Sequence>& __rhs)    {      _GLIBCXX_DEBUG_VERIFY(! __lhs._M_singular() && ! __rhs._M_singular(),			    _M_message(__msg_iter_order_bad)			    ._M_iterator(__lhs, "lhs")			    ._M_iterator(__rhs, "rhs"));      _GLIBCXX_DEBUG_VERIFY(__lhs._M_can_compare(__rhs),			    _M_message(__msg_order_different)			    ._M_iterator(__lhs, "lhs")			    ._M_iterator(__rhs, "rhs"));      return __lhs.base() >= __rhs.base();    }  template<typename _Iterator, typename _Sequence>    inline bool    operator>=(const _Safe_iterator<_Iterator, _Sequence>& __lhs,               const _Safe_iterator<_Iterator, _Sequence>& __rhs)    {      _GLIBCXX_DEBUG_VERIFY(! __lhs._M_singular() && ! __rhs._M_singular(),			    _M_message(__msg_iter_order_bad)			    ._M_iterator(__lhs, "lhs")			    ._M_iterator(__rhs, "rhs"));      _GLIBCXX_DEBUG_VERIFY(__lhs._M_can_compare(__rhs),			    _M_message(__msg_order_different)			    ._M_iterator(__lhs, "lhs")			    ._M_iterator(__rhs, "rhs"));      return __lhs.base() >= __rhs.base();    }  // _GLIBCXX_RESOLVE_LIB_DEFECTS  // According to the resolution of DR179 not only the various comparison  // operators but also operator- must accept mixed iterator/const_iterator  // parameters.  template<typename _IteratorL, typename _IteratorR, typename _Sequence>    inline typename _Safe_iterator<_IteratorL, _Sequence>::difference_type    operator-(const _Safe_iterator<_IteratorL, _Sequence>& __lhs,	      const _Safe_iterator<_IteratorR, _Sequence>& __rhs)    {      _GLIBCXX_DEBUG_VERIFY(! __lhs._M_singular() && ! __rhs._M_singular(),			    _M_message(__msg_distance_bad)			    ._M_iterator(__lhs, "lhs")			    ._M_iterator(__rhs, "rhs"));      _GLIBCXX_DEBUG_VERIFY(__lhs._M_can_compare(__rhs),			    _M_message(__msg_distance_different)			    ._M_iterator(__lhs, "lhs")			    ._M_iterator(__rhs, "rhs"));      return __lhs.base() - __rhs.base();    }  template<typename _Iterator, typename _Sequence>    inline _Safe_iterator<_Iterator, _Sequence>    operator+(typename _Safe_iterator<_Iterator,_Sequence>::difference_type __n,	      const _Safe_iterator<_Iterator, _Sequence>& __i)    { return __i + __n; }} // namespace __gnu_debug#ifndef _GLIBCXX_EXPORT_TEMPLATE#  include <debug/safe_iterator.tcc>#endif#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -