X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fprop%2Fbinding%2Fdecoderoptions.cpp;h=5ad7e3562e6150e057c9299964069af1e931feba;hp=dc3a8e974355c515322d3fb30e1920f4148afaab;hb=4e5a4405482a296ebb6014e627298ad156c78d55;hpb=1429b21db812b591699341712af2f1dd448363c5 diff --git a/pv/prop/binding/decoderoptions.cpp b/pv/prop/binding/decoderoptions.cpp index dc3a8e97..5ad7e356 100644 --- a/pv/prop/binding/decoderoptions.cpp +++ b/pv/prop/binding/decoderoptions.cpp @@ -18,11 +18,14 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +#include + #include "decoderoptions.h" #include #include +#include #include #include @@ -33,15 +36,15 @@ namespace pv { namespace prop { namespace binding { -DecoderOptions::DecoderOptions(const srd_decoder *decoder, - GHashTable *options) : - _decoder(decoder), - _options(options) +DecoderOptions::DecoderOptions(shared_ptr decoder) : + _decoder(decoder) { - assert(decoder); + assert(_decoder); + const srd_decoder *const dec = _decoder->decoder(); + assert(dec); - for (GSList *l = decoder->options; l; l = l->next) + for (GSList *l = dec->options; l; l = l->next) { const srd_decoder_option *const opt = (srd_decoder_option*)l->data; @@ -70,13 +73,18 @@ DecoderOptions::DecoderOptions(const srd_decoder *decoder, GVariant* DecoderOptions::getter(const char *id) { + assert(_decoder); + // Get the value from the hash table if it is already present - GVariant *val = (GVariant*)g_hash_table_lookup(_options, id); + GVariant *val = (GVariant*)g_hash_table_lookup( + (GHashTable*)_decoder->options(), id); if (!val) { + assert(_decoder->decoder()); + // Get the default value if not - for (GSList *l = _decoder->options; l; l = l->next) + for (GSList *l = _decoder->decoder()->options; l; l = l->next) { const srd_decoder_option *const opt = (srd_decoder_option*)l->data; @@ -95,8 +103,8 @@ GVariant* DecoderOptions::getter(const char *id) void DecoderOptions::setter(const char *id, GVariant *value) { - g_variant_ref(value); - g_hash_table_insert(_options, (void*)g_strdup(id), value); + assert(_decoder); + _decoder->set_option(id, value); } } // binding