[PATCH] D18281: [SetVector] Add erase() method
David Blaikie via llvm-commits
llvm-commits at lists.llvm.org
Fri Mar 25 11:47:43 PDT 2016
On Fri, Mar 25, 2016 at 11:46 AM, David Blaikie <dblaikie at gmail.com> wrote:
>
>
> On Fri, Mar 25, 2016 at 11:42 AM, Jun Bum Lim via llvm-commits <
> llvm-commits at lists.llvm.org> wrote:
>
>> junbuml removed rL LLVM as the repository for this revision.
>> junbuml updated this revision to Diff 51666.
>> junbuml added a comment.
>>
>> To avoid the builedbot failure, pass non-const iterator to
>> vector_.erase().
>>
>>
>> http://reviews.llvm.org/D18281
>>
>> Files:
>> include/llvm/ADT/SetVector.h
>> unittests/ADT/CMakeLists.txt
>> unittests/ADT/SetVectorTest.cpp
>>
>> Index: unittests/ADT/SetVectorTest.cpp
>> ===================================================================
>> --- /dev/null
>> +++ unittests/ADT/SetVectorTest.cpp
>> @@ -0,0 +1,34 @@
>> +//===- llvm/unittest/ADT/SetVector.cpp
>> ------------------------------===//
>> +//
>> +// The LLVM Compiler Infrastructure
>> +//
>> +// This file is distributed under the University of Illinois Open Source
>> +// License. See LICENSE.TXT for details.
>> +//
>>
>> +//===----------------------------------------------------------------------===//
>> +//
>> +// SetVector unit tests.
>> +//
>>
>> +//===----------------------------------------------------------------------===//
>> +
>> +#include "llvm/ADT/SetVector.h"
>> +#include "gtest/gtest.h"
>> +
>> +using namespace llvm;
>> +
>> +TEST(SetVector, EraseTest) {
>> + SetVector<int> S;
>> + S.insert(0);
>> + S.insert(1);
>> + S.insert(2);
>> +
>> + auto I = S.erase(std::next(S.begin()));
>> +
>> + // Test that the returned iterator is the expected one-after-erase
>> + // and the size/contents is the expected sequence {0, 2}.
>> + EXPECT_EQ(std::next(S.begin()), I);
>> + EXPECT_EQ(2u, S.size());
>> + EXPECT_EQ(0, *S.begin());
>> + EXPECT_EQ(2, *std::next(S.begin()));
>> +}
>> +
>> Index: unittests/ADT/CMakeLists.txt
>> ===================================================================
>> --- unittests/ADT/CMakeLists.txt
>> +++ unittests/ADT/CMakeLists.txt
>> @@ -32,6 +32,7 @@
>> PostOrderIteratorTest.cpp
>> RangeAdapterTest.cpp
>> SCCIteratorTest.cpp
>> + SetVectorTest.cpp
>> SmallPtrSetTest.cpp
>> SmallStringTest.cpp
>> SmallVectorTest.cpp
>> Index: include/llvm/ADT/SetVector.h
>> ===================================================================
>> --- include/llvm/ADT/SetVector.h
>> +++ include/llvm/ADT/SetVector.h
>> @@ -151,6 +151,21 @@
>> return false;
>> }
>>
>> + /// Erase a single element from the set vector.
>> + /// \returns an iterator pointing to the next element that followed the
>> + /// element erased. This is the end of the SetVector if the last
>> element is
>> + /// erased.
>> + iterator erase(iterator I) {
>> + const key_type &V = *I;
>> + assert(set_.count(V) && "Corrupted SetVector instances!");
>> + set_.erase(V);
>> + // FIXME: No need to use the non-const iterator when built with
>> + // std:vector.erase(const_iterator) as defined in C++11.
>> + typename vector_type::iterator NI (vector_.begin());
>>
>
Probably mention in the comment that this is for compatibility with
non-standard libstdc++ up to 4.8 (fixed in 4.9)
>
> Use = here, rather than () (& probably jsut auto)
>
> auto NI = vector_.begin();
>
>
>> + std::advance(NI, std::distance<iterator>(NI, I));
>> + return vector_.erase(NI);
>> + }
>> +
>> /// \brief Remove items from the set vector based on a predicate
>> function.
>> ///
>> /// This is intended to be equivalent to the following code, if we
>> could
>>
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160325/4df03966/attachment.html>
More information about the llvm-commits
mailing list