X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=bindings%2Fcxx%2FConfigKey_methods.cpp;h=9c3668ffbb35e9ee4337b7951c0dc7cac08215e2;hb=1d2f9963abc10554ee0b36c6a1cf18649d4212c0;hp=54af62e804e76f2d8b3c7c0d628b9e17cc3a747c;hpb=4aa9a1e5698c74e2295f52313c33804761176fc1;p=libsigrok.git diff --git a/bindings/cxx/ConfigKey_methods.cpp b/bindings/cxx/ConfigKey_methods.cpp index 54af62e8..9c3668ff 100644 --- a/bindings/cxx/ConfigKey_methods.cpp +++ b/bindings/cxx/ConfigKey_methods.cpp @@ -1,3 +1,5 @@ +#include + const DataType *ConfigKey::data_type() const { const struct sr_key_info *info = sr_key_info_get(SR_KEY_CONFIG, id()); @@ -30,8 +32,6 @@ const ConfigKey *ConfigKey::get_by_identifier(string identifier) return get(info->key); } -#include - #ifndef HAVE_STOI_STOD /* Fallback implementation of stoi and stod */ @@ -70,12 +70,12 @@ static inline double stod( const std::string& str ) } #endif -Glib::VariantBase ConfigKey::parse_string(string value) const +Glib::VariantBase ConfigKey::parse_string(string value, enum sr_datatype dt) { GVariant *variant; uint64_t p, q; - switch (data_type()->id()) + switch (dt) { case SR_T_UINT64: check(sr_parse_sizestring(value.c_str(), &p)); @@ -90,7 +90,7 @@ Glib::VariantBase ConfigKey::parse_string(string value) const case SR_T_FLOAT: try { variant = g_variant_new_double(stod(value)); - } catch (invalid_argument) { + } catch (invalid_argument&) { throw Error(SR_ERR_ARG); } break; @@ -105,7 +105,7 @@ Glib::VariantBase ConfigKey::parse_string(string value) const case SR_T_INT32: try { variant = g_variant_new_int32(stoi(value)); - } catch (invalid_argument) { + } catch (invalid_argument&) { throw Error(SR_ERR_ARG); } break; @@ -116,3 +116,8 @@ Glib::VariantBase ConfigKey::parse_string(string value) const return Glib::VariantBase(variant, false); } +Glib::VariantBase ConfigKey::parse_string(string value) const +{ + enum sr_datatype dt = (enum sr_datatype)(data_type()->id()); + return parse_string(value, dt); +}