forked from OSchip/llvm-project
[ADT] Add a boring std::partition wrapper similar to our std::remove_if
wrapper. llvm-svn: 290553
This commit is contained in:
parent
4f9b3f4a5b
commit
d9eaa54ef4
|
@ -808,6 +808,13 @@ OutputIt transform(R &&Range, OutputIt d_first, UnaryPredicate P) {
|
|||
return std::transform(std::begin(Range), std::end(Range), d_first, P);
|
||||
}
|
||||
|
||||
/// Provide wrappers to std::partition which take ranges instead of having to
|
||||
/// pass begin/end explicitly.
|
||||
template <typename R, typename UnaryPredicate>
|
||||
auto partition(R &&Range, UnaryPredicate P) -> decltype(std::begin(Range)) {
|
||||
return std::partition(std::begin(Range), std::end(Range), P);
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Extra additions to <memory>
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
|
|
@ -276,4 +276,25 @@ TEST(STLExtrasTest, ConcatRange) {
|
|||
Test.push_back(i);
|
||||
EXPECT_EQ(Expected, Test);
|
||||
}
|
||||
|
||||
TEST(STLExtrasTest, PartitionAdaptor) {
|
||||
std::vector<int> V = {1, 2, 3, 4, 5, 6, 7, 8};
|
||||
|
||||
auto I = partition(V, [](int i) { return i % 2 == 0; });
|
||||
ASSERT_EQ(V.begin() + 4, I);
|
||||
|
||||
// Sort the two halves as partition may have messed with the order.
|
||||
std::sort(V.begin(), I);
|
||||
std::sort(I, V.end());
|
||||
|
||||
EXPECT_EQ(2, V[0]);
|
||||
EXPECT_EQ(4, V[1]);
|
||||
EXPECT_EQ(6, V[2]);
|
||||
EXPECT_EQ(8, V[3]);
|
||||
EXPECT_EQ(1, V[4]);
|
||||
EXPECT_EQ(3, V[5]);
|
||||
EXPECT_EQ(5, V[6]);
|
||||
EXPECT_EQ(7, V[7]);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue