[llvm] r241484 - Reduce code duplication. NFC.

David Blaikie dblaikie at gmail.com
Mon Jul 13 14:33:18 PDT 2015


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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150713/9d268c80/attachment.html>


More information about the llvm-commits mailing list