Mercurial > hg > CbC > CbC_llvm
comparison libcxx/include/__algorithm/partition_point.h @ 221:79ff65ed7e25
LLVM12 Original
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 15 Jun 2021 19:15:29 +0900 |
parents | |
children | c4bab56944e8 |
comparison
equal
deleted
inserted
replaced
220:42394fc6a535 | 221:79ff65ed7e25 |
---|---|
1 //===----------------------------------------------------------------------===// | |
2 // | |
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | |
4 // See https://llvm.org/LICENSE.txt for license information. | |
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
6 // | |
7 //===----------------------------------------------------------------------===// | |
8 | |
9 #ifndef _LIBCPP___ALGORITHM_PARTITION_POINT_H | |
10 #define _LIBCPP___ALGORITHM_PARTITION_POINT_H | |
11 | |
12 #include <__config> | |
13 #include <__algorithm/half_positive.h> | |
14 #include <iterator> | |
15 | |
16 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) | |
17 #pragma GCC system_header | |
18 #endif | |
19 | |
20 _LIBCPP_PUSH_MACROS | |
21 #include <__undef_macros> | |
22 | |
23 _LIBCPP_BEGIN_NAMESPACE_STD | |
24 | |
25 template<class _ForwardIterator, class _Predicate> | |
26 _LIBCPP_CONSTEXPR_AFTER_CXX17 _ForwardIterator | |
27 partition_point(_ForwardIterator __first, _ForwardIterator __last, _Predicate __pred) | |
28 { | |
29 typedef typename iterator_traits<_ForwardIterator>::difference_type difference_type; | |
30 difference_type __len = _VSTD::distance(__first, __last); | |
31 while (__len != 0) | |
32 { | |
33 difference_type __l2 = _VSTD::__half_positive(__len); | |
34 _ForwardIterator __m = __first; | |
35 _VSTD::advance(__m, __l2); | |
36 if (__pred(*__m)) | |
37 { | |
38 __first = ++__m; | |
39 __len -= __l2 + 1; | |
40 } | |
41 else | |
42 __len = __l2; | |
43 } | |
44 return __first; | |
45 } | |
46 | |
47 _LIBCPP_END_NAMESPACE_STD | |
48 | |
49 _LIBCPP_POP_MACROS | |
50 | |
51 #endif // _LIBCPP___ALGORITHM_PARTITION_POINT_H |