]> sigrok.org Git - libsigrok.git/blobdiff - bindings/cxx/ConfigKey_methods.cpp
Backport recent changes from mainline.
[libsigrok.git] / bindings / cxx / ConfigKey_methods.cpp
index 54af62e804e76f2d8b3c7c0d628b9e17cc3a747c..9c3668ffbb35e9ee4337b7951c0dc7cac08215e2 100644 (file)
@@ -1,3 +1,5 @@
+#include <config.h>
+
 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 <config.h>
-
 #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);
+}