Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright 2013 Google Inc. | 2 * Copyright 2013 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #ifndef SK_COMMAND_LINE_FLAGS_H | 8 #ifndef SK_COMMAND_LINE_FLAGS_H |
| 9 #define SK_COMMAND_LINE_FLAGS_H | 9 #define SK_COMMAND_LINE_FLAGS_H |
| 10 | 10 |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 34 * will create the following variable: | 34 * will create the following variable: |
| 35 * | 35 * |
| 36 * bool FLAGS_boolean; | 36 * bool FLAGS_boolean; |
| 37 * | 37 * |
| 38 * which will initially be set to false, and can be set to true by using the | 38 * which will initially be set to false, and can be set to true by using the |
| 39 * flag "--boolean" on the commandline. "--noboolean" will set FLAGS_boolean | 39 * flag "--boolean" on the commandline. "--noboolean" will set FLAGS_boolean |
| 40 * to false. FLAGS_boolean can also be set using "--boolean=true" or | 40 * to false. FLAGS_boolean can also be set using "--boolean=true" or |
| 41 * "--boolean true" (where "true" can be replaced by "false", "TRUE", "FALSE", | 41 * "--boolean true" (where "true" can be replaced by "false", "TRUE", "FALSE", |
| 42 * "1" or "0"). | 42 * "1" or "0"). |
| 43 * | 43 * |
| 44 * Single dashes are also permitted for this and other flags. | |
| 45 * | |
| 46 * The helpString will be printed if the help flag (-h or -help) is used. | 44 * The helpString will be printed if the help flag (-h or -help) is used. |
| 47 * | 45 * |
| 48 * Similarly, the line | 46 * Similarly, the line |
| 49 * | 47 * |
| 50 * DEFINE_int32(integer, .., ..); | 48 * DEFINE_int32(integer, .., ..); |
| 51 * | 49 * |
| 52 * will create | 50 * will create |
| 53 * | 51 * |
| 54 * int32_t FLAGS_integer; | 52 * int32_t FLAGS_integer; |
| 55 * | 53 * |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 142 #define DECLARE_bool(name) extern bool FLAGS_##name; | 140 #define DECLARE_bool(name) extern bool FLAGS_##name; |
| 143 | 141 |
| 144 #define DEFINE_string(name, defaultValue, helpString) \ | 142 #define DEFINE_string(name, defaultValue, helpString) \ |
| 145 SkTDArray<const char*> FLAGS_##name; \ | 143 SkTDArray<const char*> FLAGS_##name; \ |
| 146 static bool unused_##name = SkFlagInfo::CreateStringFlag(TO_STRING(name), \ | 144 static bool unused_##name = SkFlagInfo::CreateStringFlag(TO_STRING(name), \ |
| 147 NULL, \ | 145 NULL, \ |
| 148 &FLAGS_##name, \ | 146 &FLAGS_##name, \ |
| 149 defaultValue, \ | 147 defaultValue, \ |
| 150 helpString) | 148 helpString) |
| 151 | 149 |
| 152 // string2 allows specifying a short name. No check is done to ensure that short Name | 150 // string2 allows specifying a short name. There is an assert that shortName |
| 153 // is actually shorter than name. | 151 // is only 1 character. |
| 154 #define DEFINE_string2(name, shortName, defaultValue, helpString) \ | 152 #define DEFINE_string2(name, shortName, defaultValue, helpString) \ |
|
reed1
2013/03/21 22:06:59
Can we name this DEFINE_char or DEFINE_string1, to
scroggo
2013/03/22 17:52:31
I agree that the current name is bad... I'm thinki
| |
| 155 SkTDArray<const char*> FLAGS_##name; \ | 153 SkTDArray<const char*> FLAGS_##name; \ |
| 156 static bool unused_##name = SkFlagInfo::CreateStringFlag(TO_STRING(name), \ | 154 static bool unused_##name = SkFlagInfo::CreateStringFlag(TO_STRING(name), \ |
| 157 TO_STRING(shortName), \ | 155 TO_STRING(shortName), \ |
| 158 &FLAGS_##name, \ | 156 &FLAGS_##name, \ |
| 159 defaultValue, \ | 157 defaultValue, \ |
| 160 helpString) | 158 helpString) |
| 161 | 159 |
| 162 #define DECLARE_string(name) extern SkTDArray<const char*> FLAGS_##name; | 160 #define DECLARE_string(name) extern SkTDArray<const char*> FLAGS_##name; |
| 163 | 161 |
| 164 #define DEFINE_int32(name, defaultValue, helpString) \ | 162 #define DEFINE_int32(name, defaultValue, helpString) \ |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 185 enum FlagTypes { | 183 enum FlagTypes { |
| 186 kBool_FlagType, | 184 kBool_FlagType, |
| 187 kString_FlagType, | 185 kString_FlagType, |
| 188 kInt_FlagType, | 186 kInt_FlagType, |
| 189 kDouble_FlagType, | 187 kDouble_FlagType, |
| 190 }; | 188 }; |
| 191 | 189 |
| 192 // Create flags of the desired type, and append to the list. | 190 // Create flags of the desired type, and append to the list. |
| 193 static bool CreateBoolFlag(const char* name, const char* shortName, bool* pB ool, | 191 static bool CreateBoolFlag(const char* name, const char* shortName, bool* pB ool, |
| 194 bool defaultValue, const char* helpString) { | 192 bool defaultValue, const char* helpString) { |
| 195 SkFlagInfo* info = SkNEW_ARGS(SkFlagInfo, (name, kBool_FlagType, helpStr ing)); | 193 SkFlagInfo* info = SkNEW_ARGS(SkFlagInfo, (name, shortName, kBool_FlagTy pe, helpString)); |
| 196 info->fShortName.set(shortName); | |
| 197 info->fBoolValue = pBool; | 194 info->fBoolValue = pBool; |
| 198 *info->fBoolValue = info->fDefaultBool = defaultValue; | 195 *info->fBoolValue = info->fDefaultBool = defaultValue; |
| 199 return true; | 196 return true; |
| 200 } | 197 } |
| 201 | 198 |
| 202 static bool CreateStringFlag(const char* name, const char* shortName, | 199 static bool CreateStringFlag(const char* name, const char* shortName, |
| 203 SkTDArray<const char*>* pStrings, | 200 SkTDArray<const char*>* pStrings, |
| 204 const char* defaultValue, const char* helpStrin g) { | 201 const char* defaultValue, const char* helpStrin g) { |
| 205 SkFlagInfo* info = SkNEW_ARGS(SkFlagInfo, (name, kString_FlagType, helpS tring)); | 202 SkFlagInfo* info = SkNEW_ARGS(SkFlagInfo, (name, shortName, kString_Flag Type, helpString)); |
| 206 info->fShortName.set(shortName); | |
| 207 info->fDefaultString.set(defaultValue); | 203 info->fDefaultString.set(defaultValue); |
| 208 | 204 |
| 209 info->fStrings = pStrings; | 205 info->fStrings = pStrings; |
| 210 info->fStrings->reset(); | 206 info->fStrings->reset(); |
| 211 // If default is "", leave the array empty. | 207 // If default is "", leave the array empty. |
| 212 if (info->fDefaultString.size() > 0) { | 208 if (info->fDefaultString.size() > 0) { |
| 213 info->fStrings->append(1, &defaultValue); | 209 info->fStrings->append(1, &defaultValue); |
| 214 } | 210 } |
| 215 return true; | 211 return true; |
| 216 } | 212 } |
| 217 | 213 |
| 218 static bool CreateIntFlag(const char* name, int32_t* pInt, | 214 static bool CreateIntFlag(const char* name, int32_t* pInt, |
| 219 int32_t defaultValue, const char* helpString) { | 215 int32_t defaultValue, const char* helpString) { |
| 220 SkFlagInfo* info = SkNEW_ARGS(SkFlagInfo, (name, kInt_FlagType, helpStri ng)); | 216 SkFlagInfo* info = SkNEW_ARGS(SkFlagInfo, (name, NULL, kInt_FlagType, he lpString)); |
| 221 info->fIntValue = pInt; | 217 info->fIntValue = pInt; |
| 222 *info->fIntValue = info->fDefaultInt = defaultValue; | 218 *info->fIntValue = info->fDefaultInt = defaultValue; |
| 223 return true; | 219 return true; |
| 224 } | 220 } |
| 225 | 221 |
| 226 static bool CreateDoubleFlag(const char* name, double* pDouble, | 222 static bool CreateDoubleFlag(const char* name, double* pDouble, |
| 227 double defaultValue, const char* helpString) { | 223 double defaultValue, const char* helpString) { |
| 228 SkFlagInfo* info = SkNEW_ARGS(SkFlagInfo, (name, kDouble_FlagType, helpS tring)); | 224 SkFlagInfo* info = SkNEW_ARGS(SkFlagInfo, (name, NULL, kDouble_FlagType, helpString)); |
| 229 info->fDoubleValue = pDouble; | 225 info->fDoubleValue = pDouble; |
| 230 *info->fDoubleValue = info->fDefaultDouble = defaultValue; | 226 *info->fDoubleValue = info->fDefaultDouble = defaultValue; |
| 231 return true; | 227 return true; |
| 232 } | 228 } |
| 233 | 229 |
| 234 /** | 230 /** |
| 235 * Returns true if the string matches this flag. | 231 * Returns true if the string matches this flag. |
| 236 * For a boolean flag, also sets the value, since a boolean flag can be set in a number of ways | 232 * For a boolean flag, also sets the value, since a boolean flag can be set in a number of ways |
| 237 * without looking at the following string: | 233 * without looking at the following string: |
| 238 * --name | 234 * --name |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 326 return SkString("int"); | 322 return SkString("int"); |
| 327 case SkFlagInfo::kDouble_FlagType: | 323 case SkFlagInfo::kDouble_FlagType: |
| 328 return SkString("double"); | 324 return SkString("double"); |
| 329 default: | 325 default: |
| 330 SkASSERT(!"Invalid flag type"); | 326 SkASSERT(!"Invalid flag type"); |
| 331 return SkString(); | 327 return SkString(); |
| 332 } | 328 } |
| 333 } | 329 } |
| 334 | 330 |
| 335 private: | 331 private: |
| 336 SkFlagInfo(const char* name, FlagTypes type, const char* helpString) | 332 SkFlagInfo(const char* name, const char* shortName, FlagTypes type, const ch ar* helpString) |
| 337 : fName(name) | 333 : fName(name) |
| 334 , fShortName(shortName) | |
| 338 , fFlagType(type) | 335 , fFlagType(type) |
| 339 , fHelpString(helpString) | 336 , fHelpString(helpString) |
| 340 , fBoolValue(NULL) | 337 , fBoolValue(NULL) |
| 341 , fDefaultBool(false) | 338 , fDefaultBool(false) |
| 342 , fIntValue(NULL) | 339 , fIntValue(NULL) |
| 343 , fDefaultInt(0) | 340 , fDefaultInt(0) |
| 344 , fDoubleValue(NULL) | 341 , fDoubleValue(NULL) |
| 345 , fDefaultDouble(0) | 342 , fDefaultDouble(0) |
| 346 , fStrings(NULL) { | 343 , fStrings(NULL) { |
| 347 fNext = SkCommandLineFlags::gHead; | 344 fNext = SkCommandLineFlags::gHead; |
| 348 SkCommandLineFlags::gHead = this; | 345 SkCommandLineFlags::gHead = this; |
| 346 SkASSERT(NULL != name && strlen(name) > 1); | |
| 347 SkASSERT(NULL == shortName || 1 == strlen(shortName)); | |
| 349 } | 348 } |
| 350 // Name of the flag, without initial dashes | 349 // Name of the flag, without initial dashes |
| 351 SkString fName; | 350 SkString fName; |
| 352 SkString fShortName; | 351 SkString fShortName; |
| 353 FlagTypes fFlagType; | 352 FlagTypes fFlagType; |
| 354 SkString fHelpString; | 353 SkString fHelpString; |
| 355 bool* fBoolValue; | 354 bool* fBoolValue; |
| 356 bool fDefaultBool; | 355 bool fDefaultBool; |
| 357 int32_t* fIntValue; | 356 int32_t* fIntValue; |
| 358 int32_t fDefaultInt; | 357 int32_t fDefaultInt; |
| 359 double* fDoubleValue; | 358 double* fDoubleValue; |
| 360 double fDefaultDouble; | 359 double fDefaultDouble; |
| 361 SkTDArray<const char*>* fStrings; | 360 SkTDArray<const char*>* fStrings; |
| 362 // Both for the help string and in case fStrings is empty. | 361 // Both for the help string and in case fStrings is empty. |
| 363 SkString fDefaultString; | 362 SkString fDefaultString; |
| 364 | 363 |
| 365 // In order to keep a linked list. | 364 // In order to keep a linked list. |
| 366 SkFlagInfo* fNext; | 365 SkFlagInfo* fNext; |
| 367 }; | 366 }; |
| 368 #endif // SK_COMMAND_LINE_FLAGS_H | 367 #endif // SK_COMMAND_LINE_FLAGS_H |
| OLD | NEW |