Add support for variant fields in the Python bindings
[babeltrace.git] / bindings / python / babeltrace.i.in
index 3e228ecccc7aed2c056b6346587d3ef349cb0645..c39b53ad08866b06fbd9811aac74e3c0e7b6e750 100644 (file)
@@ -569,6 +569,7 @@ struct bt_ctf_event *bt_ctf_iter_read_event(struct bt_ctf_iter *iter);
 %rename("_bt_ctf_get_char_array") bt_ctf_get_char_array(const struct bt_definition *field);
 %rename("_bt_ctf_get_string") bt_ctf_get_string(const struct bt_definition *field);
 %rename("_bt_ctf_get_float") bt_ctf_get_float(const struct bt_definition *field);
+%rename("_bt_ctf_get_variant") bt_ctf_get_variant(const struct bt_definition *field);
 %rename("_bt_ctf_field_get_error") bt_ctf_field_get_error(void);
 %rename("_bt_ctf_get_decl_event_name") bt_ctf_get_decl_event_name(const struct
                bt_ctf_event_decl *event);
@@ -607,6 +608,7 @@ int64_t bt_ctf_get_int64(const struct bt_definition *field);
 char *bt_ctf_get_char_array(const struct bt_definition *field);
 char *bt_ctf_get_string(const struct bt_definition *field);
 double bt_ctf_get_float(const struct bt_definition *field);
+const struct bt_definition *bt_ctf_get_variant(const struct bt_definition *field);
 int bt_ctf_field_get_error(void);
 const char *bt_ctf_get_decl_event_name(const struct bt_ctf_event_decl *event);
 const char *bt_ctf_get_decl_field_name(const struct bt_ctf_field_decl *field);
@@ -1047,6 +1049,15 @@ class ctf:
                        """
                        return _bt_ctf_get_float(self._d)
 
+               def get_variant(self):
+                       """
+                       Return the variant's selected field.
+                       If the field does not exist or is not of the type requested,
+                       the value returned is undefined. To check if an error occured,
+                       use the ctf.field_error() function after accessing a field.
+                       """
+                       return _bt_ctf_get_variant(self._d)
+
                def get_value(self):
                        """
                        Return the value associated with the field according to its type.
@@ -1076,6 +1087,10 @@ class ctf:
                                        value.append(evDef.get_value())
                        elif id == ctf.type_id.FLOAT:
                                value = self.get_float()
+                       elif id == ctf.type_id.VARIANT:
+                               variant = ctf.Definition.__new__(ctf.Definition)
+                               variant._d = self.get_variant();
+                               value = variant.get_value()
 
                        if ctf.field_error():
                                raise ctf.FieldError("Error occured while accessing field {} of type {}".format(self.field_name(), ctf.type_id.get_type_id_name(self.field_type())))
This page took 0.023196 seconds and 4 git commands to generate.