From cdc73b17d2b5f2441502ca40bf539cf1da1ad0f5 Mon Sep 17 00:00:00 2001 From: Amar Takhar Date: Tue, 4 Jan 2011 04:24:40 +0000 Subject: [PATCH] Add support for bitmask options to Options. First one is to avoid flushing the config to disk which we don't want to happen when the reporter uses Options to read config values. Originally committed to SVN as r5123. --- aegisub/libaegisub/common/option.cpp | 10 +++++++--- aegisub/libaegisub/include/libaegisub/option.h | 13 ++++++++++++- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/aegisub/libaegisub/common/option.cpp b/aegisub/libaegisub/common/option.cpp index 071f82209..87f232d37 100644 --- a/aegisub/libaegisub/common/option.cpp +++ b/aegisub/libaegisub/common/option.cpp @@ -37,15 +37,19 @@ namespace agi { -Options::Options(const std::string &file, const std::string& default_config): - config_file(file), config_default(default_config), config_loaded(false) { +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() { - Flush(); + + if ((setting & FLUSH_SKIP) != FLUSH_SKIP) { + Flush(); + } + for (OptionValueMap::iterator i = values.begin(); i != values.end(); i++) { delete i->second; } diff --git a/aegisub/libaegisub/include/libaegisub/option.h b/aegisub/libaegisub/include/libaegisub/option.h index e9712c67e..1c4f81387 100644 --- a/aegisub/libaegisub/include/libaegisub/option.h +++ b/aegisub/libaegisub/include/libaegisub/option.h @@ -52,6 +52,14 @@ public: class Options { friend class PutOptionVisitor; +public: + /// Options class settings. + enum OptionSetting { + NONE = 0x000, ///< Do nothing (default) + FLUSH_SKIP = 0x001, ///< Skip writing the config file to disk + }; + +private: /// Internal OptionValueMap OptionValueMap values; @@ -68,6 +76,9 @@ class Options { /// Whether the user (final) config has been loaded bool config_loaded; + /// Settings. + const OptionSetting setting; + /// @brief Load a config file into the Options object. /// @param config Config to load. void LoadConfig(std::istream& stream); @@ -85,7 +96,7 @@ public: /// @brief Constructor /// @param file User config that will be loaded from and written back to. /// @param default_config Default configuration. - Options(const std::string &file, const std::string &default_config); + Options(const std::string &file, const std::string &default_config, const OptionSetting setting=NONE); /// Destructor ~Options();