diff options
author | halcanary <halcanary@google.com> | 2015-01-18 10:39:25 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-01-18 10:39:25 -0800 |
commit | 03758b8c4a7f22c74a107905d8e16effab1c0442 (patch) | |
tree | 7cfef220dd4e5f3e223a4cd4a2112b56b9e579ec /tools/flags | |
parent | 46d36f0e7b709a077c647841eee23bd3efdc4117 (diff) | |
download | platform_external_skqp-03758b8c4a7f22c74a107905d8e16effab1c0442.tar.gz platform_external_skqp-03758b8c4a7f22c74a107905d8e16effab1c0442.tar.bz2 platform_external_skqp-03758b8c4a7f22c74a107905d8e16effab1c0442.zip |
tool --help alphabetizes command line flags
Review URL: https://codereview.chromium.org/854193003
Diffstat (limited to 'tools/flags')
-rw-r--r-- | tools/flags/SkCommandLineFlags.cpp | 34 |
1 files changed, 25 insertions, 9 deletions
diff --git a/tools/flags/SkCommandLineFlags.cpp b/tools/flags/SkCommandLineFlags.cpp index c25fec5343..dc99fec8cd 100644 --- a/tools/flags/SkCommandLineFlags.cpp +++ b/tools/flags/SkCommandLineFlags.cpp @@ -7,6 +7,7 @@ #include "SkCommandLineFlags.h" #include "SkTDArray.h" +#include "SkTSort.h" DEFINE_bool(undefok, false, "Silently ignore unknown flags instead of crashing."); @@ -191,6 +192,14 @@ static void print_help_for_flag(const SkFlagInfo* flag) { SkDebugf("\n"); } +namespace { +struct CompareFlagsByName { + bool operator()(SkFlagInfo* a, SkFlagInfo* b) const { + return strcmp(a->name().c_str(), b->name().c_str()) < 0; + } +}; +} // namespace + void SkCommandLineFlags::Parse(int argc, char** argv) { // Only allow calling this function once. static bool gOnce; @@ -218,24 +227,31 @@ void SkCommandLineFlags::Parse(int argc, char** argv) { SkDebugf("%s\n%s\n", argv[0], gUsage.c_str()); } SkDebugf("Flags:\n"); - SkFlagInfo* flag = SkCommandLineFlags::gHead; - while (flag != NULL) { + + if (0 == helpFlags.count()) { // If no flags followed --help, print them all - bool printFlag = 0 == helpFlags.count(); - if (!printFlag) { + SkTDArray<SkFlagInfo*> allFlags; + for (SkFlagInfo* flag = SkCommandLineFlags::gHead; flag; + flag = flag->next()) { + allFlags.push(flag); + } + SkTQSort(&allFlags[0], &allFlags[allFlags.count() - 1], + CompareFlagsByName()); + for (int i = 0; i < allFlags.count(); ++i) { + print_help_for_flag(allFlags[i]); + } + } else { + for (SkFlagInfo* flag = SkCommandLineFlags::gHead; flag; + flag = flag->next()) { for (int k = 0; k < helpFlags.count(); k++) { if (flag->name().equals(helpFlags[k]) || flag->shortName().equals(helpFlags[k])) { - printFlag = true; + print_help_for_flag(flag); helpFlags.remove(k); break; } } } - if (printFlag) { - print_help_for_flag(flag); - } - flag = flag->next(); } if (helpFlags.count() > 0) { SkDebugf("Requested help for unrecognized flags:\n"); |