diff options
Diffstat (limited to 'src/config/Block.hxx')
-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 |