X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=include%2Fbabeltrace%2Fctf-ir%2Ffield-types-internal.h;h=f408f50b7f3727105305949ba6536d320b2715c2;hb=d2bd5ad3da0dba99582f74450e49a34689461d80;hp=3df8e7458c9aae5695f59cd9af686aebf892c18e;hpb=ac0c6bddcdde51dcbb46fc73c61d4f2330774451;p=babeltrace.git diff --git a/include/babeltrace/ctf-ir/field-types-internal.h b/include/babeltrace/ctf-ir/field-types-internal.h index 3df8e745..f408f50b 100644 --- a/include/babeltrace/ctf-ir/field-types-internal.h +++ b/include/babeltrace/ctf-ir/field-types-internal.h @@ -27,15 +27,16 @@ * SOFTWARE. */ +#include #include #include #include #include #include +#include #include #include #include -#include #include typedef void (*type_freeze_func)(struct bt_ctf_field_type *); @@ -44,7 +45,8 @@ typedef int (*type_serialize_func)(struct bt_ctf_field_type *, struct bt_ctf_field_type { struct bt_object base; - struct bt_declaration *declaration; + enum bt_ctf_field_type_id id; + unsigned int alignment; type_freeze_func freeze; type_serialize_func serialize; /* @@ -63,16 +65,12 @@ 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_class *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; + bt_bool is_signed; + unsigned int size; + enum bt_ctf_integer_base base; + enum bt_ctf_string_encoding encoding; }; struct enumeration_mapping { @@ -92,29 +90,33 @@ struct bt_ctf_field_type_enumeration { struct bt_ctf_field_type parent; struct bt_ctf_field_type *container; GPtrArray *entries; /* Array of ptrs to struct enumeration_mapping */ - struct declaration_enum declaration; + /* Only set during validation. */ + bt_bool has_overlapping_ranges; }; -struct bt_ctf_field_type_floating_point { - struct bt_ctf_field_type parent; - struct declaration_float declaration; +enum bt_ctf_field_type_enumeration_mapping_iterator_type { + ITERATOR_BY_NAME, + ITERATOR_BY_SIGNED_VALUE, + ITERATOR_BY_UNSIGNED_VALUE, +}; - /* - * 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; +struct bt_ctf_field_type_enumeration_mapping_iterator { + struct bt_object base; + struct bt_ctf_field_type_enumeration *enumeration_type; + enum bt_ctf_field_type_enumeration_mapping_iterator_type type; + int index; + union { + GQuark name_quark; + int64_t signed_value; + uint64_t unsigned_value; + } u; +}; - /* - * This is what the user sets and is never modified by internal - * code. - * - * This field must contain a `BT_CTF_BYTE_ORDER_*` value. - */ +struct bt_ctf_field_type_floating_point { + struct bt_ctf_field_type parent; enum bt_ctf_byte_order user_byte_order; + unsigned int exp_dig; + unsigned int mant_dig; }; struct structure_field { @@ -126,7 +128,6 @@ 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_struct declaration; }; struct bt_ctf_field_type_variant { @@ -136,14 +137,12 @@ struct bt_ctf_field_type_variant { 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; }; struct bt_ctf_field_type_array { struct bt_ctf_field_type parent; struct bt_ctf_field_type *element_type; unsigned int length; /* Number of elements */ - struct declaration_array declaration; }; struct bt_ctf_field_type_sequence { @@ -151,12 +150,11 @@ struct bt_ctf_field_type_sequence { struct bt_ctf_field_type *element_type; GString *length_field_name; struct bt_ctf_field_path *length_field_path; - struct declaration_sequence declaration; }; struct bt_ctf_field_type_string { struct bt_ctf_field_type parent; - struct declaration_string declaration; + enum bt_ctf_string_encoding encoding; }; BT_HIDDEN @@ -177,31 +175,10 @@ int bt_ctf_field_type_serialize(struct bt_ctf_field_type *type, BT_HIDDEN int bt_ctf_field_type_validate(struct bt_ctf_field_type *type); -BT_HIDDEN -const char *bt_ctf_field_type_enumeration_get_mapping_name_unsigned( - struct bt_ctf_field_type_enumeration *enumeration_type, - uint64_t value); - -BT_HIDDEN -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); - 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); @@ -219,12 +196,6 @@ BT_HIDDEN 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 -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); @@ -234,7 +205,7 @@ 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); +int64_t 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( @@ -244,4 +215,120 @@ BT_HIDDEN int bt_ctf_field_type_get_field_index(struct bt_ctf_field_type *type, const char *name); +BT_HIDDEN +int bt_ctf_field_type_integer_set_mapped_clock_class_no_check( + struct bt_ctf_field_type *int_field_type, + struct bt_ctf_clock_class *clock_class); + +static inline +const char *bt_ctf_field_type_id_string(enum bt_ctf_field_type_id type_id) +{ + switch (type_id) { + case BT_CTF_FIELD_TYPE_ID_UNKNOWN: + return "BT_CTF_FIELD_TYPE_ID_UNKNOWN"; + case BT_CTF_FIELD_TYPE_ID_INTEGER: + return "BT_CTF_FIELD_TYPE_ID_INTEGER"; + case BT_CTF_FIELD_TYPE_ID_FLOAT: + return "BT_CTF_FIELD_TYPE_ID_FLOAT"; + case BT_CTF_FIELD_TYPE_ID_ENUM: + return "BT_CTF_FIELD_TYPE_ID_ENUM"; + case BT_CTF_FIELD_TYPE_ID_STRING: + return "BT_CTF_FIELD_TYPE_ID_STRING"; + case BT_CTF_FIELD_TYPE_ID_STRUCT: + return "BT_CTF_FIELD_TYPE_ID_STRUCT"; + case BT_CTF_FIELD_TYPE_ID_ARRAY: + return "BT_CTF_FIELD_TYPE_ID_ARRAY"; + case BT_CTF_FIELD_TYPE_ID_SEQUENCE: + return "BT_CTF_FIELD_TYPE_ID_SEQUENCE"; + case BT_CTF_FIELD_TYPE_ID_VARIANT: + return "BT_CTF_FIELD_TYPE_ID_VARIANT"; + default: + return "(unknown)"; + } +}; + +static inline +const char *bt_ctf_byte_order_string(enum bt_ctf_byte_order bo) +{ + switch (bo) { + case BT_CTF_BYTE_ORDER_UNKNOWN: + return "BT_CTF_BYTE_ORDER_UNKNOWN"; + case BT_CTF_BYTE_ORDER_NONE: + return "BT_CTF_BYTE_ORDER_NONE"; + case BT_CTF_BYTE_ORDER_NATIVE: + return "BT_CTF_BYTE_ORDER_NATIVE"; + case BT_CTF_BYTE_ORDER_LITTLE_ENDIAN: + return "BT_CTF_BYTE_ORDER_LITTLE_ENDIAN"; + case BT_CTF_BYTE_ORDER_BIG_ENDIAN: + return "BT_CTF_BYTE_ORDER_BIG_ENDIAN"; + case BT_CTF_BYTE_ORDER_NETWORK: + return "BT_CTF_BYTE_ORDER_NETWORK"; + default: + return "(unknown)"; + } +}; + +static inline +const char *bt_ctf_string_encoding_string(enum bt_ctf_string_encoding encoding) +{ + switch (encoding) { + case BT_CTF_STRING_ENCODING_UNKNOWN: + return "BT_CTF_STRING_ENCODING_UNKNOWN"; + case BT_CTF_STRING_ENCODING_NONE: + return "BT_CTF_STRING_ENCODING_NONE"; + case BT_CTF_STRING_ENCODING_UTF8: + return "BT_CTF_STRING_ENCODING_UTF8"; + case BT_CTF_STRING_ENCODING_ASCII: + return "BT_CTF_STRING_ENCODING_ASCII"; + default: + return "(unknown)"; + } +}; + +static inline +const char *bt_ctf_integer_base_string(enum bt_ctf_integer_base base) +{ + switch (base) { + case BT_CTF_INTEGER_BASE_UNKNOWN: + return "BT_CTF_INTEGER_BASE_UNKNOWN"; + case BT_CTF_INTEGER_BASE_UNSPECIFIED: + return "BT_CTF_INTEGER_BASE_UNSPECIFIED"; + case BT_CTF_INTEGER_BASE_BINARY: + return "BT_CTF_INTEGER_BASE_BINARY"; + case BT_CTF_INTEGER_BASE_OCTAL: + return "BT_CTF_INTEGER_BASE_OCTAL"; + case BT_CTF_INTEGER_BASE_DECIMAL: + return "BT_CTF_INTEGER_BASE_DECIMAL"; + case BT_CTF_INTEGER_BASE_HEXADECIMAL: + return "BT_CTF_INTEGER_BASE_HEXADECIMAL"; + default: + return "(unknown)"; + } +} + +static inline +const char *bt_ctf_scope_string(enum bt_ctf_scope scope) +{ + switch (scope) { + case BT_CTF_SCOPE_UNKNOWN: + return "BT_CTF_SCOPE_UNKNOWN"; + case BT_CTF_SCOPE_TRACE_PACKET_HEADER: + return "BT_CTF_SCOPE_TRACE_PACKET_HEADER"; + case BT_CTF_SCOPE_STREAM_PACKET_CONTEXT: + return "BT_CTF_SCOPE_STREAM_PACKET_CONTEXT"; + case BT_CTF_SCOPE_STREAM_EVENT_HEADER: + return "BT_CTF_SCOPE_STREAM_EVENT_HEADER"; + case BT_CTF_SCOPE_STREAM_EVENT_CONTEXT: + return "BT_CTF_SCOPE_STREAM_EVENT_CONTEXT"; + case BT_CTF_SCOPE_EVENT_CONTEXT: + return "BT_CTF_SCOPE_EVENT_CONTEXT"; + case BT_CTF_SCOPE_EVENT_PAYLOAD: + return "BT_CTF_SCOPE_EVENT_PAYLOAD"; + case BT_CTF_SCOPE_ENV: + return "BT_CTF_SCOPE_ENV"; + default: + return "(unknown)"; + } +} + #endif /* BABELTRACE_CTF_IR_FIELD_TYPES_INTERNAL_H */