summaryrefslogtreecommitdiff
path: root/src/feature.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/feature.cc')
-rw-r--r--src/feature.cc37
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++) {
contact: Jan Huwald // Impressum