X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=include%2Fbabeltrace%2Fctf-ir%2Fevent-types-internal.h;h=ed085dabf27bce5bb3544f3e8160ee7108ad8a76;hb=83509119a945fc77faff869daaf48627e1c4b3fa;hp=dd80bdceb89026560318236b3eaed7286800c9b3;hpb=2f2d8e05490c5f008df8838ff6b8cf7bfcbd9652;p=babeltrace.git diff --git a/include/babeltrace/ctf-ir/event-types-internal.h b/include/babeltrace/ctf-ir/event-types-internal.h index dd80bdce..ed085dab 100644 --- a/include/babeltrace/ctf-ir/event-types-internal.h +++ b/include/babeltrace/ctf-ir/event-types-internal.h @@ -28,23 +28,42 @@ */ #include -#include #include #include #include #include +#include #include #include #include -typedef void(*type_freeze_func)(struct bt_ctf_field_type *); -typedef int(*type_serialize_func)(struct bt_ctf_field_type *, +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_ref ref_count; + struct bt_object base; struct bt_declaration *declaration; - GString *alias_name; type_freeze_func freeze; type_serialize_func serialize; /* @@ -57,6 +76,7 @@ struct bt_ctf_field_type { struct bt_ctf_field_type_integer { struct bt_ctf_field_type parent; struct declaration_integer declaration; + struct bt_ctf_clock *mapped_clock; }; struct enumeration_mapping { @@ -96,13 +116,14 @@ struct bt_ctf_field_type_structure { struct bt_ctf_field_type parent; GHashTable *field_name_to_index; GPtrArray *fields; /* Array of pointers to struct structure_field */ - struct declaration_enum declaration; + struct declaration_struct declaration; }; 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; GHashTable *field_name_to_index; GPtrArray *fields; /* Array of pointers to struct structure_field */ struct declaration_variant declaration; @@ -119,6 +140,7 @@ struct bt_ctf_field_type_sequence { struct bt_ctf_field_type parent; struct bt_ctf_field_type *element_type; GString *length_field_name; + struct bt_ctf_field_path *length_field_path; struct declaration_sequence declaration; }; @@ -155,4 +177,65 @@ const char *bt_ctf_field_type_enumeration_get_mapping_name_signed( struct bt_ctf_field_type_enumeration *enumeration_type, int64_t value); +/* Override field type's byte order only if it is set to "native" */ +BT_HIDDEN +void bt_ctf_field_type_set_native_byte_order( + struct bt_ctf_field_type *type, int byte_order); + +/* Deep copy a field type */ +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); + +/* Replace an existing field's type in a structure */ +BT_HIDDEN +int bt_ctf_field_type_structure_set_field_index( + struct bt_ctf_field_type *structure, + struct bt_ctf_field_type *field, int index); + +BT_HIDDEN +int bt_ctf_field_type_variant_get_field_name_index( + struct bt_ctf_field_type *variant, const char *name); + +BT_HIDDEN +int bt_ctf_field_type_sequence_set_length_field_path( + struct bt_ctf_field_type *type, + struct bt_ctf_field_path *path); + +BT_HIDDEN +struct bt_ctf_field_path *bt_ctf_field_type_sequence_get_length_field_path( + struct bt_ctf_field_type *type); + +BT_HIDDEN +int bt_ctf_field_type_variant_set_tag_field_path(struct bt_ctf_field_type *type, + struct bt_ctf_field_path *path); + +BT_HIDDEN +struct bt_ctf_field_path *bt_ctf_field_type_variant_get_tag_field_path( + struct bt_ctf_field_type *type); + +BT_HIDDEN +int bt_ctf_field_type_variant_set_tag(struct bt_ctf_field_type *type, + struct bt_ctf_field_type *tag); + +/* Replace an existing field's type in a variant */ +BT_HIDDEN +int bt_ctf_field_type_variant_set_field_index( + struct bt_ctf_field_type *variant, + struct bt_ctf_field_type *field, int index); + #endif /* BABELTRACE_CTF_IR_EVENT_TYPES_INTERNAL_H */