ir: add bt_ctf_field_variant_get_current_field()
authorPhilippe Proulx <eeppeliteloop@gmail.com>
Mon, 25 May 2015 00:24:54 +0000 (20:24 -0400)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Mon, 25 May 2015 20:23:30 +0000 (16:23 -0400)
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
formats/ctf/ir/event-fields.c
include/babeltrace/ctf-ir/event-fields.h

index 29c5397f7d2fe9406afbc3c90c6d567ca5c46eef..00c38c1f72a2a8236b89cf27cd8d6dd916c1fe04 100644 (file)
@@ -652,6 +652,31 @@ end:
        return new_field;
 }
 
+struct bt_ctf_field *bt_ctf_field_variant_get_current_field(
+               struct bt_ctf_field *variant_field)
+{
+       struct bt_ctf_field *current_field = NULL;
+       struct bt_ctf_field_variant *variant;
+
+       if (!variant_field ||
+               bt_ctf_field_type_get_type_id(variant_field->type) !=
+                       CTF_TYPE_VARIANT) {
+               goto end;
+       }
+
+       variant = container_of(variant_field, struct bt_ctf_field_variant,
+               parent);
+
+       if (variant->payload) {
+               current_field = variant->payload;
+               bt_ctf_field_get(current_field);
+               goto end;
+       }
+
+end:
+       return current_field;
+}
+
 struct bt_ctf_field *bt_ctf_field_enumeration_get_container(
        struct bt_ctf_field *field)
 {
index 1d8f6439e3a761f1cf0efba5d0548ff73a90a1a8..4a55b449af3491a25cb71d263758dd2a9f78a85e 100644 (file)
@@ -154,6 +154,22 @@ extern struct bt_ctf_field *bt_ctf_field_sequence_get_field(
 extern struct bt_ctf_field *bt_ctf_field_variant_get_field(
                struct bt_ctf_field *variant, struct bt_ctf_field *tag);
 
+/*
+ * bt_ctf_field_variant_get_current_field: get the current selected field of a
+ *     variant.
+ *
+ * Return the variant's current selected 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.
+ *
+ * @param variant Variant field instance.
+ *
+ * Returns a field instance on success, NULL on error or when there's no
+ * current selected field.
+ */
+extern struct bt_ctf_field *bt_ctf_field_variant_get_current_field(
+               struct bt_ctf_field *variant);
+
 /*
  * bt_ctf_field_enumeration_get_container: get an enumeration field's container.
  *
This page took 0.025775 seconds and 4 git commands to generate.