]>
Commit | Line | Data |
---|---|---|
c23c8659 ML |
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 | ||
7009a392 | 68 | return Glib::VariantBase(variant, false); |
c23c8659 ML |
69 | } |
70 |