Add BT_CTF_INTEGER_BASE_UNSPECIFIED
[babeltrace.git] / include / babeltrace / ctf-ir / field-types-internal.h
index 3df8e7458c9aae5695f59cd9af686aebf892c18e..f408f50b7f3727105305949ba6536d320b2715c2 100644 (file)
  * SOFTWARE.
  */
 
+#include <stdint.h>
 #include <babeltrace/ctf-writer/event-types.h>
 #include <babeltrace/ctf-writer/event-fields.h>
 #include <babeltrace/ctf-writer/writer.h>
 #include <babeltrace/ctf-ir/trace-internal.h>
 #include <babeltrace/ctf-ir/clock-class.h>
+#include <babeltrace/ctf-ir/field-types.h>
 #include <babeltrace/babeltrace-internal.h>
 #include <babeltrace/object-internal.h>
 #include <babeltrace/types.h>
-#include <babeltrace/ctf/events.h>
 #include <glib.h>
 
 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 */
This page took 0.027663 seconds and 4 git commands to generate.