- /** Initialize with an int */
- ValueItem(int value);
- /** Initialize with a bool */
- ValueItem(bool value);
- /** Initialize with a char pointer */
- ValueItem(char* value);
- /** Change value to a char pointer */
- void Set(char* value);
- /** Change value to a const char pointer */
- void Set(const char* val);
- /** Change value to an int */
- void Set(int value);
- /** Get value as an int */
- int GetInteger();
- /** Get value as a string */
- char* GetString();
- /** Get value as a bool */
- bool GetBool();
+ const std::string tag;
+ const std::string src_name;
+ const int src_line;
+
+ /** Get the value of an option, using def if it does not exist */
+ std::string getString(const std::string& key, const std::string& def = "");
+ /** Get the value of an option, using def if it does not exist */
+ long getInt(const std::string& key, long def = 0, long min = LONG_MIN, long max = LONG_MAX);
+ /** Get the value of an option, using def if it does not exist */
+ double getFloat(const std::string& key, double def = 0);
+ /** Get the value of an option, using def if it does not exist */
+ bool getBool(const std::string& key, bool def = false);
+
+ /** Get the value in seconds of a duration that is in the user-friendly "1h2m3s" format,
+ * using a default value if it does not exist or is out of bounds.
+ * @param key The config key name
+ * @param def Default value (optional)
+ * @param min Minimum acceptable value (optional)
+ * @param max Maximum acceptable value (optional)
+ * @return The duration in seconds
+ */
+ long getDuration(const std::string& key, long def = 0, long min = LONG_MIN, long max = LONG_MAX);
+
+ /** Get the value of an option
+ * @param key The option to get
+ * @param value The location to store the value (unmodified if does not exist)
+ * @param allow_newline Allow newlines in the option (normally replaced with spaces)
+ * @return true if the option exists
+ */
+ bool readString(const std::string& key, std::string& value, bool allow_newline = false);
+
+ /** Check for an out of range value. If the value falls outside the boundaries a warning is
+ * logged and the value is corrected (set to def).
+ * @param key The key name, used in the warning message
+ * @param res The value to verify and modify if needed
+ * @param def The default value, res will be set to this if (min <= res <= max) doesn't hold true
+ * @param min Minimum accepted value for res
+ * @param max Maximum accepted value for res
+ */
+ void CheckRange(const std::string& key, long& res, long def, long min, long max);
+
+ std::string getTagLocation();
+
+ inline const std::vector<KeyVal>& getItems() const { return items; }
+
+ /** Create a new ConfigTag, giving access to the private KeyVal item list */
+ static ConfigTag* create(const std::string& Tag, const std::string& file, int line, std::vector<KeyVal>*& Items);
+ private:
+ ConfigTag(const std::string& Tag, const std::string& file, int line);