X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=bindings%2Fcxx%2FConfigKey_methods.cpp;h=9ba82adb51b1c60bff6808605b25194e0c23db1f;hb=8a174d23427735617d69c7502ed8dcade786bbf9;hp=98b4e45b5e99e6531484bb96edfb7f16563cd9c2;hpb=7009a3921a0394ec5e89c2f0009eae4d7398a560;p=libsigrok.git diff --git a/bindings/cxx/ConfigKey_methods.cpp b/bindings/cxx/ConfigKey_methods.cpp index 98b4e45b..9ba82adb 100644 --- a/bindings/cxx/ConfigKey_methods.cpp +++ b/bindings/cxx/ConfigKey_methods.cpp @@ -1,28 +1,28 @@ -const DataType *ConfigKey::get_data_type() const +const DataType *ConfigKey::data_type() const { - const struct sr_config_info *info = sr_config_info_get(id); + const struct sr_config_info *info = sr_config_info_get(_id); if (!info) throw Error(SR_ERR_NA); return DataType::get(info->datatype); } -string ConfigKey::get_identifier() const +string ConfigKey::identifier() const { - const struct sr_config_info *info = sr_config_info_get(id); + const struct sr_config_info *info = sr_config_info_get(_id); if (!info) throw Error(SR_ERR_NA); return valid_string(info->id); } -string ConfigKey::get_description() const +string ConfigKey::description() const { - const struct sr_config_info *info = sr_config_info_get(id); + const struct sr_config_info *info = sr_config_info_get(_id); if (!info) throw Error(SR_ERR_NA); return valid_string(info->name); } -const ConfigKey *ConfigKey::get(string identifier) +const ConfigKey *ConfigKey::get_by_identifier(string identifier) { const struct sr_config_info *info = sr_config_info_name_get(identifier.c_str()); if (!info) @@ -30,12 +30,52 @@ const ConfigKey *ConfigKey::get(string identifier) return get(info->key); } +#include "config.h" + +#ifndef HAVE_STOI_STOD + +/* Fallback implementation of stoi and stod */ + +#include +#include +#include +#include + +static inline int stoi( const std::string& str ) +{ + char *endptr; + errno = 0; + const long ret = std::strtol(str.c_str(), &endptr, 10); + if (endptr == str.c_str()) + throw std::invalid_argument("stoi"); + else if (errno == ERANGE || + ret < std::numeric_limits::min() || + ret > std::numeric_limits::max()) + throw std::out_of_range("stoi"); + else + return ret; +} + +static inline double stod( const std::string& str ) +{ + char *endptr; + errno = 0; + const double ret = std::strtod(str.c_str(), &endptr); + if (endptr == str.c_str()) + throw std::invalid_argument("stod"); + else if (errno == ERANGE) + throw std::out_of_range("stod"); + else + return ret; +} +#endif + Glib::VariantBase ConfigKey::parse_string(string value) const { GVariant *variant; uint64_t p, q; - switch (get_data_type()->get_id()) + switch (data_type()->id()) { case SR_T_UINT64: check(sr_parse_sizestring(value.c_str(), &p));