Initial dsymutil tool commit.
[oota-llvm.git] / tools / dsymutil / DebugMap.cpp
index c0e2393f3beaaf3196d4ec40c8fd8d71d2e5bd95..c8375171ee274c052f3856f7ac80bf66e46ce6c8 100644 (file)
@@ -8,6 +8,7 @@
 //===----------------------------------------------------------------------===//
 #include "DebugMap.h"
 
+#include "llvm/ADT/iterator_range.h"
 #include "llvm/ADT/STLExtras.h"
 #include "llvm/Support/DataTypes.h"
 #include "llvm/Support/Format.h"
 #include <algorithm>
 
 namespace llvm {
+namespace dsymutil {
 
 using namespace llvm::object;
 
 DebugMapObject::DebugMapObject(StringRef ObjectFilename)
-  : Filename(ObjectFilename) {}
+    : Filename(ObjectFilename) {}
 
 bool DebugMapObject::addSymbol(StringRef Name, uint64_t ObjectAddress,
                                uint64_t LinkedAddress) {
-  auto InsertResult = Symbols.insert(std::make_pair(Name,
-                                                    SymbolMapping{ObjectAddress,
-                                                                  LinkedAddress}));
+  auto InsertResult = Symbols.insert(
+      std::make_pair(Name, SymbolMapping(ObjectAddress, LinkedAddress)));
   return InsertResult.second;
 }
 
-void DebugMapObject::print(raw_ostreamOS) const {
+void DebugMapObject::print(raw_ostream &OS) const {
   OS << getObjectFilename() << ":\n";
   // Sort the symbols in alphabetical order, like llvm-nm (and to get
   // deterministic output for testing).
-  typedef StringMapEntry<SymbolMapping> MapEntryTy;
-  std::vector<const MapEntryTy *> Entries;
+  typedef std::pair<StringRef, SymbolMapping> Entry;
+  std::vector<Entry> Entries;
   Entries.reserve(Symbols.getNumItems());
-  for (auto SymIt = Symbols.begin(), End = Symbols.end(); SymIt != End; ++SymIt)
-    Entries.push_back(&*SymIt);
-  std::sort(Entries.begin(), Entries.end(),
-            [] (const MapEntryTy *LHS, const MapEntryTy *RHS) {
-              return LHS->getKey() < RHS->getKey();
-            });
-  for (const auto *Entry: Entries) {
-    const auto &Sym = Entry->getValue();
+  for (const auto &Sym : make_range(Symbols.begin(), Symbols.end()))
+    Entries.push_back(std::make_pair(Sym.getKey(), Sym.getValue()));
+  std::sort(
+      Entries.begin(), Entries.end(),
+      [](const Entry &LHS, const Entry &RHS) { return LHS.first < RHS.first; });
+  for (const auto &Sym : Entries) {
     OS << format("\t%016" PRIx64 " => %016" PRIx64 "\t%s\n",
-                     Sym.ObjectAddress, Sym.BinaryAddress, Entry->getKeyData());
+                 Sym.second.ObjectAddress, Sym.second.BinaryAddress,
+                 Sym.first.data());
   }
   OS << '\n';
 }
 
 #ifndef NDEBUG
-void DebugMapObject::dump() const {
-  print(errs());
-}
+void DebugMapObject::dump() const { print(errs()); }
 #endif
 
-DebugMapObjectDebugMap::addDebugMapObject(StringRef ObjectFilePath) {
+DebugMapObject &DebugMap::addDebugMapObject(StringRef ObjectFilePath) {
   Objects.emplace_back(new DebugMapObject(ObjectFilePath));
   return *Objects.back();
 }
@@ -69,16 +67,15 @@ DebugMapObject::lookupSymbol(StringRef SymbolName) const {
   return &Sym->getValue();
 }
 
-void DebugMap::print(raw_ostreamOS) const {
+void DebugMap::print(raw_ostream &OS) const {
   OS << "DEBUG MAP:   object addr =>  executable addr\tsymbol name\n";
-  for (const auto &Obj: objects())
+  for (const auto &Obj : objects())
     Obj->print(OS);
   OS << "END DEBUG MAP\n";
 }
 
 #ifndef NDEBUG
-void DebugMap::dump() const {
-  print(errs());
-}
+void DebugMap::dump() const { print(errs()); }
 #endif
 }
+}