[llvm] r242074 - Use std::make_tuple to reduce code duplication.

Rafael Espindola rafael.espindola at gmail.com
Mon Jul 13 15:01:02 PDT 2015


Author: rafael
Date: Mon Jul 13 17:01:02 2015
New Revision: 242074

URL: http://llvm.org/viewvc/llvm-project?rev=242074&view=rev
Log:
Use std::make_tuple to reduce code duplication.

Thanks to David Blaikie for the suggestion.

Modified:
    llvm/trunk/tools/llvm-nm/llvm-nm.cpp

Modified: llvm/trunk/tools/llvm-nm/llvm-nm.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-nm/llvm-nm.cpp?rev=242074&r1=242073&r2=242074&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-nm/llvm-nm.cpp (original)
+++ llvm/trunk/tools/llvm-nm/llvm-nm.cpp Mon Jul 13 17:01:02 2015
@@ -185,39 +185,20 @@ struct NMSymbol {
 }
 
 static bool compareSymbolAddress(const NMSymbol &A, const NMSymbol &B) {
-  bool AUndefined = A.Sym.getFlags() & SymbolRef::SF_Undefined;
-  bool BUndefined = B.Sym.getFlags() & SymbolRef::SF_Undefined;
-  if (AUndefined && !BUndefined)
-    return true;
-  if (!AUndefined && BUndefined)
-    return false;
-  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;
+  bool ADefined = !(A.Sym.getFlags() & SymbolRef::SF_Undefined);
+  bool BDefined = !(B.Sym.getFlags() & SymbolRef::SF_Undefined);
+  return std::make_tuple(ADefined, A.Address, A.Name, A.Size) <
+         std::make_tuple(BDefined, B.Address, B.Name, B.Size);
 }
 
 static bool compareSymbolSize(const NMSymbol &A, const NMSymbol &B) {
-  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;
+  return std::make_tuple(A.Size, A.Name, A.Address) <
+         std::make_tuple(B.Size, B.Name, B.Address);
 }
 
 static bool compareSymbolName(const NMSymbol &A, const NMSymbol &B) {
-  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;
+  return std::make_tuple(A.Name, A.Size, A.Address) <
+         std::make_tuple(B.Name, B.Size, B.Address);
 }
 
 static char isSymbolList64Bit(SymbolicFile &Obj) {





More information about the llvm-commits mailing list