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

Unified Diff: tools/flags/SkCommandLineFlags.h

Issue 14414008: Fix an SkCommandLineFlags bug. (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Created 7 years, 8 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 | « gm/gmmain.cpp ('k') | tools/flags/SkCommandLineFlags.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/flags/SkCommandLineFlags.h
diff --git a/tools/flags/SkCommandLineFlags.h b/tools/flags/SkCommandLineFlags.h
index c705948348d1d28210ade06eaeb16d8beba6d6cb..08fd3a2ba5974447489db7f5e18712bbde71e7cc 100644
--- a/tools/flags/SkCommandLineFlags.h
+++ b/tools/flags/SkCommandLineFlags.h
@@ -9,7 +9,7 @@
#define SK_COMMAND_LINE_FLAGS_H
#include "SkString.h"
-#include "SkTDArray.h"
+#include "SkTArray.h"
/**
* Including this file (and compiling SkCommandLineFlags.cpp) provides command line
@@ -68,7 +68,7 @@
*
* creates an array:
*
- * SkTDArray<const char*> FLAGS_args;
+ * SkCommandLineFlags::StringArray FLAGS_args;
*
* If the default value is the empty string, FLAGS_args will default to a size
* of zero. Otherwise it will default to a size of 1 with the default string
@@ -108,6 +108,35 @@ public:
*/
static void Parse(int argc, char** argv);
+ /**
+ * Custom class for holding the arguments for a string flag.
+ * Publicly only has accessors so the strings cannot be modified.
+ */
+ class StringArray {
+ public:
+ const char* operator[](int i) const {
+ SkASSERT(i >= 0 && i < fStrings.count());
+ return fStrings[i].c_str();
+ }
+
+ int count() const {
+ return fStrings.count();
+ }
+
+ bool isEmpty() const { return this->count() == 0; }
+
+ private:
+ void reset() { fStrings.reset(); }
+
+ void append(const char* string) {
+ fStrings.push_back().set(string);
+ }
+
+ SkTArray<SkString> fStrings;
+
+ friend class SkFlagInfo;
+ };
+
private:
static SkFlagInfo* gHead;
static SkString gUsage;
@@ -140,7 +169,7 @@ static bool unused_##name = SkFlagInfo::CreateBoolFlag(TO_STRING(name), \
#define DECLARE_bool(name) extern bool FLAGS_##name;
#define DEFINE_string(name, defaultValue, helpString) \
-SkTDArray<const char*> FLAGS_##name; \
+SkCommandLineFlags::StringArray FLAGS_##name; \
static bool unused_##name = SkFlagInfo::CreateStringFlag(TO_STRING(name), \
NULL, \
&FLAGS_##name, \
@@ -150,14 +179,14 @@ static bool unused_##name = SkFlagInfo::CreateStringFlag(TO_STRING(name), \
// string2 allows specifying a short name. There is an assert that shortName
// is only 1 character.
#define DEFINE_string2(name, shortName, defaultValue, helpString) \
-SkTDArray<const char*> FLAGS_##name; \
+SkCommandLineFlags::StringArray FLAGS_##name; \
static bool unused_##name = SkFlagInfo::CreateStringFlag(TO_STRING(name), \
TO_STRING(shortName), \
&FLAGS_##name, \
defaultValue, \
helpString)
-#define DECLARE_string(name) extern SkTDArray<const char*> FLAGS_##name;
+#define DECLARE_string(name) extern SkCommandLineFlags::StringArray FLAGS_##name;
#define DEFINE_int32(name, defaultValue, helpString) \
int32_t FLAGS_##name; \
@@ -197,7 +226,7 @@ public:
}
static bool CreateStringFlag(const char* name, const char* shortName,
- SkTDArray<const char*>* pStrings,
+ SkCommandLineFlags::StringArray* pStrings,
const char* defaultValue, const char* helpString) {
SkFlagInfo* info = SkNEW_ARGS(SkFlagInfo, (name, shortName, kString_FlagType, helpString));
info->fDefaultString.set(defaultValue);
@@ -206,7 +235,7 @@ public:
info->fStrings->reset();
// If default is "", leave the array empty.
if (info->fDefaultString.size() > 0) {
- info->fStrings->append(1, &defaultValue);
+ info->fStrings->append(defaultValue);
}
return true;
}
@@ -254,7 +283,7 @@ public:
void append(const char* string) {
if (kString_FlagType == fFlagType) {
- fStrings->append(1, &string);
+ fStrings->append(string);
} else {
SkASSERT(!"Can only append to kString_FlagType");
}
@@ -357,7 +386,7 @@ private:
int32_t fDefaultInt;
double* fDoubleValue;
double fDefaultDouble;
- SkTDArray<const char*>* fStrings;
+ SkCommandLineFlags::StringArray* fStrings;
// Both for the help string and in case fStrings is empty.
SkString fDefaultString;
« no previous file with comments | « gm/gmmain.cpp ('k') | tools/flags/SkCommandLineFlags.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698