Index: src/utils/SkRTConf.cpp |
diff --git a/src/utils/SkRTConf.cpp b/src/utils/SkRTConf.cpp |
deleted file mode 100644 |
index 2dfa47efc71015c12864d3ae585dd681dd027075..0000000000000000000000000000000000000000 |
--- a/src/utils/SkRTConf.cpp |
+++ /dev/null |
@@ -1,325 +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 "SkRTConf.h" |
-#include "SkOSFile.h" |
- |
-#include <stdlib.h> |
- |
-SkRTConfRegistry::SkRTConfRegistry(): fConfs(100) { |
- |
- FILE *fp = sk_fopen(configFileLocation(), kRead_SkFILE_Flag); |
- |
- if (!fp) { |
- return; |
- } |
- |
- char line[1024]; |
- |
- while (!sk_feof(fp)) { |
- |
- if (!sk_fgets(line, sizeof(line), fp)) { |
- break; |
- } |
- |
- char *commentptr = strchr(line, '#'); |
- if (commentptr == line) { |
- continue; |
- } |
- if (commentptr) { |
- *commentptr = '\0'; |
- } |
- |
- char sep[] = " \t\r\n"; |
- |
- char *keyptr = strtok(line, sep); |
- if (!keyptr) { |
- continue; |
- } |
- |
- char *valptr = strtok(nullptr, sep); |
- if (!valptr) { |
- continue; |
- } |
- |
- SkString *key = new SkString(keyptr); |
- SkString *val = new SkString(valptr); |
- |
- fConfigFileKeys.append(1, &key); |
- fConfigFileValues.append(1, &val); |
- } |
- sk_fclose(fp); |
-} |
- |
-SkRTConfRegistry::~SkRTConfRegistry() { |
- ConfMap::Iter iter(fConfs); |
- SkTDArray<SkRTConfBase *> *confArray; |
- |
- while (iter.next(&confArray)) { |
- delete confArray; |
- } |
- |
- for (int i = 0 ; i < fConfigFileKeys.count() ; i++) { |
- delete fConfigFileKeys[i]; |
- delete fConfigFileValues[i]; |
- } |
-} |
- |
-const char *SkRTConfRegistry::configFileLocation() const { |
- return "skia.conf"; // for now -- should probably do something fancier like home directories or whatever. |
-} |
- |
-// dump all known runtime config options to the file with their default values. |
-// to trigger this, make a config file of zero size. |
-void SkRTConfRegistry::possiblyDumpFile() const { |
- const char *path = configFileLocation(); |
- FILE *fp = sk_fopen(path, kRead_SkFILE_Flag); |
- if (!fp) { |
- return; |
- } |
- size_t configFileSize = sk_fgetsize(fp); |
- if (configFileSize == 0) { |
- printAll(path); |
- } |
- sk_fclose(fp); |
-} |
- |
-// Run through every provided configuration option and print a warning if the user hasn't |
-// declared a correponding configuration object somewhere. |
-void SkRTConfRegistry::validate() const { |
- for (int i = 0 ; i < fConfigFileKeys.count() ; i++) { |
- if (!fConfs.find(fConfigFileKeys[i]->c_str())) { |
- SkDebugf("WARNING: You have config value %s in your configuration file, but I've never heard of that.\n", fConfigFileKeys[i]->c_str()); |
- } |
- } |
-} |
- |
-void SkRTConfRegistry::printAll(const char *fname) const { |
- SkWStream *o; |
- |
- if (fname) { |
- o = new SkFILEWStream(fname); |
- } else { |
- o = new SkDebugWStream(); |
- } |
- |
- ConfMap::Iter iter(fConfs); |
- SkTDArray<SkRTConfBase *> *confArray; |
- |
- while (iter.next(&confArray)) { |
- if (confArray->getAt(0)->isDefault()) { |
- o->writeText("# "); |
- } |
- confArray->getAt(0)->print(o); |
- o->newline(); |
- } |
- |
- delete o; |
-} |
- |
-bool SkRTConfRegistry::hasNonDefault() const { |
- ConfMap::Iter iter(fConfs); |
- SkTDArray<SkRTConfBase *> *confArray; |
- while (iter.next(&confArray)) { |
- if (!confArray->getAt(0)->isDefault()) { |
- return true; |
- } |
- } |
- return false; |
-} |
- |
-void SkRTConfRegistry::printNonDefault(const char *fname) const { |
- SkWStream *o; |
- |
- if (fname) { |
- o = new SkFILEWStream(fname); |
- } else { |
- o = new SkDebugWStream(); |
- } |
- ConfMap::Iter iter(fConfs); |
- SkTDArray<SkRTConfBase *> *confArray; |
- |
- while (iter.next(&confArray)) { |
- if (!confArray->getAt(0)->isDefault()) { |
- confArray->getAt(0)->print(o); |
- o->newline(); |
- } |
- } |
- |
- delete o; |
-} |
- |
-// register a configuration variable after its value has been set by the parser. |
-// we maintain a vector of these things instead of just a single one because the |
-// user might set the value after initialization time and we need to have |
-// all the pointers lying around, not just one. |
-void SkRTConfRegistry::registerConf(SkRTConfBase *conf) { |
- SkTDArray<SkRTConfBase *> *confArray; |
- if (fConfs.find(conf->getName(), &confArray)) { |
- if (!conf->equals(confArray->getAt(0))) { |
- SkDebugf("WARNING: Skia config \"%s\" was registered more than once in incompatible ways.\n", conf->getName()); |
- } else { |
- confArray->append(1, &conf); |
- } |
- } else { |
- confArray = new SkTDArray<SkRTConfBase *>; |
- confArray->append(1, &conf); |
- fConfs.set(conf->getName(),confArray); |
- } |
-} |
- |
-template <typename T> T doParse(const char *, bool *success ) { |
- SkDebugf("WARNING: Invoked non-specialized doParse function...\n"); |
- if (success) { |
- *success = false; |
- } |
- return (T) 0; |
-} |
- |
-template<> bool doParse<bool>(const char *s, bool *success) { |
- if (success) { |
- *success = true; |
- } |
- if (!strcmp(s,"1") || !strcmp(s,"true")) { |
- return true; |
- } |
- if (!strcmp(s,"0") || !strcmp(s,"false")) { |
- return false; |
- } |
- if (success) { |
- *success = false; |
- } |
- return false; |
-} |
- |
-template<> const char * doParse<const char *>(const char * s, bool *success) { |
- if (success) { |
- *success = true; |
- } |
- return s; |
-} |
- |
-template<> int doParse<int>(const char * s, bool *success) { |
- if (success) { |
- *success = true; |
- } |
- return atoi(s); |
-} |
- |
-template<> unsigned int doParse<unsigned int>(const char * s, bool *success) { |
- if (success) { |
- *success = true; |
- } |
- return (unsigned int) atoi(s); |
-} |
- |
-template<> float doParse<float>(const char * s, bool *success) { |
- if (success) { |
- *success = true; |
- } |
- return (float) atof(s); |
-} |
- |
-template<> double doParse<double>(const char * s, bool *success) { |
- if (success) { |
- *success = true; |
- } |
- return atof(s); |
-} |
- |
-static inline void str_replace(char *s, char search, char replace) { |
- for (char *ptr = s ; *ptr ; ptr++) { |
- if (*ptr == search) { |
- *ptr = replace; |
- } |
- } |
-} |
- |
-template<typename T> bool SkRTConfRegistry::parse(const char *name, T* value) { |
- const char *str = nullptr; |
- |
- for (int i = fConfigFileKeys.count() - 1 ; i >= 0; i--) { |
- if (fConfigFileKeys[i]->equals(name)) { |
- str = fConfigFileValues[i]->c_str(); |
- break; |
- } |
- } |
- |
- SkString environment_variable("skia."); |
- environment_variable.append(name); |
- |
- const char *environment_value = getenv(environment_variable.c_str()); |
- if (environment_value) { |
- str = environment_value; |
- } else { |
- // apparently my shell doesn't let me have environment variables that |
- // have periods in them, so also let the user substitute underscores. |
- SkAutoTMalloc<char> underscore_name(SkStrDup(environment_variable.c_str())); |
- str_replace(underscore_name.get(), '.', '_'); |
- environment_value = getenv(underscore_name.get()); |
- if (environment_value) { |
- str = environment_value; |
- } |
- } |
- |
- if (!str) { |
- return false; |
- } |
- |
- bool success; |
- T new_value = doParse<T>(str, &success); |
- if (success) { |
- *value = new_value; |
- } else { |
- SkDebugf("WARNING: Couldn't parse value \'%s\' for variable \'%s\'\n", |
- str, name); |
- } |
- return success; |
-} |
- |
-// need to explicitly instantiate the parsing function for every config type we might have... |
- |
-template bool SkRTConfRegistry::parse(const char *name, bool *value); |
-template bool SkRTConfRegistry::parse(const char *name, int *value); |
-template bool SkRTConfRegistry::parse(const char *name, unsigned int *value); |
-template bool SkRTConfRegistry::parse(const char *name, float *value); |
-template bool SkRTConfRegistry::parse(const char *name, double *value); |
-template bool SkRTConfRegistry::parse(const char *name, const char **value); |
- |
-template <typename T> void SkRTConfRegistry::set(const char *name, |
- T value, |
- bool warnIfNotFound) { |
- SkTDArray<SkRTConfBase *> *confArray; |
- if (!fConfs.find(name, &confArray)) { |
- if (warnIfNotFound) { |
- SkDebugf("WARNING: Attempting to set configuration value \"%s\"," |
- " but I've never heard of that.\n", name); |
- } |
- return; |
- } |
- SkASSERT(confArray != nullptr); |
- for (SkRTConfBase **confBase = confArray->begin(); confBase != confArray->end(); confBase++) { |
- // static_cast here is okay because there's only one kind of child class. |
- SkRTConf<T> *concrete = static_cast<SkRTConf<T> *>(*confBase); |
- |
- if (concrete) { |
- concrete->set(value); |
- } |
- } |
-} |
- |
-template void SkRTConfRegistry::set(const char *name, bool value, bool); |
-template void SkRTConfRegistry::set(const char *name, int value, bool); |
-template void SkRTConfRegistry::set(const char *name, unsigned int value, bool); |
-template void SkRTConfRegistry::set(const char *name, float value, bool); |
-template void SkRTConfRegistry::set(const char *name, double value, bool); |
-template void SkRTConfRegistry::set(const char *name, char * value, bool); |
- |
-SkRTConfRegistry &skRTConfRegistry() { |
- static SkRTConfRegistry r; |
- return r; |
-} |