]> sigrok.org Git - libsigrok.git/blob - bindings/cxx/ConfigKey_methods.cpp
Add C++ bindings.
[libsigrok.git] / bindings / cxx / ConfigKey_methods.cpp
1 const 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
9 string 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
17 string 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
25 const 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
33 Glib::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