X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=bindings%2Fcxx%2Fclasses.cpp;h=c90cac3f13ca69270457def55f71f06083448aee;hb=e8779db70cfe53db1d9f1f6ad00c4888ccf09b23;hp=bb7cec690d599c58b9500cfe3228a26451e2350b;hpb=d01d2314879988e9d9ab80872889340e89ec8cc8;p=libsigrok.git diff --git a/bindings/cxx/classes.cpp b/bindings/cxx/classes.cpp index bb7cec69..c90cac3f 100644 --- a/bindings/cxx/classes.cpp +++ b/bindings/cxx/classes.cpp @@ -44,8 +44,7 @@ static const char *valid_string(const char *input) 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); + g_str_hash, g_str_equal, g_free, (GDestroyNotify) g_variant_unref); for (auto entry : input) g_hash_table_insert(output, g_strdup(entry.first.c_str()), @@ -974,6 +973,9 @@ Packet::Packet(shared_ptr device, static_cast( structure->payload)); break; + default: + payload = nullptr; + break; } } @@ -990,7 +992,10 @@ const PacketType *Packet::get_type() shared_ptr Packet::get_payload() { - return payload->get_shared_pointer(this); + if (payload) + return payload->get_shared_pointer(this); + else + throw Error(SR_ERR_NA); } PacketPayload::PacketPayload() @@ -1002,8 +1007,8 @@ PacketPayload::~PacketPayload() } Header::Header(const struct sr_datafeed_header *structure) : - PacketPayload(), - StructureWrapper(structure) + StructureWrapper(structure), + PacketPayload() { } @@ -1011,6 +1016,14 @@ Header::~Header() { } +shared_ptr Header::get_shared_pointer(Packet *parent) +{ + return static_pointer_cast( + static_pointer_cast
( + StructureWrapper:: + get_shared_pointer(parent))); +} + int Header::get_feed_version() { return structure->feed_version; @@ -1024,8 +1037,8 @@ Glib::TimeVal Header::get_start_time() } Meta::Meta(const struct sr_datafeed_meta *structure) : - PacketPayload(), - StructureWrapper(structure) + StructureWrapper(structure), + PacketPayload() { } @@ -1033,6 +1046,14 @@ Meta::~Meta() { } +shared_ptr Meta::get_shared_pointer(Packet *parent) +{ + return static_pointer_cast( + static_pointer_cast( + StructureWrapper:: + get_shared_pointer(parent))); +} + map Meta::get_config() { map result; @@ -1045,8 +1066,8 @@ map Meta::get_config() } Logic::Logic(const struct sr_datafeed_logic *structure) : - PacketPayload(), - StructureWrapper(structure) + StructureWrapper(structure), + PacketPayload() { } @@ -1054,6 +1075,14 @@ Logic::~Logic() { } +shared_ptr Logic::get_shared_pointer(Packet *parent) +{ + return static_pointer_cast( + static_pointer_cast( + StructureWrapper:: + get_shared_pointer(parent))); +} + void *Logic::get_data_pointer() { return structure->data; @@ -1070,8 +1099,8 @@ unsigned int Logic::get_unit_size() } Analog::Analog(const struct sr_datafeed_analog *structure) : - PacketPayload(), - StructureWrapper(structure) + StructureWrapper(structure), + PacketPayload() { } @@ -1079,6 +1108,14 @@ Analog::~Analog() { } +shared_ptr Analog::get_shared_pointer(Packet *parent) +{ + return static_pointer_cast( + static_pointer_cast( + StructureWrapper:: + get_shared_pointer(parent))); +} + float *Analog::get_data_pointer() { return structure->data;