X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fsettings.h;h=89f7589dfddc1bd40932133009ba1c52d6be25e1;hb=4a57ef12a163f9792a8822b6e1a2bd9dca4f86fb;hp=6c063e43e5fca2801ac27bc300547663cdc87b6f;hpb=f0cd59034ccc57d69fd79014ed3466deeea2c332;p=minetest.git diff --git a/src/settings.h b/src/settings.h index 6c063e43e..89f7589df 100644 --- a/src/settings.h +++ b/src/settings.h @@ -55,40 +55,36 @@ struct ValueSpec { type = a_type; help = a_help; } + ValueType type; const char *help; }; -/** function type to register a changed callback */ - struct SettingsEntry { SettingsEntry() { - group = NULL; + group = NULL; + is_group = false; } SettingsEntry(const std::string &value_) { - value = value_; - group = NULL; + value = value_; + group = NULL; + is_group = false; } SettingsEntry(Settings *group_) { - group = group_; - } - - SettingsEntry(const std::string &value_, Settings *group_) - { - value = value_; - group = group_; + group = group_; + is_group = true; } std::string value; Settings *group; + bool is_group; }; - class Settings { public: Settings() {} @@ -97,7 +93,6 @@ class Settings { Settings & operator += (const Settings &other); Settings & operator = (const Settings &other); - /*********************** * Reading and writing * ***********************/ @@ -114,20 +109,16 @@ class Settings { SettingsParseEvent parseConfigObject(const std::string &line, const std::string &end, std::string &name, std::string &value); - void getNamesPresent(std::istream &is, const std::string &end, - std::set &present_values, - std::set &present_groups); bool updateConfigObject(std::istream &is, std::ostream &os, const std::string &end, u32 tab_depth=0); + static bool checkNameValid(const std::string &name); + static bool checkValueValid(const std::string &value); + static std::string sanitizeName(const std::string &name); + static std::string sanitizeValue(const std::string &value); static std::string getMultiline(std::istream &is, size_t *num_lines=NULL); - static std::string sanitizeString(const std::string &value); - static bool printEntry(std::ostream &os, const std::string &name, + static void printEntry(std::ostream &os, const std::string &name, const SettingsEntry &entry, u32 tab_depth=0); - static void printValue(std::ostream &os, const std::string &name, - const std::string &value, u32 tab_depth=0); - static void printGroup(std::ostream &os, const std::string &name, - const Settings *group, u32 tab_depth=0); /*********** * Getters * @@ -186,21 +177,24 @@ class Settings { // N.B. Groups not allocated with new must be set to NULL in the settings // tree before object destruction. - void set(const std::string &name, const std::string &value); - void setGroup(const std::string &name, Settings *group); - void setDefault(const std::string &name, const std::string &value); - void setGroupDefault(const std::string &name, Settings *group); - void setBool(const std::string &name, bool value); - void setS16(const std::string &name, s16 value); - void setU16(const std::string &name, u16 value); - void setS32(const std::string &name, s32 value); - void setU64(const std::string &name, u64 value); - void setFloat(const std::string &name, float value); - void setV2F(const std::string &name, v2f value); - void setV3F(const std::string &name, v3f value); - void setFlagStr(const std::string &name, u32 flags, + bool setEntry(const std::string &name, const void *entry, + bool set_group, bool set_default); + bool set(const std::string &name, const std::string &value); + bool setDefault(const std::string &name, const std::string &value); + bool setGroup(const std::string &name, Settings *group); + bool setGroupDefault(const std::string &name, Settings *group); + bool setBool(const std::string &name, bool value); + bool setS16(const std::string &name, s16 value); + bool setU16(const std::string &name, u16 value); + bool setS32(const std::string &name, s32 value); + bool setU64(const std::string &name, u64 value); + bool setFloat(const std::string &name, float value); + bool setV2F(const std::string &name, v2f value); + bool setV3F(const std::string &name, v3f value); + bool setFlagStr(const std::string &name, u32 flags, const FlagDesc *flagdesc, u32 flagmask); - void setNoiseParams(const std::string &name, const NoiseParams &np); + bool setNoiseParams(const std::string &name, const NoiseParams &np, + bool set_default=false); // N.B. if setStruct() is used to write a non-POD aggregate type, // the behavior is undefined. bool setStruct(const std::string &name, const std::string &format, void *value);