aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2012-10-03 00:03:00 +0000
committerChandler Carruth <chandlerc@gmail.com>2012-10-03 00:03:00 +0000
commit75eac5f0ebff4d0ffe10ce6bc8f2867c5f15315b (patch)
tree144f058935a0b1390a75daae8268fbf73a98aa68 /include
parent2b87e06d265e83d61873075e8f8e9c51430ff332 (diff)
downloadexternal_llvm-75eac5f0ebff4d0ffe10ce6bc8f2867c5f15315b.zip
external_llvm-75eac5f0ebff4d0ffe10ce6bc8f2867c5f15315b.tar.gz
external_llvm-75eac5f0ebff4d0ffe10ce6bc8f2867c5f15315b.tar.bz2
Switch the SetVector::remove_if implementation to use partition which
preserves the values of the relocated entries, unlikely remove_if. This allows walking them and erasing them. Also flesh out the predicate we are using for this to support the various constraints actually imposed on a UnaryPredicate -- without this we can't compose it with std::not1. Thanks to Sean Silva for the review here and noticing the issue with std::remove_if. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165073 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r--include/llvm/ADT/SetVector.h5
1 files changed, 3 insertions, 2 deletions
diff --git a/include/llvm/ADT/SetVector.h b/include/llvm/ADT/SetVector.h
index e8d63ed..0ff0f46 100644
--- a/include/llvm/ADT/SetVector.h
+++ b/include/llvm/ADT/SetVector.h
@@ -141,8 +141,9 @@ public:
/// \returns true if any element is removed.
template <typename UnaryPredicate>
bool remove_if(UnaryPredicate P) {
- typename vector_type::iterator B = std::remove_if(vector_.begin(),
- vector_.end(), P),
+ typename vector_type::iterator B = std::partition(vector_.begin(),
+ vector_.end(),
+ std::not1(P)),
E = vector_.end();
if (B == E)
return false;