[libcxx] r181548 - Implement n3607: 'equal', 'mismatch', and 'is_permutation'
Sebastian Redl
sebastian.redl at getdesigned.at
Thu May 9 15:53:34 PDT 2013
On 09.05.2013, at 23:14, Marshall Clow wrote:
> Author: marshall
> Date: Thu May 9 16:14:23 2013
> New Revision: 181548
>
> URL: http://llvm.org/viewvc/llvm-project?rev=181548&view=rev
> Log:
> Implement n3607: 'equal', 'mismatch', and 'is_permutation'
>
>
> template<class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate>
> @@ -1169,6 +1282,100 @@ is_permutation(_ForwardIterator1 __first
> return _VSTD::is_permutation(__first1, __last1, __first2, __equal_to<__v1, __v2>());
> }
>
> +#if _LIBCPP_STD_VER > 11
> +template<class _BinaryPredicate, class _ForwardIterator1, class _ForwardIterator2>
> +bool
> +__is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
> + _ForwardIterator2 __first2, _ForwardIterator2 __last2,
> + _BinaryPredicate __pred,
> + forward_iterator_tag, forward_iterator_tag )
> +{
> + // shorten sequences as much as possible by lopping of any equal parts
> + for (; __first1 != __last1 && __first2 != __last2; ++__first1, ++__first2)
> + if (!__pred(*__first1, *__first2))
> + goto __not_done;
> + return __first1 == __last1 && __first2 == __last2;
> +__not_done:
> + // __first1 != __last1 && __first2 != __last2 && *__first1 != *__first2
> + typedef typename iterator_traits<_ForwardIterator1>::difference_type _D1;
> + _D1 __l1 = _VSTD::distance(__first1, __last1);
> +
> + typedef typename iterator_traits<_ForwardIterator2>::difference_type _D2;
> + _D1 __l2 = _VSTD::distance(__first2, __last2);
_D2?
More information about the cfe-commits
mailing list