Object: Add range iterators for Archive children
authorDavid Majnemer <david.majnemer@gmail.com>
Thu, 25 Sep 2014 22:56:54 +0000 (22:56 +0000)
committerDavid Majnemer <david.majnemer@gmail.com>
Thu, 25 Sep 2014 22:56:54 +0000 (22:56 +0000)
No functional change intended.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@218471 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Object/Archive.h
tools/llvm-vtabledump/llvm-vtabledump.cpp

index 5526dd13ba64385dd3598d33bba0d59d0bb165d3..7c03dcda172ea519bf32d91d1cafe4c3545cb489 100644 (file)
@@ -14,6 +14,7 @@
 #ifndef LLVM_OBJECT_ARCHIVE_H
 #define LLVM_OBJECT_ARCHIVE_H
 
+#include "llvm/ADT/iterator_range.h"
 #include "llvm/ADT/StringRef.h"
 #include "llvm/Object/Binary.h"
 #include "llvm/Support/ErrorHandling.h"
@@ -97,12 +98,12 @@ public:
 
   class child_iterator {
     Child child;
+
   public:
     child_iterator() : child(Child(nullptr, nullptr)) {}
     child_iterator(const Child &c) : child(c) {}
-    const Child* operator->() const {
-      return &child;
-    }
+    const Child *operator->() const { return &child; }
+    const Child &operator*() const { return child; }
 
     bool operator==(const child_iterator &other) const {
       return child == other.child;
@@ -112,11 +113,11 @@ public:
       return !(*this == other);
     }
 
-    bool operator <(const child_iterator &other) const {
+    bool operator<(const child_iterator &other) const {
       return child < other.child;
     }
 
-    child_iterator& operator++() {  // Preincrement
+    child_iterator &operator++() { // Preincrement
       child = child.getNext();
       return *this;
     }
@@ -178,6 +179,10 @@ public:
 
   child_iterator child_begin(bool SkipInternal = true) const;
   child_iterator child_end() const;
+  iterator_range<child_iterator> children(bool SkipInternal = true) const {
+    return iterator_range<child_iterator>(child_begin(SkipInternal),
+                                          child_end());
+  }
 
   symbol_iterator symbol_begin() const;
   symbol_iterator symbol_end() const;
index f089d586c49dd14bd142736a0ee209a538a83dc8..3119fc0d6f30e9044b3d9126d1796e2c0bb5fbad 100644 (file)
@@ -137,10 +137,8 @@ static void dumpVTables(const ObjectFile *Obj) {
 }
 
 static void dumpArchive(const Archive *Arc) {
-  for (Archive::child_iterator ArcI = Arc->child_begin(),
-                               ArcE = Arc->child_end();
-       ArcI != ArcE; ++ArcI) {
-    ErrorOr<std::unique_ptr<Binary>> ChildOrErr = ArcI->getAsBinary();
+  for (const Archive::Child &ArcC : Arc->children()) {
+    ErrorOr<std::unique_ptr<Binary>> ChildOrErr = ArcC.getAsBinary();
     if (std::error_code EC = ChildOrErr.getError()) {
       // Ignore non-object files.
       if (EC != object_error::invalid_file_type)