X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=include%2Fbabeltrace%2Fctf-ir%2Fevent-types-internal.h;h=3adae33118f7d4f89d63b3758ef430178e316c9f;hb=32fe3f28047342b3b0ad04ce0c03bfb97e11127f;hp=58a94045a034cf9384d5d9372c073652283cb475;hpb=bc37ae52aa6face901440bf7eb2171104b5343d8;p=babeltrace.git diff --git a/include/babeltrace/ctf-ir/event-types-internal.h b/include/babeltrace/ctf-ir/event-types-internal.h index 58a94045..3adae331 100644 --- a/include/babeltrace/ctf-ir/event-types-internal.h +++ b/include/babeltrace/ctf-ir/event-types-internal.h @@ -28,21 +28,41 @@ */ #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_ctf_base base; struct bt_declaration *declaration; type_freeze_func freeze; type_serialize_func serialize; @@ -56,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 { @@ -95,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; @@ -118,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; }; @@ -154,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 */