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

Side by Side Diff: tools/SkFlags.h

Issue 12961003: Allow more options for setting boolean flag values in SkFlags. (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | tools/SkFlags.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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_FLAGS_H 8 #ifndef SK_FLAGS_H
9 #define SK_FLAGS_H 9 #define SK_FLAGS_H
10 10
(...skipping 19 matching lines...) Expand all
30 * For example, the line 30 * For example, the line
31 * 31 *
32 * DEFINE_bool(boolean, false, "The variable boolean does such and such"); 32 * DEFINE_bool(boolean, false, "The variable boolean does such and such");
33 * 33 *
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. (Single dashes are also permitted for this and other flags.) The 40 * to false. FLAGS_boolean can also be set using "--boolean=true" or
41 * helpString will be printed if the help flag (-h or -help) is used. 41 * "--boolean true" (where "true" can be replaced by "false", "TRUE", "FALSE",
42 * "1" or "0").
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.
42 * 47 *
43 * Similarly, the line 48 * Similarly, the line
44 * 49 *
45 * DEFINE_int32(integer, .., ..); 50 * DEFINE_int32(integer, .., ..);
46 * 51 *
47 * will create 52 * will create
48 * 53 *
49 * int32_t FLAGS_integer; 54 * int32_t FLAGS_integer;
50 * 55 *
51 * and 56 * and
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 225
221 static bool CreateDoubleFlag(const char* name, double* pDouble, 226 static bool CreateDoubleFlag(const char* name, double* pDouble,
222 double defaultValue, const char* helpString) { 227 double defaultValue, const char* helpString) {
223 SkFlagInfo* info = SkNEW_ARGS(SkFlagInfo, (name, kDouble_FlagType, helpS tring)); 228 SkFlagInfo* info = SkNEW_ARGS(SkFlagInfo, (name, kDouble_FlagType, helpS tring));
224 info->fDoubleValue = pDouble; 229 info->fDoubleValue = pDouble;
225 *info->fDoubleValue = info->fDefaultDouble = defaultValue; 230 *info->fDoubleValue = info->fDefaultDouble = defaultValue;
226 return true; 231 return true;
227 } 232 }
228 233
229 /** 234 /**
230 * Returns true if the string matches this flag. For a bool, also sets the 235 * Returns true if the string matches this flag.
231 * value, since a bool is specified as true or false by --name or --noname. 236 * 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:
238 * --name
239 * --noname
240 * --name=true
241 * --name=false
242 * --name=1
243 * --name=0
244 * --name=TRUE
245 * --name=FALSE
232 */ 246 */
233 bool match(const char* string) { 247 bool match(const char* string);
234 if (SkStrStartsWith(string, '-') && strlen(string) > 1) {
235 string++;
236 // Allow one or two dashes
237 if (SkStrStartsWith(string, '-') && strlen(string) > 1) {
238 string++;
239 }
240 if (kBool_FlagType == fFlagType) {
241 // In this case, go ahead and set the value.
242 if (fName.equals(string) || fShortName.equals(string)) {
243 *fBoolValue = true;
244 return true;
245 }
246 if (SkStrStartsWith(string, "no") && strlen(string) > 2) {
247 string += 2;
248 if (fName.equals(string) || fShortName.equals(string)) {
249 *fBoolValue = false;
250 return true;
251 }
252 return false;
253 }
254 }
255 return fName.equals(string) || fShortName.equals(string);
256 } else {
257 // Has no dash
258 return false;
259 }
260 return false;
261 }
262 248
263 FlagTypes getFlagType() const { return fFlagType; } 249 FlagTypes getFlagType() const { return fFlagType; }
264 250
265 void resetStrings() { 251 void resetStrings() {
266 if (kString_FlagType == fFlagType) { 252 if (kString_FlagType == fFlagType) {
267 fStrings->reset(); 253 fStrings->reset();
268 } else { 254 } else {
269 SkASSERT(!"Can only call resetStrings on kString_FlagType"); 255 SkASSERT(!"Can only call resetStrings on kString_FlagType");
270 } 256 }
271 } 257 }
(...skipping 15 matching lines...) Expand all
287 } 273 }
288 274
289 void setDouble(double value) { 275 void setDouble(double value) {
290 if (kDouble_FlagType == fFlagType) { 276 if (kDouble_FlagType == fFlagType) {
291 *fDoubleValue = value; 277 *fDoubleValue = value;
292 } else { 278 } else {
293 SkASSERT(!"Can only call setDouble on kDouble_FlagType"); 279 SkASSERT(!"Can only call setDouble on kDouble_FlagType");
294 } 280 }
295 } 281 }
296 282
283 void setBool(bool value) {
284 if (kBool_FlagType == fFlagType) {
285 *fBoolValue = value;
286 } else {
287 SkASSERT(!"Can only call setBool on kBool_FlagType");
288 }
289 }
290
297 SkFlagInfo* next() { return fNext; } 291 SkFlagInfo* next() { return fNext; }
298 292
299 const SkString& name() const { return fName; } 293 const SkString& name() const { return fName; }
300 294
301 const SkString& shortName() const { return fShortName; } 295 const SkString& shortName() const { return fShortName; }
302 296
303 const SkString& help() const { return fHelpString; } 297 const SkString& help() const { return fHelpString; }
304 298
305 SkString defaultValue() const { 299 SkString defaultValue() const {
306 SkString result; 300 SkString result;
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
365 double* fDoubleValue; 359 double* fDoubleValue;
366 double fDefaultDouble; 360 double fDefaultDouble;
367 SkTDArray<const char*>* fStrings; 361 SkTDArray<const char*>* fStrings;
368 // Both for the help string and in case fStrings is empty. 362 // Both for the help string and in case fStrings is empty.
369 SkString fDefaultString; 363 SkString fDefaultString;
370 364
371 // In order to keep a linked list. 365 // In order to keep a linked list.
372 SkFlagInfo* fNext; 366 SkFlagInfo* fNext;
373 }; 367 };
374 #endif // SK_FLAGS_H 368 #endif // SK_FLAGS_H
OLDNEW
« no previous file with comments | « no previous file | tools/SkFlags.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698