📄 xutility
字号:
typedef std::ptrdiff_t distance_type; // retained
typedef _Ty *pointer;
typedef _Ty& reference;
};
template<class _Ty>
value class iterator_traits<const _Ty *>
{ // get traits from const pointer
public:
typedef random_access_iterator_tag iterator_category;
typedef _Ty value_type;
typedef std::ptrdiff_t difference_type;
typedef std::ptrdiff_t distance_type; // retained
typedef const _Ty *pointer;
typedef const _Ty& reference;
};
#endif /* _M_CEE_SAFE */
//
// PARTIAL SPECIALIZATIONS OF iterator_traits
//
template<class _Ty>
value class iterator_traits<
_STLCLR Generic::IInputIterator<_Ty>>
{ // get traits from generic interface
public:
typedef input_iterator_tag iterator_category;
typedef _Ty value_type;
typedef int difference_type;
typedef int distance_type; // retained
typedef typename _Ty% pointer;
typedef typename _Ty% reference;
};
template<class _Ty>
value class iterator_traits<
_STLCLR Generic::IOutputIterator<_Ty>>
{ // get traits from generic interface
public:
typedef output_iterator_tag iterator_category;
typedef _Ty value_type;
typedef int difference_type;
typedef int distance_type; // retained
typedef typename _Ty% pointer;
typedef typename _Ty% reference;
};
template<class _Ty>
value class iterator_traits<
_STLCLR Generic::IForwardIterator<_Ty>>
{ // get traits from generic interface
public:
typedef forward_iterator_tag iterator_category;
typedef _Ty value_type;
typedef int difference_type;
typedef int distance_type; // retained
typedef typename _Ty% pointer;
typedef typename _Ty% reference;
};
template<class _Ty>
value class iterator_traits<
_STLCLR Generic::IBidirectionalIterator<_Ty>>
{ // get traits from generic interface
public:
typedef bidirectional_iterator_tag iterator_category;
typedef _Ty value_type;
typedef int difference_type;
typedef int distance_type; // retained
typedef typename _Ty% pointer;
typedef typename _Ty% reference;
};
template<class _Ty>
value class iterator_traits<
_STLCLR Generic::IRandomAccessIterator<_Ty>>
{ // get traits from generic interface
public:
typedef random_access_iterator_tag iterator_category;
typedef _Ty value_type;
typedef int difference_type;
typedef int distance_type; // retained
typedef typename _Ty% pointer;
typedef typename _Ty% reference;
};
template<class _Ty>
value class iterator_traits<
_STLCLR Generic::ReverseBidirectionalIterator<_Ty>>
{ // get traits from generic interface
public:
typedef bidirectional_iterator_tag iterator_category;
typedef _Ty value_type;
typedef int difference_type;
typedef int distance_type; // retained
typedef typename _Ty% pointer;
typedef typename _Ty% reference;
};
template<class _Ty>
value class iterator_traits<
_STLCLR Generic::ConstReverseBidirectionalIterator<_Ty>>
{ // get traits from generic interface
public:
typedef bidirectional_iterator_tag iterator_category;
typedef _Ty value_type;
typedef int difference_type;
typedef int distance_type; // retained
typedef typename _Ty% pointer;
typedef typename _Ty% reference;
};
template<class _Ty>
value class iterator_traits<
_STLCLR Generic::ReverseRandomAccessIterator<_Ty>>
{ // get traits from generic interface
public:
typedef random_access_iterator_tag iterator_category;
typedef _Ty value_type;
typedef int difference_type;
typedef int distance_type; // retained
typedef typename _Ty% pointer;
typedef typename _Ty% reference;
};
template<class _Ty>
value class iterator_traits<
_STLCLR Generic::ConstReverseRandomAccessIterator<_Ty>>
{ // get traits from generic interface
public:
typedef random_access_iterator_tag iterator_category;
typedef _Ty value_type;
typedef int difference_type;
typedef int distance_type; // retained
typedef typename _Ty% pointer;
typedef typename _Ty% reference;
};
template<class _Ty>
value class iterator_traits<
_STLCLR Generic::ContainerBidirectionalIterator<_Ty>>
{ // get traits from generic interface
public:
typedef bidirectional_iterator_tag iterator_category;
typedef _Ty value_type;
typedef int difference_type;
typedef int distance_type; // retained
typedef typename _Ty% pointer;
typedef typename _Ty% reference;
};
template<class _Ty>
value class iterator_traits<
_STLCLR Generic::ConstContainerBidirectionalIterator<_Ty>>
{ // get traits from generic interface
public:
typedef bidirectional_iterator_tag iterator_category;
typedef _Ty value_type;
typedef int difference_type;
typedef int distance_type; // retained
typedef typename _Ty% pointer;
typedef typename _Ty% reference;
};
template<class _Ty>
value class iterator_traits<
_STLCLR Generic::ContainerRandomAccessIterator<_Ty>>
{ // get traits from generic interface
public:
typedef random_access_iterator_tag iterator_category;
typedef _Ty value_type;
typedef int difference_type;
typedef int distance_type; // retained
typedef typename _Ty% pointer;
typedef typename _Ty% reference;
};
template<class _Ty>
value class iterator_traits<
_STLCLR Generic::ConstContainerRandomAccessIterator<_Ty>>
{ // get traits from generic interface
public:
typedef random_access_iterator_tag iterator_category;
typedef _Ty value_type;
typedef int difference_type;
typedef int distance_type; // retained
typedef typename _Ty% pointer;
typedef typename _Ty% reference;
};
template<>
value class iterator_traits<bool>
{ // get traits from integer type
public:
typedef _Int_iterator_tag iterator_category;
};
template<>
value class iterator_traits<char>
{ // get traits from integer type
public:
typedef _Int_iterator_tag iterator_category;
};
template<>
value class iterator_traits<signed char>
{ // get traits from integer type
public:
typedef _Int_iterator_tag iterator_category;
};
template<>
value class iterator_traits<unsigned char>
{ // get traits from integer type
public:
typedef _Int_iterator_tag iterator_category;
};
template<>
value class iterator_traits<wchar_t>
{ // get traits from integer type
public:
typedef _Int_iterator_tag iterator_category;
};
template<>
value class iterator_traits<short>
{ // get traits from integer type
public:
typedef _Int_iterator_tag iterator_category;
};
template<>
value class iterator_traits<unsigned short>
{ // get traits from integer type
public:
typedef _Int_iterator_tag iterator_category;
};
template<>
value class iterator_traits<int>
{ // get traits from integer type
public:
typedef _Int_iterator_tag iterator_category;
};
template<>
value class iterator_traits<unsigned int>
{ // get traits from integer type
public:
typedef _Int_iterator_tag iterator_category;
};
template<>
value class iterator_traits<long>
{ // get traits from integer type
public:
typedef _Int_iterator_tag iterator_category;
};
template<>
value class iterator_traits<unsigned long>
{ // get traits from integer type
public:
typedef _Int_iterator_tag iterator_category;
};
template<>
value class iterator_traits<__int64>
{ // get traits from integer type
public:
typedef _Int_iterator_tag iterator_category;
};
template<>
value class iterator_traits<unsigned __int64>
{ // get traits from integer type
public:
typedef _Int_iterator_tag iterator_category;
};
//
// TEMPLATE FUNCTION _Iter_category
//
template<class _Iter_t> inline
typename iterator_traits<_Iter_t>::iterator_category
_Iter_category(_Iter_t)
{ // return category from iterator argument
typename iterator_traits<_Iter_t>::iterator_category _Cat;
return (_Cat);
}
//
// TEMPLATE FUNCTION advance
//
template<typename _InIt_t,
typename _Diff_t> inline
void _Iter_advance(_InIt_t% _Where, _Diff_t _Off,
input_iterator_tag)
{ // increment iterator by offset, input iterators
for (; 0 < _Off; --_Off)
++_Where;
}
template<typename _BidIt_t,
typename _Diff_t> inline
void _Iter_advance(_BidIt_t% _Where, _Diff_t _Off,
bidirectional_iterator_tag)
{ // increment iterator by offset, bidirectional iterators
for (; 0 < _Off; --_Off)
++_Where;
for (; _Off < 0; ++_Off)
--_Where;
}
template<typename _RanIt_t,
typename _Diff_t> inline
void _Iter_advance(_RanIt_t% _Where, _Diff_t _Off,
random_access_iterator_tag)
{ // increment iterator by offset, random-access iterators
_Where += _Off;
}
template<typename _InIt_t,
typename _Diff_t> inline
void advance(_InIt_t% _Where, _Diff_t _Off)
{ // increment iterator by _Off, arbitrary iterators
_Iter_advance(_Where, _Off, _Iter_category(_Where));
}
//
// TEMPLATE FUNCTIONS distance and _Iter_distance
//
template<typename _InIt_t,
typename _Diff_t> inline
void _Iter_distance2(_InIt_t _First, _InIt_t _Last, _Diff_t% _Off,
input_iterator_tag)
{ // add to _Off distance between input iterators
for (; _First != _Last; ++_First)
++_Off;
}
template<typename _RanIt_t,
typename _Diff_t> inline
void _Iter_distance2(_RanIt_t _First, _RanIt_t _Last, _Diff_t% _Off,
random_access_iterator_tag)
{ // add to _Off distance between random-access iterators
_Off += (_Diff_t)(_Last - _First);
}
template<typename _InIt_t> inline
int distance(_InIt_t _First, _InIt_t _Last)
{ // return distance between iterators
int _Off = 0;
_Iter_distance2(_First, _Last, _Off, _Iter_category(_First));
return (_Off);
}
template<typename _InIt_t,
typename _Diff_t> inline
void _Iter_distance(_InIt_t _First, _InIt_t _Last, _Diff_t% _Off)
{ // add to _Off distance between iterators
_Iter_distance2(_First, _Last, _Off, _Iter_category(_First));
}
} // namespace cliext
#endif // _CLI_XUTILITY_
/*
* Copyright (c) 2004-2007 by Dinkumware, Ltd. ALL RIGHTS RESERVED.
* Consult your license regarding permissions and restrictions.
V5.03:0009 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -