Skip to content

Commit

Permalink
Settings: Add no-exception variants of each get method
Browse files Browse the repository at this point in the history
  • Loading branch information
kwolekr committed Feb 4, 2014
1 parent 458045d commit a439343
Showing 1 changed file with 123 additions and 4 deletions.
127 changes: 123 additions & 4 deletions src/settings.h
Expand Up @@ -467,6 +467,7 @@ class Settings
return n->second;
}

//////////// Get setting
bool getBool(std::string name)
{
return is_yes(get(name));
Expand Down Expand Up @@ -581,13 +582,19 @@ class Settings
{
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) {
Expand Down Expand Up @@ -737,6 +744,118 @@ class Settings
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];
Expand Down

0 comments on commit a439343

Please sign in to comment.