From 91ab2ee9ba0306e561796357fdc38c3078912614 Mon Sep 17 00:00:00 2001 From: Thomas Goyne Date: Tue, 11 Oct 2011 00:06:34 +0000 Subject: [PATCH] Make option names not dumb and wrong Originally committed to SVN as r5731. --- aegisub/libaegisub/common/option.cpp | 7 ++--- aegisub/libaegisub/common/option_visit.cpp | 30 +++++----------------- 2 files changed, 9 insertions(+), 28 deletions(-) diff --git a/aegisub/libaegisub/common/option.cpp b/aegisub/libaegisub/common/option.cpp index 5460f37fd..b1d6d9f93 100644 --- a/aegisub/libaegisub/common/option.cpp +++ b/aegisub/libaegisub/common/option.cpp @@ -40,15 +40,14 @@ namespace agi { -Options::Options(const std::string &file, const std::string& default_config, const OptionSetting setting): - config_file(file), config_default(default_config), config_loaded(false), setting(setting) { +Options::Options(const std::string &file, const std::string& default_config, const OptionSetting setting) +: config_file(file), config_default(default_config), config_loaded(false), setting(setting) { LOG_D("agi/options") << "New Options object"; std::istringstream stream(default_config); LoadConfig(stream); } Options::~Options() { - if ((setting & FLUSH_SKIP) != FLUSH_SKIP) { Flush(); } @@ -114,8 +113,6 @@ void Options::Flush() { json::Object obj_out; for (OptionValueMap::const_iterator i = values.begin(); i != values.end(); ++i) { - std::string key = i->first.substr(i->first.rfind("/")+1, i->first.size()); - switch (i->second->GetType()) { case OptionValue::Type_String: PutOption(obj_out, i->first, (json::String)i->second->GetString()); diff --git a/aegisub/libaegisub/common/option_visit.cpp b/aegisub/libaegisub/common/option_visit.cpp index 868b97ca6..3a83ea23f 100644 --- a/aegisub/libaegisub/common/option_visit.cpp +++ b/aegisub/libaegisub/common/option_visit.cpp @@ -32,13 +32,16 @@ namespace agi { ConfigVisitor::ConfigVisitor(OptionValueMap &val, const std::string &member_name) : values(val) -, name(member_name + "/") +, name(member_name) { } void ConfigVisitor::Visit(const json::Object& object) { json::Object::const_iterator index(object.Begin()), index_end(object.End()); + if (!name.empty()) + name += "/"; + for (; index != index_end; ++index) { const json::Object::Member& member = *index; const std::string &member_name = member.name; @@ -50,16 +53,12 @@ void ConfigVisitor::Visit(const json::Object& object) { } } - void ConfigVisitor::Visit(const json::Array& array) { - bool init = false; - OptionValueList *array_list = NULL; json::Array::const_iterator index(array.Begin()), indexEnd(array.End()); for (; index != indexEnd; ++index) { - const json::Object& index_array = *index; json::Object::const_iterator index_object(index_array.Begin()), index_objectEnd(index_array.End()); @@ -68,10 +67,9 @@ void ConfigVisitor::Visit(const json::Array& array) { const json::Object::Member& member = *index_object; const std::string& member_name = member.name; - // This can only happen once since a list must always be of the same // type, if we try inserting another type into it we want it to fail. - if (!init) { + if (!array_list) { if (member_name == "string") { array_list = new OptionValueListString(name); } else if (member_name == "int") { @@ -85,7 +83,6 @@ void ConfigVisitor::Visit(const json::Array& array) { } else { throw OptionJsonValueArray("Array type not handled"); } - init = true; } try { @@ -114,13 +111,10 @@ void ConfigVisitor::Visit(const json::Array& array) { delete array_list; throw OptionJsonValueArray("Attempt to insert value into array of wrong type"); } - } // for index_object - } // for index if (array_list) AddOptionValue(array_list); - } @@ -134,10 +128,8 @@ void ConfigVisitor::Visit(const json::Number& number) { OptionValue *opt = new OptionValueDouble(name, val); AddOptionValue(opt); } - } - void ConfigVisitor::Visit(const json::String& string) { OptionValue *opt; if (string.Value().find("rgb(") == 0) { @@ -148,29 +140,24 @@ void ConfigVisitor::Visit(const json::String& string) { AddOptionValue(opt); } - void ConfigVisitor::Visit(const json::Boolean& boolean) { OptionValue *opt = new OptionValueBool(name, boolean.Value()); AddOptionValue(opt); } - void ConfigVisitor::Visit(const json::Null& null) { throw OptionJsonValueNull("Attempt to read null value"); } - void ConfigVisitor::AddOptionValue(OptionValue* opt) { - // Corresponding code is in the constuctor. - std::string stripped = name.substr(1, name.rfind("/")-1); OptionValue *opt_cur; OptionValueMap::iterator index; - if ((index = values.find(stripped)) != values.end()) { + if ((index = values.find(name)) != values.end()) { opt_cur = index->second; } else { - values.insert(OptionValuePair(stripped, opt)); + values.insert(OptionValuePair(name, opt)); return; } @@ -228,7 +215,6 @@ void ConfigVisitor::AddOptionValue(OptionValue* opt) { break; } - case OptionValue::Type_List_Bool: { std::vector array; opt->GetListBool(array); @@ -236,7 +222,5 @@ void ConfigVisitor::AddOptionValue(OptionValue* opt) { break; } } - } - } // namespace agi