X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=include%2Fbabeltrace%2Ftypes.h;h=b4d2d4a7dc8b423a5bf1f7ebea971f381384ef2f;hp=2aa45b8a0cdfbe6f33f0cd290bf50064ecaeae88;hb=56e603733d2a16aba6fdaf149ad6a4cd42e44eda;hpb=98df1c9fb24d5e7e10bf628692011e130e0d8339 diff --git a/include/babeltrace/types.h b/include/babeltrace/types.h index 2aa45b8a..b4d2d4a7 100644 --- a/include/babeltrace/types.h +++ b/include/babeltrace/types.h @@ -6,7 +6,9 @@ * * Type Header * - * Copyright 2010, 2011 - Mathieu Desnoyers + * Copyright 2010-2011 EfficiOS Inc. and Linux Foundation + * + * Author: Mathieu Desnoyers * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -35,6 +37,7 @@ struct ctf_stream; struct stream_pos; struct format; struct definition; +struct ctf_clock; /* type scope */ struct declaration_scope { @@ -105,6 +108,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 +133,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 +151,8 @@ 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 ctf_clock *clock; }; struct definition_integer { @@ -167,9 +180,8 @@ 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; + double value; }; /* @@ -220,17 +232,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 +263,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 +283,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 +298,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 +312,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 +356,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 +384,10 @@ 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, + struct ctf_clock *clock); +uint64_t get_unsigned_int(struct definition *field); +int64_t get_signed_int(struct definition *field); /* * mantissa_len is the length of the number of bytes represented by the mantissa @@ -408,7 +414,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. @@ -428,6 +434,7 @@ struct declaration_enum * struct declaration_string * string_declaration_new(enum ctf_string_encoding encoding); +char *get_string(struct definition *field); struct declaration_struct * struct_declaration_new(struct declaration_scope *parent_scope, @@ -492,6 +499,7 @@ struct declaration_array * uint64_t array_len(struct definition_array *array); struct definition *array_index(struct definition_array *array, uint64_t i); int array_rw(struct stream_pos *pos, struct definition *definition); +GString *get_char_array(struct definition *field); /* * int_declaration and elem_declaration passed as parameter now belong @@ -510,4 +518,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 */