Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8)

Unified Diff: tools/SkFlags.cpp

Issue 12440067: Change the name of SkFlags to SkCommandLineFlags. (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: ParseCommandLine -> Parse Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/SkFlags.h ('k') | tools/bench_pictures_main.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/SkFlags.cpp
diff --git a/tools/SkFlags.cpp b/tools/SkFlags.cpp
deleted file mode 100644
index 9635b82c007935c11ed25c9bf520d2102a7b1b9e..0000000000000000000000000000000000000000
--- a/tools/SkFlags.cpp
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- * Copyright 2013 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include "SkFlags.h"
-
-static bool string_is_in(const char* target, const char* set[], size_t len) {
- for (size_t i = 0; i < len; i++) {
- if (0 == strcmp(target, set[i])) {
- return true;
- }
- }
- return false;
-}
-
-/**
- * Check to see whether string represents a boolean value.
- * @param string C style string to parse.
- * @param result Pointer to a boolean which will be set to the value in the string, if the
- * string represents a boolean.
- * @param boolean True if the string represents a boolean, false otherwise.
- */
-static bool parse_bool_arg(const char* string, bool* result) {
- static const char* trueValues[] = { "1", "TRUE", "true" };
- if (string_is_in(string, trueValues, SK_ARRAY_COUNT(trueValues))) {
- *result = true;
- return true;
- }
- static const char* falseValues[] = { "0", "FALSE", "false" };
- if (string_is_in(string, falseValues, SK_ARRAY_COUNT(falseValues))) {
- *result = false;
- return true;
- }
- SkDebugf("Parameter \"%s\" not supported.\n", string);
- return false;
-}
-
-bool SkFlagInfo::match(const char* string) {
- if (SkStrStartsWith(string, '-') && strlen(string) > 1) {
- string++;
- // Allow one or two dashes
- if (SkStrStartsWith(string, '-') && strlen(string) > 1) {
- string++;
- }
- if (kBool_FlagType == fFlagType) {
- // In this case, go ahead and set the value.
- if (fName.equals(string) || fShortName.equals(string)) {
- *fBoolValue = true;
- return true;
- }
- if (SkStrStartsWith(string, "no") && strlen(string) > 2) {
- string += 2;
- if (fName.equals(string) || fShortName.equals(string)) {
- *fBoolValue = false;
- return true;
- }
- return false;
- }
- int equalIndex = SkStrFind(string, "=");
- if (equalIndex > 0) {
- // The string has an equal sign. Check to see if the string matches.
- SkString flag(string, equalIndex);
- if (flag.equals(fName) || flag.equals(fShortName)) {
- // Check to see if the remainder beyond the equal sign is true or false:
- string += equalIndex + 1;
- parse_bool_arg(string, fBoolValue);
- return true;
- }
- }
- }
- return fName.equals(string) || fShortName.equals(string);
- } else {
- // Has no dash
- return false;
- }
- return false;
-}
-
-SkFlagInfo* SkFlags::gHead;
-SkString SkFlags::gUsage;
-
-void SkFlags::SetUsage(const char* usage) {
- gUsage.set(usage);
-}
-
-// Maximum line length for the help message.
-#define LINE_LENGTH 80
-
-static void print_help_for_flag(const SkFlagInfo* flag) {
- SkDebugf("\t--%s", flag->name().c_str());
- const SkString& shortName = flag->shortName();
- if (shortName.size() > 0) {
- SkDebugf(" or -%s", shortName.c_str());
- }
- SkDebugf(":\ttype: %s", flag->typeAsString().c_str());
- if (flag->defaultValue().size() > 0) {
- SkDebugf("\tdefault: %s", flag->defaultValue().c_str());
- }
- SkDebugf("\n");
- const SkString& help = flag->help();
- size_t length = help.size();
- const char* currLine = help.c_str();
- const char* stop = currLine + length;
- while (currLine < stop) {
- if (strlen(currLine) < LINE_LENGTH) {
- // Only one line length's worth of text left.
- SkDebugf("\t\t%s\n", currLine);
- break;
- }
- int lineBreak = SkStrFind(currLine, "\n");
- if (lineBreak < 0 || lineBreak > LINE_LENGTH) {
- // No line break within line length. Will need to insert one.
- // Find a space before the line break.
- int spaceIndex = LINE_LENGTH - 1;
- while (spaceIndex > 0 && currLine[spaceIndex] != ' ') {
- spaceIndex--;
- }
- int gap;
- if (0 == spaceIndex) {
- // No spaces on the entire line. Go ahead and break mid word.
- spaceIndex = LINE_LENGTH;
- gap = 0;
- } else {
- // Skip the space on the next line
- gap = 1;
- }
- SkDebugf("\t\t%.*s\n", spaceIndex, currLine);
- currLine += spaceIndex + gap;
- } else {
- // the line break is within the limit. Break there.
- lineBreak++;
- SkDebugf("\t\t%.*s", lineBreak, currLine);
- currLine += lineBreak;
- }
- }
- SkDebugf("\n");
-}
-
-void SkFlags::ParseCommandLine(int argc, char** argv) {
- // Only allow calling this function once.
- static bool gOnce;
- if (gOnce) {
- SkDebugf("ParseCommandLine should only be called once at the beginning"
- " of main!\n");
- SkASSERT(false);
- return;
- }
- gOnce = true;
-
- bool helpPrinted = false;
- // Loop over argv, starting with 1, since the first is just the name of the program.
- for (int i = 1; i < argc; i++) {
- if (0 == strcmp("-h", argv[i]) || 0 == strcmp("--h", argv[i])
- || 0 == strcmp("-help", argv[i]) || 0 == strcmp("--help", argv[i])) {
- // Print help message.
- SkTDArray<const char*> helpFlags;
- for (int j = i + 1; j < argc; j++) {
- if (SkStrStartsWith(argv[j], '-')) {
- break;
- }
- helpFlags.append(1, &argv[j]);
- }
- if (0 == helpFlags.count()) {
- // Only print general help message if help for specific flags is not requested.
- SkDebugf("%s\n%s\n", argv[0], gUsage.c_str());
- }
- SkDebugf("Flags:\n");
- SkFlagInfo* flag = SkFlags::gHead;
- while (flag != NULL) {
- // If no flags followed --help, print them all
- bool printFlag = 0 == helpFlags.count();
- if (!printFlag) {
- for (int k = 0; k < helpFlags.count(); k++) {
- if (flag->name().equals(helpFlags[k]) ||
- flag->shortName().equals(helpFlags[k])) {
- printFlag = true;
- 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");
- for (int k = 0; k < helpFlags.count(); k++) {
- SkDebugf("\t--%s\n", helpFlags[k]);
- }
- }
- helpPrinted = true;
- }
- if (!helpPrinted) {
- bool flagMatched = false;
- SkFlagInfo* flag = gHead;
- while (flag != NULL) {
- if (flag->match(argv[i])) {
- flagMatched = true;
- switch (flag->getFlagType()) {
- case SkFlagInfo::kBool_FlagType:
- // Can be handled by match, above, but can also be set by the next
- // string.
- if (i+1 < argc && !SkStrStartsWith(argv[i+1], '-')) {
- i++;
- bool value;
- if (parse_bool_arg(argv[i], &value)) {
- flag->setBool(value);
- }
- }
- break;
- case SkFlagInfo::kString_FlagType:
- flag->resetStrings();
- // Add all arguments until another flag is reached.
- while (i+1 < argc && !SkStrStartsWith(argv[i+1], '-')) {
- i++;
- flag->append(argv[i]);
- }
- break;
- case SkFlagInfo::kInt_FlagType:
- i++;
- flag->setInt(atoi(argv[i]));
- break;
- case SkFlagInfo::kDouble_FlagType:
- i++;
- flag->setDouble(atof(argv[i]));
- break;
- default:
- SkASSERT(!"Invalid flag type");
- }
- break;
- }
- flag = flag->next();
- }
- if (!flagMatched) {
- SkDebugf("Got unknown flag \"%s\". Exiting.\n", argv[i]);
- exit(-1);
- }
- }
- }
- // Since all of the flags have been set, release the memory used by each
- // flag. FLAGS_x can still be used after this.
- SkFlagInfo* flag = gHead;
- gHead = NULL;
- while (flag != NULL) {
- SkFlagInfo* next = flag->next();
- SkDELETE(flag);
- flag = next;
- }
- if (helpPrinted) {
- exit(0);
- }
-}
« no previous file with comments | « tools/SkFlags.h ('k') | tools/bench_pictures_main.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698