Object: Add range iterators for Archive children

No functional change intended.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@218471 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
David Majnemer 2014-09-25 22:56:54 +00:00
parent 2fe3200c6a
commit 5c1c055cb7
2 changed files with 12 additions and 9 deletions

View 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;

View 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)