diff options
Diffstat (limited to 'src/feature.cc')
-rw-r--r-- | src/feature.cc | 37 |
1 files changed, 26 insertions, 11 deletions
diff --git a/src/feature.cc b/src/feature.cc index 5beece1..7f36547 100644 --- a/src/feature.cc +++ b/src/feature.cc @@ -4,23 +4,26 @@ #include <map> #include "feature.h" +#include "printutils.h" /** - * Feature registration map for later lookup. This must be initialized + * Feature registration map/list for later lookup. This must be initialized * before the static feature instances as those register with this map. */ -std::map<std::string, Feature *> Feature::feature_map; +Feature::map_t Feature::feature_map; +Feature::list_t Feature::feature_list; /* * List of features, the names given here are used in both command line * argument to enable the option and for saving the option value in GUI * context. */ -const Feature Feature::ExperimentalConcatFunction("concat"); +const Feature Feature::ExperimentalConcatFunction("experimental/concat-function", "Enable the <code>concat()</code> function."); -Feature::Feature(std::string name) : enabled_cmdline(false), enabled_options(false), name(name) +Feature::Feature(const std::string name, const std::string description) : enabled_cmdline(false), enabled_options(false), name(name), description(description) { feature_map[name] = this; + feature_list.push_back(this); } Feature::~Feature() @@ -32,6 +35,11 @@ const std::string& Feature::get_name() const return name; } +const std::string& Feature::get_description() const +{ + return description; +} + void Feature::set_enable_cmdline() { enabled_cmdline = true; @@ -49,15 +57,10 @@ bool Feature::is_enabled() const } return enabled_options; } - -bool operator ==(const Feature& lhs, const Feature& rhs) -{ - return lhs.get_name() == rhs.get_name(); -} -bool operator !=(const Feature& lhs, const Feature& rhs) +void Feature::enable(bool status) { - return !(lhs == rhs); + set_enable_options(status); } void Feature::enable_feature(std::string feature_name) @@ -65,6 +68,8 @@ void Feature::enable_feature(std::string feature_name) map_t::iterator it = feature_map.find(feature_name); if (it != feature_map.end()) { (*it).second->set_enable_cmdline(); + } else { + PRINTB("WARNING: Ignoring request to enable unknown feature '%s'.", feature_name); } } @@ -76,6 +81,16 @@ void Feature::enable_feature(std::string feature_name, bool status) } } +Feature::iterator Feature::begin() +{ + return feature_list.begin(); +} + +Feature::iterator Feature::end() +{ + return feature_list.end(); +} + void Feature::dump_features() { for (map_t::iterator it = feature_map.begin(); it != feature_map.end(); it++) { |