]> sigrok.org Git - libsigrok.git/blame - bindings/cxx/ConfigKey_methods.cpp
Add C++ bindings.
[libsigrok.git] / bindings / cxx / ConfigKey_methods.cpp
CommitLineData
c23c8659
ML
1const DataType *ConfigKey::get_data_type() const
2{
3 const struct sr_config_info *info = sr_config_info_get(id);
4 if (!info)
5 throw Error(SR_ERR_NA);
6 return DataType::get(info->datatype);
7}
8
9string ConfigKey::get_identifier() const
10{
11 const struct sr_config_info *info = sr_config_info_get(id);
12 if (!info)
13 throw Error(SR_ERR_NA);
14 return valid_string(info->id);
15}
16
17string ConfigKey::get_description() const
18{
19 const struct sr_config_info *info = sr_config_info_get(id);
20 if (!info)
21 throw Error(SR_ERR_NA);
22 return valid_string(info->name);
23}
24
25const ConfigKey *ConfigKey::get(string identifier)
26{
27 const struct sr_config_info *info = sr_config_info_name_get(identifier.c_str());
28 if (!info)
29 throw Error(SR_ERR_ARG);
30 return get(info->key);
31}
32
33Glib::VariantBase ConfigKey::parse_string(string value) const
34{
35 GVariant *variant;
36 uint64_t p, q;
37
38 switch (get_data_type()->get_id())
39 {
40 case SR_T_UINT64:
41 check(sr_parse_sizestring(value.c_str(), &p));
42 variant = g_variant_new_uint64(p);
43 break;
44 case SR_T_STRING:
45 variant = g_variant_new_string(value.c_str());
46 break;
47 case SR_T_BOOL:
48 variant = g_variant_new_boolean(sr_parse_boolstring(value.c_str()));
49 break;
50 case SR_T_FLOAT:
51 variant = g_variant_new_double(stod(value));
52 break;
53 case SR_T_RATIONAL_PERIOD:
54 check(sr_parse_period(value.c_str(), &p, &q));
55 variant = g_variant_new("(tt)", p, q);
56 break;
57 case SR_T_RATIONAL_VOLT:
58 check(sr_parse_voltage(value.c_str(), &p, &q));
59 variant = g_variant_new("(tt)", p, q);
60 break;
61 case SR_T_INT32:
62 variant = g_variant_new_int32(stoi(value));
63 break;
64 default:
65 throw Error(SR_ERR_BUG);
66 }
67
68 return Glib::VariantBase(variant, true);
69}
70