Settings: Add no-exception variants of each get method
authorkwolekr <kwolekr@minetest.net>
Tue, 4 Feb 2014 03:40:57 +0000 (22:40 -0500)
committerkwolekr <kwolekr@minetest.net>
Tue, 4 Feb 2014 03:47:40 +0000 (22:47 -0500)
src/settings.h

index e19f83e3fe8e4ede19d0a543c4dd6e385c259896..f019ce50c8e2c1ca93f0b233c22ef248fc721b2b 100644 (file)
@@ -467,6 +467,7 @@ public:
                return n->second;
        }
 
+       //////////// Get setting
        bool getBool(std::string name)
        {
                return is_yes(get(name));
@@ -581,13 +582,19 @@ public:
        {
                size_t len = olen;
                std::vector<std::string *> strs_alloced;
-               std::string *str;
-               std::string valstr = get(name);
+               std::string *str, valstr;
+               char *f, *snext;
+               size_t pos;
+
+               try {
+                       valstr = get(name);
+               } catch (SettingNotFoundException &e) {
+                       return false;
+               }
+
                char *s = &valstr[0];
                char *buf = new char[len];
                char *bufpos = buf;
-               char *f, *snext;
-               size_t pos;
 
                char *fmtpos, *fmt = &format[0];
                while ((f = strtok_r(fmt, ",", &fmtpos)) && s) {
@@ -737,6 +744,118 @@ fail:
                return true;
        }
 
+       //////////// Try to get value, no exception thrown
+       bool tryGet(std::string name, std::string &val)
+       {
+               try {
+                       val = get(name);
+                       return true;
+               } catch (SettingNotFoundException &e) {
+                       return false;
+               }
+       }
+
+       bool tryGetFlagStr(std::string name, u32 &val, FlagDesc *flagdesc)
+       {
+               try {
+                       val = getFlagStr(name, flagdesc);
+                       return true;
+               } catch (SettingNotFoundException &e) {
+                       return false;
+               }
+       }
+
+       bool tryGetFloat(std::string name, float &val)
+       {
+               try {
+                       val = getFloat(name);
+                       return true;
+               } catch (SettingNotFoundException &e) {
+                       return false;
+               }
+       }
+
+       bool tryGetU16(std::string name, int &val)
+       {
+               try {
+                       val = getU16(name);
+                       return true;
+               } catch (SettingNotFoundException &e) {
+                       return false;
+               }
+       }
+
+       bool tryGetU16(std::string name, u16 &val)
+       {
+               try {
+                       val = getU16(name);
+                       return true;
+               } catch (SettingNotFoundException &e) {
+                       return false;
+               }
+       }
+
+       bool tryGetS16(std::string name, int &val)
+       {
+               try {
+                       val = getU16(name);
+                       return true;
+               } catch (SettingNotFoundException &e) {
+                       return false;
+               }
+       }
+
+       bool tryGetS16(std::string name, s16 &val)
+       {
+               try {
+                       val = getS16(name);
+                       return true;
+               } catch (SettingNotFoundException &e) {
+                       return false;
+               }
+       }
+
+       bool tryGetS32(std::string name, s32 &val)
+       {
+               try {
+                       val = getS32(name);
+                       return true;
+               } catch (SettingNotFoundException &e) {
+                       return false;
+               }
+       }
+
+       bool tryGetV3F(std::string name, v3f &val)
+       {
+               try {
+                       val = getV3F(name);
+                       return true;
+               } catch (SettingNotFoundException &e) {
+                       return false;
+               }
+       }
+
+       bool tryGetV2F(std::string name, v2f &val)
+       {
+               try {
+                       val = getV2F(name);
+                       return true;
+               } catch (SettingNotFoundException &e) {
+                       return false;
+               }
+       }
+
+       bool tryGetU64(std::string name, u64 &val)
+       {
+               try {
+                       val = getU64(name);
+                       return true;
+               } catch (SettingNotFoundException &e) {
+                       return false;
+               }
+       }
+
+       //////////// Set setting
        bool setStruct(std::string name, std::string format, void *value)
        {
                char sbuf[2048];