diff options
author | Max Kellermann <max@duempel.org> | 2015-01-21 22:13:44 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2015-01-21 23:56:33 +0100 |
commit | 4fa5538e2bed36903b403e1aaee2462d22b456dc (patch) | |
tree | 292b66e10e6b97e2363fde34a81c027a67d3a9fe /src/config/Block.hxx | |
parent | 84e74173de85a3897cfe67150297987f8c8bf52e (diff) | |
download | mpd-4fa5538e2bed36903b403e1aaee2462d22b456dc.tar.gz mpd-4fa5538e2bed36903b403e1aaee2462d22b456dc.tar.xz mpd-4fa5538e2bed36903b403e1aaee2462d22b456dc.zip |
config/Param: split block-specific attributes to new struct ConfigBlock
The old struct config_param remains only for top-level string options.
Diffstat (limited to '')
-rw-r--r-- | src/config/Block.hxx | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/src/config/Block.hxx b/src/config/Block.hxx index c2194eff9..23b064695 100644 --- a/src/config/Block.hxx +++ b/src/config/Block.hxx @@ -21,9 +21,14 @@ #define MPD_CONFIG_BLOCK_HXX #include "check.h" +#include "Param.hxx" #include "Compiler.h" #include <string> +#include <vector> + +class Error; +class AllocatedPath; struct BlockParam { std::string name; @@ -50,4 +55,71 @@ struct BlockParam { bool GetBoolValue() const; }; +struct ConfigBlock { + /** + * The next #ConfigBlock with the same name. The destructor + * deletes the whole chain. + */ + ConfigBlock *next; + + int line; + + std::vector<BlockParam> block_params; + + /** + * This flag is false when nobody has queried the value of + * this option yet. + */ + bool used; + + explicit ConfigBlock(int _line=-1) + :next(nullptr), line(_line), used(false) {} + + ConfigBlock(const ConfigBlock &) = delete; + + ~ConfigBlock(); + + ConfigBlock &operator=(const ConfigBlock &) = delete; + + /** + * Determine if this is a "null" instance, i.e. an empty + * object that was synthesized and not loaded from a + * configuration file. + */ + bool IsNull() const { + return line < 0; + } + + gcc_nonnull_all + void AddBlockParam(const char *_name, const char *_value, + int _line=-1) { + block_params.emplace_back(_name, _value, _line); + } + + gcc_nonnull_all gcc_pure + const BlockParam *GetBlockParam(const char *_name) const; + + gcc_pure + const char *GetBlockValue(const char *name, + const char *default_value=nullptr) const; + + /** + * Same as config_get_path(), but looks up the setting in the + * specified block. + */ + AllocatedPath GetBlockPath(const char *name, const char *default_value, + Error &error) const; + + AllocatedPath GetBlockPath(const char *name, Error &error) const; + + gcc_pure + int GetBlockValue(const char *name, int default_value) const; + + gcc_pure + unsigned GetBlockValue(const char *name, unsigned default_value) const; + + gcc_pure + bool GetBlockValue(const char *name, bool default_value) const; +}; + #endif |