[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