From 8b2c465f0237560debc41ccd4bb0fbdfd689b2e6 Mon Sep 17 00:00:00 2001 From: Alexander Larsson Date: Mon, 13 Jan 2020 13:27:26 +0100 Subject: [PATCH] Add peek_as_variant and ref_to_variant for all types --- TODO.md | 7 ++----- variant-parse.py | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/TODO.md b/TODO.md index 2841d03e..e1d88e50 100644 --- a/TODO.md +++ b/TODO.md @@ -1,12 +1,9 @@ TODO: * Inline code in lookup() to avoid recomputing. Also, maybe do special frame_size == 1 case - * dicts: "[sorted int] value" - * Generate structs for fixed structs, Struct_peek(), struct_peek_var() * Apply endianness attribute in getters - * Add _peek_as_variant() for generated types - * Add _peek_as_variant() variant with extra args for data + destry notify * Add more tests - * More attributes: untrusted, sorted (for dict keys => bsearch) + * dicts: "[sorted int] value" ( => bsearch) + * More attributes: untrusted Maybe TODO: * Add more optional checking (out of bounds, validity, etc) diff --git a/variant-parse.py b/variant-parse.py index 686d3f60..61b3a348 100755 --- a/variant-parse.py +++ b/variant-parse.py @@ -407,6 +407,20 @@ static inline GVariant * return g_variant_new_from_data ({TYPE_NAME_}TYPEFORMAT, g_memdup (v.base, v.size), v.size, TRUE, g_free, NULL); }} +static inline GVariant * +{type_name_ref_}ref_to_variant ({TypeNameRef} v, + GDestroyNotify notify, + gpointer user_data) +{{ + return g_variant_new_from_data ({TYPE_NAME_}TYPEFORMAT, v.base, v.size, TRUE, notify, user_data); +}} + +static inline GVariant * +{type_name_ref_}peek_as_variant ({TypeNameRef} v) +{{ + return g_variant_new_from_data ({TYPE_NAME_}TYPEFORMAT, v.base, v.size, TRUE, NULL, NULL); +}} + static inline {TypeNameRef} {type_name_ref_}from_variant_ref ({Prefix}VariantRef v) {{ g_assert (g_variant_type_equal({prefix_}variant_ref_get_type (v), {TYPE_NAME_}TYPESTRING));