[llvm] r241484 - Reduce code duplication. NFC.

Rafael EspĂ­ndola rafael.espindola at gmail.com
Mon Jul 13 15:02:11 PDT 2015


Thanks!

I switched to make_tuple in r242074, but kept the independent
functions. Let me know if you think the template would still be worth
it.

On 13 July 2015 at 14:33, David Blaikie <dblaikie at gmail.com> wrote:
> Could remove some more redundancy here (at least from the latter two,
> possibly from the first too) with a template:
>
> template<typename A, typename B, typename C, A NMSymbol::* AF, B NMSymbol::*
> BF, C NMSymbol::* CF>
> static bool compare(const NMSymbol &LHS, const NMSymbol &RHS) {
>   return make_tuple(LHS.*AF, LHS.*BF, LHS.*CF) < make_tuple(RHS.*AF,
> RHS.*BF, RHS.*CF);
> }
>
> But perhaps it's not worth the bother. I think it might be /slightly/
> clearer what ordering is being implemented, but that's certainly debatable.
>
> On Mon, Jul 6, 2015 at 11:48 AM, Rafael Espindola
> <rafael.espindola at gmail.com> wrote:
>>
>> Author: rafael
>> Date: Mon Jul  6 13:48:47 2015
>> New Revision: 241484
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=241484&view=rev
>> Log:
>> Reduce code duplication. NFC.
>>
>> 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=241484&r1=241483&r2=241484&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/tools/llvm-nm/llvm-nm.cpp (original)
>> +++ llvm/trunk/tools/llvm-nm/llvm-nm.cpp Mon Jul  6 13:48:47 2015
>> @@ -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(Symbo
>>                                     std::string ArchiveName,
>>                                     std::string ArchitectureName) {
>>    if (!NoSort) {
>> +    std::function<bool(const NMSymbol &, const NMSymbol &)> 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) {
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
>



More information about the llvm-commits mailing list