📄 _iterator_base.h
字号:
//// bidirectional_iterator, and random_access_iterator are not part of//// the C++ standard. (They have been replaced by struct iterator.)//// They are included for backward compatibility with the HP STL.//template <class _Tp, class _Distance> struct input_iterator : // public iterator <input_iterator_tag, _Tp, _Distance, _Tp*, _Tp&> {};//struct output_iterator : public iterator <output_iterator_tag, void, void, void, void> {};//template <class _Tp, class _Distance> struct forward_iterator :// public iterator<forward_iterator_tag, _Tp, _Distance, _Tp*, _Tp&> {};//template <class _Tp, class _Distance> struct bidirectional_iterator :// public iterator<bidirectional_iterator_tag, _Tp, _Distance, _Tp*, _Tp&> {};//template <class _Tp, class _Distance> struct random_access_iterator :// public iterator<random_access_iterator_tag, _Tp, _Distance, _Tp*, _Tp&> {};////# if defined (_STLP_BASE_MATCH_BUG) && defined (_STLP_USE_OLD_HP_ITERATOR_QUERIES)//template <class _Tp, class _Distance> //inline input_iterator_tag _STLP_CALL //iterator_category(const input_iterator<_Tp, _Distance>&) { return input_iterator_tag(); }//inline output_iterator_tag _STLP_CALL//iterator_category(const output_iterator&) { return output_iterator_tag(); }//template <class _Tp, class _Distance> //inline forward_iterator_tag _STLP_CALL//iterator_category(const forward_iterator<_Tp, _Distance>&) { return forward_iterator_tag(); }//template <class _Tp, class _Distance> //inline bidirectional_iterator_tag _STLP_CALL //iterator_category(const bidirectional_iterator<_Tp, _Distance>&) { return bidirectional_iterator_tag(); }//template <class _Tp, class _Distance> //inline random_access_iterator_tag _STLP_CALL//iterator_category(const random_access_iterator<_Tp, _Distance>&) { return random_access_iterator_tag(); }//template <class _Tp, class _Distance> //inline _Tp* _STLP_CALL value_type(const input_iterator<_Tp, _Distance>&) { return (_Tp*)(0); }//template <class _Tp, class _Distance> //inline _Tp* _STLP_CALL value_type(const forward_iterator<_Tp, _Distance>&) { return (_Tp*)(0); }//template <class _Tp, class _Distance> //inline _Tp* _STLP_CALL value_type(const bidirectional_iterator<_Tp, _Distance>&) { return (_Tp*)(0); }//template <class _Tp, class _Distance> //inline _Tp* _STLP_CALL value_type(const random_access_iterator<_Tp, _Distance>&) { return (_Tp*)(0); }//template <class _Tp, class _Distance> //inline _Distance* _STLP_CALL distance_type(const input_iterator<_Tp, _Distance>&) { return (_Distance*)(0); }//template <class _Tp, class _Distance> //inline _Distance* _STLP_CALL distance_type(const forward_iterator<_Tp, _Distance>&) { return (_Distance*)(0); }//template <class _Tp, class _Distance> //inline _Distance* _STLP_CALL distance_type(const bidirectional_iterator<_Tp, _Distance>&) { return (_Distance*)(0);}//template <class _Tp, class _Distance> //inline _Distance* _STLP_CALL distance_type(const random_access_iterator<_Tp, _Distance>&) { return (_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; }//}//# endif////template <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_ANACHRONISMS //template <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));//}//#endif////template <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;//}//# endif////template <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_CALL//distance(const _InputIterator& __first, const _InputIterator& __last) {// return __distance(__first, __last, _STLP_ITERATOR_CATEGORY(__first, _InputIterator)); //}//////// fbp: those are being used for iterator/const_iterator definitions everywhere//template <class _Tp>//struct _Nonconst_traits;////template <class _Tp>//struct _Const_traits {// typedef _Tp value_type;// typedef const _Tp& reference;// typedef const _Tp* pointer;// typedef _Nonconst_traits<_Tp> _Non_const_traits;//};////template <class _Tp>//struct _Nonconst_traits {// typedef _Tp value_type;// typedef _Tp& reference;// typedef _Tp* pointer;// typedef _Nonconst_traits<_Tp> _Non_const_traits;//};////# if defined (_STLP_BASE_TYPEDEF_BUG)//// this workaround is needed for SunPro 4.0.1//template <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 specific//template <class _InputIterator, class _Dist>//inline void _STLP_CALL _Distance(_InputIterator __first, // _InputIterator __last, _Dist& __n) {// __distance(__first, __last, __n, _STLP_ITERATOR_CATEGORY(__first, _InputIterator));//}//# endif////template <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 variant//template <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;//}//# endif////template <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 + -