struct bt_ctf_field_path {
enum bt_ctf_node root;
+
/*
* Array of integers (int) indicating the index in either
- * structures or variants that make-up the path to a field.
+ * structures, variants, arrays, or sequences that make up
+ * the path to a field type. -1 means the "current element
+ * of an array or sequence type".
*/
GArray *path_indexes;
};
* a field has been instanciated from it.
*/
int frozen;
+
+ /*
+ * This flag indicates if the field type is valid. A valid
+ * field type is _always_ frozen. All the nested field types of
+ * a valid field type are also valid (and thus frozen).
+ */
+ int valid;
};
struct bt_ctf_field_type_integer {
struct bt_ctf_field_type parent;
struct declaration_integer declaration;
struct bt_ctf_clock *mapped_clock;
+
+ /*
+ * This is what the user sets and is never modified by internal
+ * code.
+ *
+ * This field must contain a `BT_CTF_BYTE_ORDER_*` value.
+ */
+ enum bt_ctf_byte_order user_byte_order;
};
struct enumeration_mapping {
struct bt_ctf_field_type_enumeration {
struct bt_ctf_field_type parent;
struct bt_ctf_field_type *container;
- GPtrArray *entries; /* Array of pointers to struct enum_mapping */
+ GPtrArray *entries; /* Array of ptrs to struct enumeration_mapping */
struct declaration_enum declaration;
};
struct bt_ctf_field_type_floating_point {
struct bt_ctf_field_type parent;
struct declaration_float declaration;
+
+ /*
+ * The `declaration` field above contains 3 pointers pointing
+ * to the fields below. This avoids unnecessary dynamic
+ * allocations.
+ */
struct declaration_integer sign;
struct declaration_integer mantissa;
struct declaration_integer exp;
+
+ /*
+ * This is what the user sets and is never modified by internal
+ * code.
+ *
+ * This field must contain a `BT_CTF_BYTE_ORDER_*` value.
+ */
+ enum bt_ctf_byte_order user_byte_order;
};
struct structure_field {
BT_HIDDEN
struct bt_ctf_field_path *bt_ctf_field_path_create(void);
+BT_HIDDEN
+void bt_ctf_field_path_clear(struct bt_ctf_field_path *field_path);
+
BT_HIDDEN
struct bt_ctf_field_path *bt_ctf_field_path_copy(
struct bt_ctf_field_path *path);
int bt_ctf_field_type_sequence_set_element_type(struct bt_ctf_field_type *array,
struct bt_ctf_field_type *element_type);
+BT_HIDDEN
+int bt_ctf_field_type_get_field_count(struct bt_ctf_field_type *type);
+
+BT_HIDDEN
+struct bt_ctf_field_type *bt_ctf_field_type_get_field_at_index(
+ struct bt_ctf_field_type *type, int index);
+
+BT_HIDDEN
+int bt_ctf_field_type_get_field_index(struct bt_ctf_field_type *type,
+ const char *name);
+
#endif /* BABELTRACE_CTF_IR_EVENT_TYPES_INTERNAL_H */