From: Rafael Espindola Date: Mon, 6 Jul 2015 18:48:47 +0000 (+0000) Subject: Reduce code duplication. NFC. X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=commitdiff_plain;h=be2ff7bc98825658def8c190efeca49303334537 Reduce code duplication. NFC. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241484 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/tools/llvm-nm/llvm-nm.cpp b/tools/llvm-nm/llvm-nm.cpp index 4edb4efa8d0..961754ccefa 100644 --- a/tools/llvm-nm/llvm-nm.cpp +++ b/tools/llvm-nm/llvm-nm.cpp @@ -185,60 +185,31 @@ struct NMSymbol { } static bool compareSymbolAddress(const NMSymbol &A, const NMSymbol &B) { - if (!ReverseSort) { - if (A.Address < B.Address) - return true; - if (A.Address == B.Address && A.Name < B.Name) - return true; - if (A.Address == B.Address && A.Name == B.Name && A.Size < B.Size) - return true; - return false; - } - - if (A.Address > B.Address) + if (A.Address < B.Address) return true; - if (A.Address == B.Address && A.Name > B.Name) + if (A.Address == B.Address && A.Name < B.Name) return true; - if (A.Address == B.Address && A.Name == B.Name && A.Size > B.Size) + if (A.Address == B.Address && A.Name == B.Name && A.Size < B.Size) return true; return false; } static bool compareSymbolSize(const NMSymbol &A, const NMSymbol &B) { - if (!ReverseSort) { - if (A.Size < B.Size) - return true; - if (A.Size == B.Size && A.Name < B.Name) - return true; - if (A.Size == B.Size && A.Name == B.Name && A.Address < B.Address) - return true; - return false; - } - - if (A.Size > B.Size) + if (A.Size < B.Size) return true; - if (A.Size == B.Size && A.Name > B.Name) + if (A.Size == B.Size && A.Name < B.Name) return true; - if (A.Size == B.Size && A.Name == B.Name && A.Address > B.Address) + if (A.Size == B.Size && A.Name == B.Name && A.Address < B.Address) return true; return false; } static bool compareSymbolName(const NMSymbol &A, const NMSymbol &B) { - if (!ReverseSort) { - if (A.Name < B.Name) - return true; - if (A.Name == B.Name && A.Size < B.Size) - return true; - if (A.Name == B.Name && A.Size == B.Size && A.Address < B.Address) - return true; - return false; - } - if (A.Name > B.Name) + if (A.Name < B.Name) return true; - if (A.Name == B.Name && A.Size > B.Size) + if (A.Name == B.Name && A.Size < B.Size) return true; - if (A.Name == B.Name && A.Size == B.Size && A.Address > B.Address) + if (A.Name == B.Name && A.Size == B.Size && A.Address < B.Address) return true; return false; } @@ -526,12 +497,17 @@ static void sortAndPrintSymbolList(SymbolicFile &Obj, bool printName, std::string ArchiveName, std::string ArchitectureName) { if (!NoSort) { + std::function Cmp; if (NumericSort) - std::sort(SymbolList.begin(), SymbolList.end(), compareSymbolAddress); + Cmp = compareSymbolAddress; else if (SizeSort) - std::sort(SymbolList.begin(), SymbolList.end(), compareSymbolSize); + Cmp = compareSymbolSize; else - std::sort(SymbolList.begin(), SymbolList.end(), compareSymbolName); + Cmp = compareSymbolName; + + if (ReverseSort) + Cmp = [=](const NMSymbol &A, const NMSymbol &B) { return !Cmp(A, B); }; + std::sort(SymbolList.begin(), SymbolList.end(), Cmp); } if (!PrintFileName) {