[PATCH] [C++11] Use std::unique_ptr for ownership in a vector.

Ahmed Charles acharles at outlook.com
Sat Mar 8 19:29:32 PST 2014


Hi chandlerc, dblaikie,

Also change to using range-based for loops. No functional change intended.

http://llvm-reviews.chandlerc.com/D3016

Files:
  lib/ASTMatchers/Dynamic/Marshallers.h

Index: lib/ASTMatchers/Dynamic/Marshallers.h
===================================================================
--- lib/ASTMatchers/Dynamic/Marshallers.h
+++ lib/ASTMatchers/Dynamic/Marshallers.h
@@ -510,19 +510,17 @@
 class OverloadedMatcherDescriptor : public MatcherDescriptor {
 public:
   OverloadedMatcherDescriptor(ArrayRef<MatcherDescriptor *> Callbacks)
-      : Overloads(Callbacks) {}
+      : Overloads(Callbacks.begin(), Callbacks.end()) {}
 
-  virtual ~OverloadedMatcherDescriptor() {
-    llvm::DeleteContainerPointers(Overloads);
-  }
+  virtual ~OverloadedMatcherDescriptor() {}
 
   virtual VariantMatcher create(const SourceRange &NameRange,
                                 ArrayRef<ParserValue> Args,
                                 Diagnostics *Error) const {
     std::vector<VariantMatcher> Constructed;
     Diagnostics::OverloadContext Ctx(Error);
-    for (size_t i = 0, e = Overloads.size(); i != e; ++i) {
-      VariantMatcher SubMatcher = Overloads[i]->create(NameRange, Args, Error);
+    for (const auto &O : Overloads) {
+      VariantMatcher SubMatcher = O->create(NameRange, Args, Error);
       if (!SubMatcher.isNull()) {
         Constructed.push_back(SubMatcher);
       }
@@ -542,50 +540,42 @@
   bool isVariadic() const {
     bool Overload0Variadic = Overloads[0]->isVariadic();
 #ifndef NDEBUG
-    for (std::vector<MatcherDescriptor *>::const_iterator I = Overloads.begin(),
-                                                          E = Overloads.end();
-         I != E; ++I) {
-      assert(Overload0Variadic == (*I)->isVariadic());
+    for (const auto &O : Overloads) {
+      assert(Overload0Variadic == O->isVariadic());
     }
 #endif
     return Overload0Variadic;
   }
 
   unsigned getNumArgs() const {
     unsigned Overload0NumArgs = Overloads[0]->getNumArgs();
 #ifndef NDEBUG
-    for (std::vector<MatcherDescriptor *>::const_iterator I = Overloads.begin(),
-                                                          E = Overloads.end();
-         I != E; ++I) {
-      assert(Overload0NumArgs == (*I)->getNumArgs());
+    for (const auto &O : Overloads) {
+      assert(Overload0NumArgs == O->getNumArgs());
     }
 #endif
     return Overload0NumArgs;
   }
 
   void getArgKinds(ast_type_traits::ASTNodeKind ThisKind, unsigned ArgNo,
                    std::vector<ArgKind> &Kinds) const {
-    for (std::vector<MatcherDescriptor *>::const_iterator I = Overloads.begin(),
-                                                    E = Overloads.end();
-         I != E; ++I) {
-      if ((*I)->isConvertibleTo(ThisKind))
-        (*I)->getArgKinds(ThisKind, ArgNo, Kinds);
+    for (const auto &O : Overloads) {
+      if (O->isConvertibleTo(ThisKind))
+        O->getArgKinds(ThisKind, ArgNo, Kinds);
     }
   }
 
   bool isConvertibleTo(ast_type_traits::ASTNodeKind Kind, unsigned *Specificity,
                        ast_type_traits::ASTNodeKind *LeastDerivedKind) const {
-    for (std::vector<MatcherDescriptor *>::const_iterator I = Overloads.begin(),
-                                                    E = Overloads.end();
-         I != E; ++I) {
-      if ((*I)->isConvertibleTo(Kind, Specificity, LeastDerivedKind))
+    for (const auto &O : Overloads) {
+      if (O->isConvertibleTo(Kind, Specificity, LeastDerivedKind))
         return true;
     }
     return false;
   }
 
 private:
-  std::vector<MatcherDescriptor *> Overloads;
+  std::vector<std::unique_ptr<MatcherDescriptor>> Overloads;
 };
 
 /// \brief Variadic operator marshaller function.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D3016.1.patch
Type: text/x-patch
Size: 3528 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140308/7d1891b7/attachment.bin>


More information about the cfe-commits mailing list