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

📄 _iterator_base.h

📁 symbian 上的stl_port进过编译的。
💻 H
📖 第 1 页 / 共 2 页
字号:
template <class _Tp, class _Distance>inline _Tp* _STLP_CALL value_type(const bidirectional_iterator<_Tp, _Distance>&) { return __STATIC_CAST(_Tp*, 0); }template <class _Tp, class _Distance>inline _Tp* _STLP_CALL value_type(const random_access_iterator<_Tp, _Distance>&) { return __STATIC_CAST(_Tp*, 0); }template <class _Tp, class _Distance>inline _Distance* _STLP_CALL distance_type(const input_iterator<_Tp, _Distance>&) { return __STATIC_CAST(_Distance*, 0); }template <class _Tp, class _Distance>inline _Distance* _STLP_CALL distance_type(const forward_iterator<_Tp, _Distance>&) { return __STATIC_CAST(_Distance*, 0); }template <class _Tp, class _Distance>inline _Distance* _STLP_CALL distance_type(const bidirectional_iterator<_Tp, _Distance>&) { return __STATIC_CAST(_Distance*, 0);}template <class _Tp, class _Distance>inline _Distance* _STLP_CALL distance_type(const random_access_iterator<_Tp, _Distance>&) { return __STATIC_CAST(_Distance*, 0); }# endif /* BASE_MATCH */#endif /* _STLP_NO_ANACHRONISMS */template <class _InputIterator, class _Distance>inline void _STLP_CALL __distance(const _InputIterator& __first, const _InputIterator& __last,                                  _Distance& __n, const input_iterator_tag &) {  _InputIterator __it(__first);  while (__it != __last) { ++__it; ++__n; }}# if defined (_STLP_NONTEMPL_BASE_MATCH_BUG)template <class _ForwardIterator, class _Distance>inline void _STLP_CALL __distance(const _ForwardIterator& __first, const _ForwardIterator& __last,                                  _Distance& __n, const forward_iterator_tag &) {  _ForwardIterator __it(__first);  while (__it != __last) { ++__first; ++__n; }}template <class _BidirectionalIterator, class _Distance>_STLP_INLINE_LOOP void _STLP_CALL __distance(const _BidirectionalIterator& __first,                                             const _BidirectionalIterator& __last,                                             _Distance& __n, const bidirectional_iterator_tag &) {  _BidirectionalIterator __it(__first);  while (__it != __last) { ++__it; ++__n; }}# endiftemplate <class _RandomAccessIterator, class _Distance>inline void _STLP_CALL __distance(const _RandomAccessIterator& __first,                                  const _RandomAccessIterator& __last,                                  _Distance& __n, const random_access_iterator_tag &) {  __n += __last - __first;}#ifndef _STLP_NO_ANACHRONISMStemplate <class _InputIterator, class _Distance>inline void _STLP_CALL distance(const _InputIterator& __first,        const _InputIterator& __last, _Distance& __n) {  __distance(__first, __last, __n, _STLP_ITERATOR_CATEGORY(__first, _InputIterator));}#endiftemplate <class _InputIterator>inline _STLP_DIFFERENCE_TYPE(_InputIterator) _STLP_CALL__distance(const _InputIterator& __first, const _InputIterator& __last, const input_iterator_tag &) {  _STLP_DIFFERENCE_TYPE(_InputIterator) __n = 0;  _InputIterator __it(__first);  while (__it != __last) {    ++__it; ++__n;  }  return __n;}# if defined (_STLP_NONTEMPL_BASE_MATCH_BUG)template <class _ForwardIterator>inline _STLP_DIFFERENCE_TYPE(_ForwardIterator) _STLP_CALL__distance(const _ForwardIterator& __first, const _ForwardIterator& __last,           const forward_iterator_tag &){  _STLP_DIFFERENCE_TYPE(_ForwardIterator) __n = 0;  _ForwardIterator __it(__first);  while (__it != __last) {    ++__it; ++__n;  }  return __n;}template <class _BidirectionalIterator>_STLP_INLINE_LOOP _STLP_DIFFERENCE_TYPE(_BidirectionalIterator) _STLP_CALL__distance(const _BidirectionalIterator& __first,           const _BidirectionalIterator& __last,           const bidirectional_iterator_tag &) {  _STLP_DIFFERENCE_TYPE(_BidirectionalIterator) __n = 0;  _BidirectionalIterator __it(__first);  while (__it != __last) {    ++__it; ++__n;  }  return __n;}# endiftemplate <class _RandomAccessIterator>inline _STLP_DIFFERENCE_TYPE(_RandomAccessIterator) _STLP_CALL__distance(const _RandomAccessIterator& __first, const _RandomAccessIterator& __last,           const random_access_iterator_tag &) {  return __last - __first;}template <class _InputIterator>inline _STLP_DIFFERENCE_TYPE(_InputIterator) _STLP_CALLdistance(_InputIterator __first, _InputIterator __last) {  return __distance(__first, __last, _STLP_ITERATOR_CATEGORY(__first, _InputIterator));}// fbp: those are being used for iterator/const_iterator definitions everywheretemplate <class _Tp>struct _Nonconst_traits;template <class _Tp>struct _Const_traits {  typedef _Tp value_type;  typedef const _Tp&  reference;  typedef const _Tp*  pointer;  typedef _Const_traits<_Tp> _ConstTraits;  typedef _Nonconst_traits<_Tp> _NonConstTraits;};template <class _Tp>struct _Nonconst_traits {  typedef _Tp value_type;  typedef _Tp& reference;  typedef _Tp* pointer;  typedef _Const_traits<_Tp> _ConstTraits;  typedef _Nonconst_traits<_Tp> _NonConstTraits;};/* * dums: A special iterator/const_iterator traits for set and multiset for which even * the iterator is not mutable */template <class _Tp>struct _Nonconst_Const_traits;template <class _Tp>struct _Const_Const_traits {  typedef _Tp value_type;  typedef const _Tp&  reference;  typedef const _Tp*  pointer;  typedef _Const_Const_traits<_Tp> _ConstTraits;  typedef _Nonconst_Const_traits<_Tp> _NonConstTraits;};template <class _Tp>struct _Nonconst_Const_traits {  typedef _Tp value_type;  typedef const _Tp& reference;  typedef const _Tp* pointer;  typedef _Const_Const_traits<_Tp> _ConstTraits;  typedef _Nonconst_Const_traits<_Tp> _NonConstTraits;};/* * A macro to generate a new iterator traits from one of the * previous one. Changing the iterator traits type make iterators * from different containers not comparable. */#define _STLP_CREATE_ITERATOR_TRAITS_BASE(Motif, Traits)        \template <class _Tp>                                            \struct _##Motif;                                                \template <class _Tp>                                            \struct _Const##Motif : public _STLP_STD::_Const_##Traits<_Tp> {  \  typedef _Const##Motif<_Tp> _ConstTraits;                      \  typedef _##Motif<_Tp> _NonConstTraits;                        \};                                                              \template <class _Tp>                                            \struct _##Motif : public _STLP_STD::_Nonconst_##Traits<_Tp> {    \  typedef _Const##Motif<_Tp> _ConstTraits;                      \  typedef _##Motif<_Tp> _NonConstTraits;                        \};#define _STLP_CREATE_ITERATOR_TRAITS(Motif, Traits)             \_STLP_MOVE_TO_PRIV_NAMESPACE                                    \_STLP_CREATE_ITERATOR_TRAITS_BASE(Motif, Traits)                \_STLP_MOVE_TO_STD_NAMESPACE#define _STLP_CREATE_HASH_ITERATOR_TRAITS(Motif, Traits)        \_STLP_MOVE_TO_PRIV_NAMESPACE                                    \_STLP_CREATE_ITERATOR_TRAITS_BASE(NonLocal##Motif, Traits)      \_STLP_CREATE_ITERATOR_TRAITS_BASE(Local##Motif, Traits)         \template <class _Tp>                                            \struct _##Motif {                                               \  typedef _ConstNonLocal##Motif<_Tp> _ConstTraits;              \  typedef _NonLocal##Motif<_Tp> _NonConstTraits;                \  typedef _ConstLocal##Motif<_Tp> _ConstLocalTraits;            \  typedef _Local##Motif<_Tp> _NonConstLocalTraits;              \};                                                              \_STLP_MOVE_TO_STD_NAMESPACE/*#  if defined (_STLP_BASE_TYPEDEF_BUG)// this workaround is needed for SunPro 4.0.1template <class _Traits>struct __cnst_traits_aux : private _Traits {  typedef typename _Traits::value_type value_type;};#  define __TRAITS_VALUE_TYPE(_Traits) __cnst_traits_aux<_Traits>::value_type#  else#  define __TRAITS_VALUE_TYPE(_Traits) _Traits::value_type#  endif*/#if defined (_STLP_MSVC)// MSVC specifictemplate <class _InputIterator, class _Dist>inline void  _STLP_CALL _Distance(_InputIterator __first,                                  _InputIterator __last, _Dist& __n) {  __distance(__first, __last, __n, _STLP_ITERATOR_CATEGORY(__first, _InputIterator));}#endiftemplate <class _InputIter, class _Distance>_STLP_INLINE_LOOP void  _STLP_CALL__advance(_InputIter& __i, _Distance __n, const input_iterator_tag &) {  while (__n--) ++__i;}// fbp : added output iterator tag varianttemplate <class _InputIter, class _Distance>_STLP_INLINE_LOOP void  _STLP_CALL__advance(_InputIter& __i, _Distance __n, const output_iterator_tag &) {  while (__n--) ++__i;}#if defined (_STLP_NONTEMPL_BASE_MATCH_BUG)template <class _ForwardIterator, class _Distance>_STLP_INLINE_LOOP void _STLP_CALL__advance(_ForwardIterator& i, _Distance n, const forward_iterator_tag &) {  while (n--) ++i;}#endiftemplate <class _BidirectionalIterator, class _Distance>_STLP_INLINE_LOOP void _STLP_CALL__advance(_BidirectionalIterator& __i, _Distance __n,          const bidirectional_iterator_tag &) {  if (__n > 0)    while (__n--) ++__i;  else    while (__n++) --__i;}template <class _RandomAccessIterator, class _Distance>inline void _STLP_CALL__advance(_RandomAccessIterator& __i, _Distance __n,          const random_access_iterator_tag &) {  __i += __n;}template <class _InputIterator, class _Distance>inline void _STLP_CALL advance(_InputIterator& __i, _Distance __n) {  __advance(__i, __n, _STLP_ITERATOR_CATEGORY(__i, _InputIterator));}_STLP_END_NAMESPACE#if defined (_STLP_DEBUG) && !defined (_STLP_DEBUG_H)#  include <stl/debug/_debug.h>#endif#endif /* _STLP_INTERNAL_ITERATOR_BASE_H */// Local Variables:// mode:C++// End:

⌨️ 快捷键说明

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