X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=include%2Fbabeltrace%2Fctf-ir%2Fevent-types-internal.h;h=8eaaeb88e8cda89d083fe6cf91fe42bcf72ec03d;hb=b011f6b0d77e0a93fffa1b47ee32e1b07dd16a8a;hp=d5290f575cda586d10cefdb1e44670e891610b97;hpb=de3dd40e6fcad56e227f5fc8a8290fbaa88b4e07;p=babeltrace.git diff --git a/include/babeltrace/ctf-ir/event-types-internal.h b/include/babeltrace/ctf-ir/event-types-internal.h index d5290f57..8eaaeb88 100644 --- a/include/babeltrace/ctf-ir/event-types-internal.h +++ b/include/babeltrace/ctf-ir/event-types-internal.h @@ -31,8 +31,8 @@ #include #include #include -#include #include +#include #include #include #include @@ -41,28 +41,8 @@ typedef void (*type_freeze_func)(struct bt_ctf_field_type *); typedef int (*type_serialize_func)(struct bt_ctf_field_type *, struct metadata_context *); -enum bt_ctf_node { - CTF_NODE_UNKNOWN = -1, - CTF_NODE_ENV = 0, - CTF_NODE_TRACE_PACKET_HEADER = 1, - CTF_NODE_STREAM_PACKET_CONTEXT = 2, - CTF_NODE_STREAM_EVENT_HEADER = 3, - CTF_NODE_STREAM_EVENT_CONTEXT = 4, - CTF_NODE_EVENT_CONTEXT = 5, - CTF_NODE_EVENT_FIELDS = 6, -}; - -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. - */ - GArray *path_indexes; -}; - struct bt_ctf_field_type { - struct bt_ctf_base base; + struct bt_object base; struct bt_declaration *declaration; type_freeze_func freeze; type_serialize_func serialize; @@ -71,12 +51,27 @@ struct bt_ctf_field_type { * 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 { @@ -95,16 +90,30 @@ 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 { @@ -123,7 +132,7 @@ struct bt_ctf_field_type_variant { struct bt_ctf_field_type parent; GString *tag_name; struct bt_ctf_field_type_enumeration *tag; - struct bt_ctf_field_path *tag_path; + struct bt_ctf_field_path *tag_field_path; GHashTable *field_name_to_index; GPtrArray *fields; /* Array of pointers to struct structure_field */ struct declaration_variant declaration; @@ -187,16 +196,6 @@ BT_HIDDEN struct bt_ctf_field_type *bt_ctf_field_type_copy( struct bt_ctf_field_type *type); -BT_HIDDEN -struct bt_ctf_field_path *bt_ctf_field_path_create(void); - -BT_HIDDEN -struct bt_ctf_field_path *bt_ctf_field_path_copy( - struct bt_ctf_field_path *path); - -BT_HIDDEN -void bt_ctf_field_path_destroy(struct bt_ctf_field_path *path); - BT_HIDDEN int bt_ctf_field_type_structure_get_field_name_index( struct bt_ctf_field_type *structure, const char *name); @@ -221,8 +220,8 @@ int bt_ctf_field_type_variant_set_tag_field_path(struct bt_ctf_field_type *type, struct bt_ctf_field_path *path); BT_HIDDEN -int bt_ctf_field_type_variant_set_tag(struct bt_ctf_field_type *type, - struct bt_ctf_field_type *tag); +int bt_ctf_field_type_variant_set_tag_field_type(struct bt_ctf_field_type *type, + struct bt_ctf_field_type *tag_type); /* Replace an existing field's type in a variant */ BT_HIDDEN @@ -230,4 +229,23 @@ int bt_ctf_field_type_variant_set_field_index( struct bt_ctf_field_type *variant, struct bt_ctf_field_type *field, int index); +BT_HIDDEN +int bt_ctf_field_type_array_set_element_type(struct bt_ctf_field_type *array, + struct bt_ctf_field_type *element_type); + +BT_HIDDEN +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 */