%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);
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);
"""
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.
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())))
return ret;
}
+const struct bt_definition *bt_ctf_get_variant(const struct bt_definition *field)
+{
+ const struct bt_definition *ret = NULL;
+
+ if (field && bt_ctf_field_type(
+ bt_ctf_get_decl_from_def(field)) == CTF_TYPE_VARIANT) {
+ struct definition_variant *variant = container_of(field,
+ struct definition_variant, p);
+
+ ret = bt_variant_get_current_field(variant);
+ } else {
+ bt_ctf_field_set_error(-EINVAL);
+ }
+
+ return ret;
+}
+ } else {
+ bt_ctf_field_set_error(-EINVAL);
+ }
+
+ return ret;
+}
+
int bt_ctf_get_event_decl_list(int handle_id, struct bt_context *ctx,
struct bt_ctf_event_decl * const **list,
unsigned int *count)
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);
/*
* bt_ctf_field_get_error: returns the last error code encountered while