15#include <unordered_map>
105 value(std::move(value_))
147 void writeLines(std::ostream &os, u32 tab_depth=0)
const;
154 const std::string &
get(
const std::string &name)
const;
155 bool getBool(
const std::string &name)
const;
156 u16
getU16(
const std::string &name)
const;
157 s16
getS16(
const std::string &name)
const;
158 u32
getU32(
const std::string &name)
const;
159 s32
getS32(
const std::string &name)
const;
160 u64
getU64(
const std::string &name)
const;
161 float getFloat(
const std::string &name)
const;
162 float getFloat(
const std::string &name,
float min,
float max)
const;
163 v2f getV2F(
const std::string &name)
const;
164 std::optional<v3f>
getV3F(
const std::string &name)
const;
165 u32
getFlagStr(
const std::string &name,
const FlagDesc *flagdesc,
166 u32 *flagmask)
const;
167 bool getNoiseParams(
const std::string &name, NoiseParams &np)
const;
172 std::vector<std::string>
getNames()
const;
174 bool exists(
const std::string &name)
const;
184 bool getNoEx(
const std::string &name, std::string &val)
const;
185 bool getFlag(
const std::string &name)
const;
186 bool getU16NoEx(
const std::string &name, u16 &val)
const;
187 bool getS16NoEx(
const std::string &name, s16 &val)
const;
188 bool getU32NoEx(
const std::string &name, u32 &val)
const;
189 bool getS32NoEx(
const std::string &name, s32 &val)
const;
190 bool getU64NoEx(
const std::string &name, u64 &val)
const;
191 bool getFloatNoEx(
const std::string &name,
float &val)
const;
193 bool getV3FNoEx(
const std::string &name, std::optional<v3f> &val)
const;
199 const FlagDesc *flagdesc)
const;
208 bool setEntry(
const std::string &name,
const void *entry,
210 bool set(
const std::string &name,
const std::string &value);
211 bool setDefault(
const std::string &name,
const std::string &value);
213 bool setBool(
const std::string &name,
bool value);
214 bool setS16(
const std::string &name, s16 value);
215 bool setU16(
const std::string &name, u16 value);
216 bool setS32(
const std::string &name, s32 value);
217 bool setU64(
const std::string &name, u64 value);
218 bool setFloat(
const std::string &name,
float value);
219 bool setV2F(
const std::string &name,
v2f value);
220 bool setV3F(
const std::string &name,
v3f value);
221 bool setFlagStr(
const std::string &name, u32 flags,
222 const FlagDesc *flagdesc =
nullptr, u32 flagmask =
U32_MAX);
223 bool setNoiseParams(
const std::string &name,
const NoiseParams &np);
226 bool remove(
const std::string &name);
232 void setDefault(
const std::string &name,
const FlagDesc *flagdesc, u32 flags);
251 std::string &name, std::string &value);
260 static std::string
getMultiline(std::istream &is,
size_t *num_lines=
nullptr);
262 static void printEntry(std::ostream &os,
const std::string &name,
293 static std::unordered_map<std::string, const FlagDesc *>
s_flags;
#define DISABLE_CLASS_COPY(C)
Definition basic_macros.h:26
Settings * getParent(int layer) const
Definition settings.cpp:49
SettingsHierarchy(Settings *fallback=nullptr)
Definition settings.cpp:35
std::vector< Settings * > layers
Definition settings.h:84
friend class Settings
Definition settings.h:79
void onLayerCreated(int layer, Settings *obj)
Definition settings.cpp:62
Settings * getLayer(int layer) const
Definition settings.cpp:41
void onLayerRemoved(int layer)
Definition settings.cpp:80
Definition settings.h:119
friend class TestSettings
Definition settings.h:273
v2f getV2F(const std::string &name) const
Definition settings.cpp:564
static bool checkValueValid(std::string_view value)
Definition settings.cpp:159
bool setGroup(const std::string &name, const Settings &group)
Definition settings.cpp:901
SettingsCallbackMap m_callbacks
Definition settings.h:282
std::mutex m_callback_mutex
Definition settings.h:285
bool getFloatNoEx(const std::string &name, float &val) const
Definition settings.cpp:746
bool getFlag(const std::string &name) const
Definition settings.cpp:736
bool getU32NoEx(const std::string &name, u32 &val) const
Definition settings.cpp:778
bool getV3FNoEx(const std::string &name, std::optional< v3f > &val) const
Definition settings.cpp:821
void doCallbacks(const std::string &name) const
Definition settings.cpp:1102
bool setS32(const std::string &name, s32 value)
Definition settings.cpp:929
u64 getU64(const std::string &name) const
Definition settings.cpp:557
static std::unordered_map< std::string, const FlagDesc * > s_flags
Definition settings.h:293
bool getU64NoEx(const std::string &name, u64 &val) const
Definition settings.cpp:799
~Settings()
Definition settings.cpp:113
bool readConfigFile(const char *filename)
Definition settings.cpp:196
bool getS32NoEx(const std::string &name, s32 &val) const
Definition settings.cpp:788
bool setU16(const std::string &name, u16 value)
Definition settings.cpp:923
bool remove(const std::string &name)
Definition settings.cpp:994
int m_settingslayer
Definition settings.h:291
Settings * getGroup(const std::string &name) const
Definition settings.cpp:497
bool getS16NoEx(const std::string &name, s16 &val) const
Definition settings.cpp:768
bool getNoiseParamsFromValue(const std::string &name, NoiseParams &np) const
Definition settings.cpp:620
bool getGroupNoEx(const std::string &name, Settings *&val) const
Definition settings.cpp:714
int getLayer() const
Definition settings.h:243
u32 getU32(const std::string &name) const
Definition settings.cpp:533
bool parseConfigLines(std::istream &is, std::string_view location={})
Definition settings.cpp:206
friend class LuaSettings
Definition settings.h:275
s32 getS32(const std::string &name) const
Definition settings.cpp:538
bool getNoEx(const std::string &name, std::string &val) const
Definition settings.cpp:725
void writeLines(std::ostream &os, u32 tab_depth=0) const
Definition settings.cpp:272
void registerChangedCallback(const std::string &name, SettingsChangedCallback cbf, void *userdata=NULL)
Definition settings.cpp:1064
bool setDefault(const std::string &name, const std::string &value)
Definition settings.cpp:893
std::vector< std::string > getNames() const
Definition settings.cpp:696
const SettingsEntry & getEntry(const std::string &name) const
Definition settings.cpp:480
size_t deregisterAllChangedCallbacks(const void *userdata)
Definition settings.cpp:1071
bool getV2FNoEx(const std::string &name, v2f &val) const
Definition settings.cpp:810
static std::string getMultiline(std::istream &is, size_t *num_lines=nullptr)
consume a multi-line setting from a stream
Definition settings.cpp:170
bool updateConfigFile(const char *filename)
Definition settings.cpp:398
std::optional< v3f > getV3F(const std::string &name) const
Definition settings.cpp:575
const std::string & get(const std::string &name) const
Definition settings.cpp:506
SettingsParseEvent parseConfigObject(const std::string &line, std::string &name, std::string &value)
Definition settings.cpp:1014
bool getFlagStrNoEx(const std::string &name, u32 &val, const FlagDesc *flagdesc) const
Definition settings.cpp:832
bool setBool(const std::string &name, bool value)
Definition settings.cpp:911
float getFloat(const std::string &name) const
Definition settings.cpp:544
Settings * getParent() const
Definition settings.cpp:474
bool set(const std::string &name, const std::string &value)
Definition settings.cpp:882
bool getBool(const std::string &name) const
Definition settings.cpp:515
bool setS16(const std::string &name, s16 value)
Definition settings.cpp:917
Settings(std::string_view end_tag="")
Definition settings.h:126
std::string m_end_tag
Definition settings.h:283
void clearNoLock()
Definition settings.cpp:1042
bool setFloat(const std::string &name, float value)
Definition settings.cpp:943
bool setEntry(const std::string &name, const void *entry, bool set_group)
Definition settings.cpp:854
std::mutex m_mutex
Definition settings.h:288
bool setNoiseParams(const std::string &name, const NoiseParams &np)
Definition settings.cpp:977
static void printEntry(std::ostream &os, const std::string &name, const SettingsEntry &entry, u32 tab_depth=0)
Definition settings.cpp:289
bool exists(const std::string &name) const
Definition settings.cpp:678
Settings & operator=(const Settings &other)
Definition settings.cpp:124
void removeSecureSettings()
Definition settings.cpp:1089
bool getNoiseParams(const std::string &name, NoiseParams &np) const
Definition settings.cpp:609
bool setV3F(const std::string &name, v3f value)
Definition settings.cpp:957
bool existsLocal(const std::string &name) const
Definition settings.cpp:688
u16 getU16(const std::string &name) const
Definition settings.cpp:521
static bool checkNameValid(std::string_view name)
Definition settings.cpp:144
bool setFlagStr(const std::string &name, u32 flags, const FlagDesc *flagdesc=nullptr, u32 flagmask=U32_MAX)
Definition settings.cpp:965
bool setV2F(const std::string &name, v2f value)
Definition settings.cpp:949
bool getU16NoEx(const std::string &name, u16 &val) const
Definition settings.cpp:757
SettingEntries m_settings
Definition settings.h:281
u32 getFlagStr(const std::string &name, const FlagDesc *flagdesc, u32 *flagmask) const
Definition settings.cpp:581
s16 getS16(const std::string &name) const
Definition settings.cpp:527
bool updateConfigObject(std::istream &is, std::ostream &os, u32 tab_depth=0)
Definition settings.cpp:312
SettingsHierarchy * m_hierarchy
Definition settings.h:290
static Settings * createLayer(SettingsLayer sl, std::string_view end_tag="")
Definition settings.cpp:90
bool getNoiseParamsFromGroup(const std::string &name, NoiseParams &np) const
Definition settings.cpp:650
bool setU64(const std::string &name, u64 value)
Definition settings.cpp:935
const FlagDesc * getFlagDescFallback(const std::string &name) const
Definition settings.cpp:1058
bool parseCommandLine(int argc, char *argv[], const std::map< std::string, ValueSpec > &allowed_options)
Definition settings.cpp:418
core::vector2d< f32 > v2f
Definition irr_v2d.h:11
core::vector3df v3f
Definition irr_v3d.h:11
#define U32_MAX
Definition irrlichttypes.h:23
static OptionList allowed_options
Definition main.cpp:130
Settings * g_settings
Definition settings.cpp:26
bool g_first_run
Is set to true if the engine runs for the first time.
Definition settings.cpp:29
std::string g_settings_path
Definition settings.cpp:28
std::vector< std::pair< SettingsChangedCallback, void * > > SettingsCallbackList
Definition settings.h:38
std::unordered_map< std::string, SettingsEntry > SettingEntries
Definition settings.h:117
SettingsLayer
Definition settings.h:58
@ SL_GLOBAL
Definition settings.h:61
@ SL_GAME
Definition settings.h:60
@ SL_DEFAULTS
Definition settings.h:59
@ SL_TOTAL_COUNT
Definition settings.h:62
void(* SettingsChangedCallback)(const std::string &name, void *data)
Definition settings.h:31
SettingsParseEvent
Definition settings.h:47
@ SPE_KVPAIR
Definition settings.h:51
@ SPE_MULTILINE
Definition settings.h:54
@ SPE_GROUP
Definition settings.h:53
@ SPE_INVALID
Definition settings.h:49
@ SPE_COMMENT
Definition settings.h:50
@ SPE_END
Definition settings.h:52
@ SPE_NONE
Definition settings.h:48
std::unordered_map< std::string, SettingsCallbackList > SettingsCallbackMap
Definition settings.h:40
ValueType
Definition settings.h:42
@ VALUETYPE_FLAG
Definition settings.h:44
@ VALUETYPE_STRING
Definition settings.h:43
const char * name
Definition string.h:72
std::string value
Definition settings.h:112
SettingsEntry(const std::string &value_)
Definition settings.h:101
bool is_group
Definition settings.h:114
Settings * group
Definition settings.h:113
SettingsEntry(Settings *group_)
Definition settings.h:108
SettingsEntry(std::string &&value_)
Definition settings.h:104
const char * help
Definition settings.h:95
ValueSpec(ValueType a_type, const char *a_help=NULL)
Definition settings.h:88
ValueType type
Definition settings.h:94