From 65cdff288fa97a819958ffdd53632bcb0e511504 Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Thu, 1 Jun 2017 01:54:17 +0200 Subject: [PATCH] Configuration list keys --- src/utils/configuration.cpp | 12 ++++++++++++ src/utils/pv/configuration.h | 15 +++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/src/utils/configuration.cpp b/src/utils/configuration.cpp index b0f75eb..d715424 100644 --- a/src/utils/configuration.cpp +++ b/src/utils/configuration.cpp @@ -110,6 +110,12 @@ bool ConfigurationMap::tryGetPropertyAsString(const std::string& name, std::stri return true; } +void ConfigurationMap::addKeys(keys_t& names) const +{ + for(properties_t::const_iterator it=properties.begin(); it!=properties.end(); ++it) + names.insert(it->first); +} + bool ConfigurationEnviron::tryGetPropertyAsString(const std::string& name, std::string* val) const { const char *env = getenv(name.c_str()); @@ -132,6 +138,12 @@ bool ConfigurationStack::tryGetPropertyAsString(const std::string& name, std::st return false; } +void ConfigurationStack::addKeys(keys_t& names) const +{ + for(confs_t::const_iterator it=confs.begin(); it!=confs.end(); ++it) + (*it)->addKeys(names); +} + ConfigurationBuilder::ConfigurationBuilder() :stack(new ConfigurationStack) {} ConfigurationBuilder& ConfigurationBuilder::push_env() diff --git a/src/utils/pv/configuration.h b/src/utils/pv/configuration.h index 34cf8d3..2ec6894 100644 --- a/src/utils/pv/configuration.h +++ b/src/utils/pv/configuration.h @@ -12,6 +12,7 @@ #include #include #include +#include #ifdef epicsExportSharedSymbols # define configurationEpicsExportSharedSymbols @@ -114,9 +115,21 @@ public: bool hasProperty(const std::string &name) const; + typedef std::set keys_t; + /** Return a (partial) list of available key names. + * Does not include key names from the ConfigurationEnviron + */ + keys_t keys() const + { + keys_t ret; + addKeys(ret); + return ret; + } + protected: friend class ConfigurationStack; virtual bool tryGetPropertyAsString(const std::string& name, std::string* val) const = 0; + virtual void addKeys(keys_t&) const {} }; //! Lookup configuration strings from an in memory store @@ -129,6 +142,7 @@ public: ConfigurationMap(const properties_t& p) :properties(p) {} private: virtual bool tryGetPropertyAsString(const std::string& name, std::string* val) const; + virtual void addKeys(keys_t&) const; }; //! Lookup configuration strings from the process environment @@ -147,6 +161,7 @@ class epicsShareClass ConfigurationStack : public Configuration typedef std::vector > confs_t; confs_t confs; virtual bool tryGetPropertyAsString(const std::string& name, std::string* val) const; + virtual void addKeys(keys_t&) const; public: inline void push_back(const confs_t::value_type& conf) { confs.push_back(conf);