Index: src/core/SkFlattenable.cpp |
diff --git a/src/core/SkFlattenable.cpp b/src/core/SkFlattenable.cpp |
index b4efe91004845cb3b00ebfc8b6d3d1131374fce7..4a096ee060f5021b26e041ad2e2beac7c3e20caa 100644 |
--- a/src/core/SkFlattenable.cpp |
+++ b/src/core/SkFlattenable.cpp |
@@ -65,19 +65,25 @@ void SkRefCntSet::decPtr(void* ptr) { |
#define MAX_PAIR_COUNT 1024 |
+struct FlattenableInfo { |
+ SkFlattenable::Factory fFactory; |
+ SkFlattenable::TypeCheck fTypeCheck; |
+}; |
+ |
struct Pair { |
- const char* fName; |
- SkFlattenable::Factory fFactory; |
+ const char* fName; |
+ FlattenableInfo fInfo; |
}; |
mtklein
2013/10/07 19:29:56
Why not merge this together?
struct Entry {
con
sugoi1
2013/10/08 20:23:10
Done.
|
static int gCount; |
static Pair gPairs[MAX_PAIR_COUNT]; |
-void SkFlattenable::Register(const char name[], Factory factory) { |
+void SkFlattenable::Register(const char name[], Factory factory, TypeCheck typeCheck) { |
SkASSERT(name); |
SkASSERT(factory); |
+ SkASSERT(typeCheck); |
- static bool gOnce; |
+ static bool gOnce = false; |
if (!gOnce) { |
gCount = 0; |
gOnce = true; |
@@ -86,7 +92,8 @@ void SkFlattenable::Register(const char name[], Factory factory) { |
SkASSERT(gCount < MAX_PAIR_COUNT); |
gPairs[gCount].fName = name; |
- gPairs[gCount].fFactory = factory; |
+ gPairs[gCount].fInfo.fFactory = factory; |
+ gPairs[gCount].fInfo.fTypeCheck = typeCheck; |
gCount += 1; |
} |
@@ -101,25 +108,41 @@ static void report_no_entries(const char* functionName) { |
#endif |
SkFlattenable::Factory SkFlattenable::NameToFactory(const char name[]) { |
+ InitializeFlattenables(); |
sugoi1
2013/10/07 15:54:08
Initialization is now "on demand", so any usage of
|
+#ifdef SK_DEBUG |
+ report_no_entries(__FUNCTION__); |
+#endif |
+ const Pair* pairs = gPairs; |
+ for (int i = gCount - 1; i >= 0; --i) { |
+ if (strcmp(pairs[i].fName, name) == 0) { |
+ return pairs[i].fInfo.fFactory; |
+ } |
+ } |
+ return NULL; |
+} |
+ |
+SkFlattenable::TypeCheck SkFlattenable::NameToTypeCheck(const char name[]) { |
+ InitializeFlattenables(); |
mtklein
2013/10/07 19:29:56
Shall we take the opportunity to rename it Initial
sugoi1
2013/10/08 20:23:10
Done.
|
#ifdef SK_DEBUG |
report_no_entries(__FUNCTION__); |
#endif |
const Pair* pairs = gPairs; |
for (int i = gCount - 1; i >= 0; --i) { |
if (strcmp(pairs[i].fName, name) == 0) { |
- return pairs[i].fFactory; |
+ return pairs[i].fInfo.fTypeCheck; |
} |
} |
return NULL; |
} |
const char* SkFlattenable::FactoryToName(Factory fact) { |
+ InitializeFlattenables(); |
#ifdef SK_DEBUG |
report_no_entries(__FUNCTION__); |
#endif |
const Pair* pairs = gPairs; |
for (int i = gCount - 1; i >= 0; --i) { |
- if (pairs[i].fFactory == fact) { |
+ if (pairs[i].fInfo.fFactory == fact) { |
return pairs[i].fName; |
} |
} |