X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=include%2Fbabeltrace%2Ftypes.h;h=5523eb42987adcc7af24a6e3fe2702109f835269;hp=2aa45b8a0cdfbe6f33f0cd290bf50064ecaeae88;hb=620961f6401b2ccf70979dd758204f8a9fa3912d;hpb=98df1c9fb24d5e7e10bf628692011e130e0d8339 diff --git a/include/babeltrace/types.h b/include/babeltrace/types.h index 2aa45b8a..5523eb42 100644 --- a/include/babeltrace/types.h +++ b/include/babeltrace/types.h @@ -105,6 +105,7 @@ struct definition { GQuark name; /* Field name in its container (or 0 if unset) */ int ref; /* number of references to the definition */ GQuark path; + struct definition_scope *scope; }; typedef int (*rw_dispatch)(struct stream_pos *pos, @@ -129,6 +130,13 @@ int generic_rw(struct stream_pos *pos, struct definition *definition) return call(pos, definition); } +enum ctf_string_encoding { + CTF_STRING_NONE = 0, + CTF_STRING_UTF8, + CTF_STRING_ASCII, + CTF_STRING_UNKNOWN, +}; + /* * Because we address in bits, bitfields end up being exactly the same as * integers, except that their read/write functions must be able to deal with @@ -140,6 +148,7 @@ struct declaration_integer { int byte_order; /* byte order */ int signedness; int base; /* Base for pretty-printing: 2, 8, 10, 16 */ + enum ctf_string_encoding encoding; }; struct definition_integer { @@ -167,7 +176,6 @@ struct definition_float { struct definition_integer *sign; struct definition_integer *mantissa; struct definition_integer *exp; - struct definition_scope *scope; /* Last values read */ long double value; }; @@ -220,17 +228,10 @@ struct definition_enum { struct definition p; struct definition_integer *integer; struct declaration_enum *declaration; - struct definition_scope *scope; /* Last GQuark values read. Keeping a reference on the GQuark array. */ GArray *value; }; -enum ctf_string_encoding { - CTF_STRING_UTF8 = 0, - CTF_STRING_ASCII, - CTF_STRING_UNKNOWN, -}; - struct declaration_string { struct declaration p; enum ctf_string_encoding encoding; @@ -258,7 +259,6 @@ struct declaration_struct { struct definition_struct { struct definition p; struct declaration_struct *declaration; - struct definition_scope *scope; GPtrArray *fields; /* Array of pointers to struct definition */ }; @@ -279,7 +279,6 @@ struct declaration_variant { struct definition_variant { struct definition p; struct declaration_variant *declaration; - struct definition_scope *scope; struct definition *enum_tag; GPtrArray *fields; /* Array of pointers to struct definition */ struct definition *current_field; /* Last field read */ @@ -295,8 +294,8 @@ struct declaration_array { struct definition_array { struct definition p; struct declaration_array *declaration; - struct definition_scope *scope; GPtrArray *elems; /* Array of pointers to struct definition */ + GString *string; /* String for encoded integer children */ }; struct declaration_sequence { @@ -309,9 +308,9 @@ struct declaration_sequence { struct definition_sequence { struct definition p; struct declaration_sequence *declaration; - struct definition_scope *scope; struct definition_integer *length; GPtrArray *elems; /* Array of pointers to struct definition */ + GString *string; /* String for encoded integer children */ }; int register_declaration(GQuark declaration_name, @@ -353,9 +352,9 @@ void free_declaration_scope(struct declaration_scope *scope); * definition scopes. */ struct definition * - lookup_definition(GArray *cur_path, /* array of GQuark */ - GArray *lookup_path, /* array of GQuark */ - struct definition_scope *scope); + lookup_path_definition(GArray *cur_path, /* array of GQuark */ + GArray *lookup_path, /* array of GQuark */ + struct definition_scope *scope); int register_field_definition(GQuark field_name, struct definition *definition, struct definition_scope *scope); @@ -381,7 +380,7 @@ void definition_unref(struct definition *definition); struct declaration_integer *integer_declaration_new(size_t len, int byte_order, int signedness, size_t alignment, - int base); + int base, enum ctf_string_encoding encoding); /* * mantissa_len is the length of the number of bytes represented by the mantissa @@ -408,7 +407,7 @@ GArray *enum_uint_to_quark_set(const struct declaration_enum *enum_declaration, * Caller must release the GArray with g_array_unref(). */ GArray *enum_int_to_quark_set(const struct declaration_enum *enum_declaration, - uint64_t v); + int64_t v); /* * Returns a GArray of struct enum_range or NULL. @@ -510,4 +509,18 @@ int sequence_rw(struct stream_pos *pos, struct definition *definition); */ void append_scope_path(const char *path, GArray *q); +/* + * Lookup helpers. + */ +struct definition *lookup_definition(struct definition *definition, + const char *field_name); +struct definition_integer *lookup_integer(struct definition *definition, + const char *field_name, + int signedness); +struct definition_enum *lookup_enum(struct definition *definition, + const char *field_name, + int signedness); +struct definition *lookup_variant(struct definition *definition, + const char *field_name); + #endif /* _BABELTRACE_TYPES_H */