From: Martin Ling Date: Sat, 26 Jul 2014 15:03:25 +0000 (+0100) Subject: Update bindings to use new output API. X-Git-Tag: libsigrok-0.4.0~1195 X-Git-Url: http://sigrok.org/gitweb/?p=libsigrok.git;a=commitdiff_plain;h=58aa1f8359007804f48a4f881e6782a06e1b729a Update bindings to use new output API. --- diff --git a/bindings/cxx/classes.cpp b/bindings/cxx/classes.cpp index 0d306a97..67d49086 100644 --- a/bindings/cxx/classes.cpp +++ b/bindings/cxx/classes.cpp @@ -41,8 +41,7 @@ static const char *valid_string(const char *input) } /** Helper function to convert between map and GHashTable */ - -static GHashTable *map_to_hash(map input) +static GHashTable *map_to_hash_string(map input) { auto output = g_hash_table_new_full( g_str_hash, g_str_equal, g_free, g_free); @@ -53,6 +52,19 @@ static GHashTable *map_to_hash(map input) return output; } +/** Helper function to convert between map and GHashTable */ +static GHashTable *map_to_hash_variant(map input) +{ + auto output = g_hash_table_new_full( + g_variant_hash, g_variant_equal, g_free, + (void (*)(void *))g_variant_unref); + for (auto entry : input) + g_hash_table_insert(output, + g_strdup(entry.first.c_str()), + entry.second.gobj_copy()); + return output; +} + Error::Error(int result) : result(result) { } @@ -85,10 +97,10 @@ Context::Context() : for (int i = 0; input_list[i]; i++) input_formats[input_list[i]->id] = new InputFormat(input_list[i]); - struct sr_output_format **output_list = sr_output_list(); + const struct sr_output_module **output_list = sr_output_list(); if (output_list) for (int i = 0; output_list[i]; i++) - output_formats[output_list[i]->id] = + output_formats[sr_output_id_get(output_list[i])] = new OutputFormat(output_list[i]); } @@ -1116,7 +1128,7 @@ shared_ptr InputFormat::open_file(string filename, map options) { auto input = g_new(struct sr_input, 1); - input->param = map_to_hash(options); + input->param = map_to_hash_string(options); /** Run initialisation. */ check(structure->init(input, filename.c_str())); @@ -1147,8 +1159,47 @@ void InputFileDevice::load() check(format->structure->loadfile(input, filename.c_str())); } -OutputFormat::OutputFormat(struct sr_output_format *structure) : - StructureWrapper(structure) +Option::Option(const struct sr_option *structure, + shared_ptr structure_array) : + structure(structure), + structure_array(structure_array) +{ +} + +Option::~Option() +{ +} + +string Option::get_id() +{ + return valid_string(structure->id); +} + +string Option::get_name() +{ + return valid_string(structure->name); +} + +string Option::get_description() +{ + return valid_string(structure->desc); +} + +Glib::VariantBase Option::get_default_value() +{ + return Glib::VariantBase(structure->def, true); +} + +vector Option::get_values() +{ + vector result; + for (auto l = structure->values; l; l = l->next) + result.push_back(Glib::VariantBase((GVariant *) l->data, true)); + return result; +} + +OutputFormat::OutputFormat(const struct sr_output_module *structure) : + StructureWrapper(structure) { } @@ -1158,16 +1209,29 @@ OutputFormat::~OutputFormat() string OutputFormat::get_name() { - return valid_string(structure->id); + return valid_string(sr_output_id_get(structure)); } string OutputFormat::get_description() { - return valid_string(structure->description); + return valid_string(sr_output_description_get(structure)); +} + +map> OutputFormat::get_options() +{ + const struct sr_option *option = sr_output_options_get(structure); + auto option_array = shared_ptr( + option, [=](const struct sr_option *) { + sr_output_options_free(structure); }); + map> result; + for (; option->id; option++) + result[option->id] = shared_ptr