-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)
return get(info->key);
}
+#include "config.h"
+
+#ifndef HAVE_STOI_STOD
+
+/* Fallback implementation of stoi and stod */
+
+#include <cstdlib>
+#include <cerrno>
+#include <stdexcept>
+#include <limits>
+
+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<int>::min() ||
+ ret > std::numeric_limits<int>::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));
throw Error(SR_ERR_BUG);
}
- return Glib::VariantBase(variant, true);
+ return Glib::VariantBase(variant, false);
}