From f78d67fb5dc05edadd6ce52740999adda7d1fbb6 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=A9mie=20Galarneau?= Date: Fri, 28 Oct 2016 11:49:46 -0400 Subject: [PATCH] Add bt_ctf_field_variant_get_tag MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérémie Galarneau --- formats/ctf/ir/fields.c | 21 +++++++++++++++++++++ include/babeltrace/ctf-ir/fields.h | 16 ++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/formats/ctf/ir/fields.c b/formats/ctf/ir/fields.c index 105dd7a1..2aeb71b5 100644 --- a/formats/ctf/ir/fields.c +++ b/formats/ctf/ir/fields.c @@ -788,6 +788,27 @@ end: return current_field; } +struct bt_ctf_field *bt_ctf_field_variant_get_tag( + struct bt_ctf_field *variant_field) +{ + struct bt_ctf_field *tag = NULL; + struct bt_ctf_field_variant *variant; + + if (!variant_field || + bt_ctf_field_type_get_type_id(variant_field->type) != + BT_CTF_TYPE_ID_VARIANT) { + goto end; + } + + variant = container_of(variant_field, struct bt_ctf_field_variant, + parent); + if (variant->tag) { + tag = bt_get(variant->tag); + } +end: + return tag; +} + struct bt_ctf_field *bt_ctf_field_enumeration_get_container( struct bt_ctf_field *field) { diff --git a/include/babeltrace/ctf-ir/fields.h b/include/babeltrace/ctf-ir/fields.h index cbed745a..9ef06e28 100644 --- a/include/babeltrace/ctf-ir/fields.h +++ b/include/babeltrace/ctf-ir/fields.h @@ -170,6 +170,22 @@ extern struct bt_ctf_field *bt_ctf_field_variant_get_field( extern struct bt_ctf_field *bt_ctf_field_variant_get_current_field( struct bt_ctf_field *variant); +/* + * bt_ctf_field_variant_get_tag: get the tag field of a variant. + * + * Return the variant's associated tag field. This function, unlike + * bt_ctf_field_variant_get_field(), does not create any field; it + * returns NULL if there's no current selected field yet (and, thus, no + * associated tag). + * + * @param variant Variant field instance. + * + * Returns a field instance (enumeration) on success, NULL on error or when + * there is no currently selected field. + */ +extern struct bt_ctf_field *bt_ctf_field_variant_get_tag( + struct bt_ctf_field *variant); + /* * bt_ctf_field_enumeration_get_container: get an enumeration field's container. * -- 2.34.1