#include <babeltrace/ctf/events.h>
#include <stdbool.h>
#include <stdint.h>
-#include <limits.h>
+#include <babeltrace/compat/limits.h>
#include <string.h>
#include <glib.h>
#include <assert.h>
GArray *scope_path; /* array of GQuark */
};
-struct declaration {
+struct bt_declaration {
enum ctf_type_id id;
size_t alignment; /* type alignment, in bits */
int ref; /* number of references to the type */
/*
* declaration_free called with declaration ref is decremented to 0.
*/
- void (*declaration_free)(struct declaration *declaration);
+ void (*declaration_free)(struct bt_declaration *declaration);
struct bt_definition *
- (*definition_new)(struct declaration *declaration,
+ (*definition_new)(struct bt_declaration *declaration,
struct definition_scope *parent_scope,
GQuark field_name, int index,
const char *root_name);
};
struct bt_definition {
- struct declaration *declaration;
+ struct bt_declaration *declaration;
int index; /* Position of the definition in its container */
GQuark name; /* Field name in its container (or 0 if unset) */
int ref; /* number of references to the definition */
rw_dispatch *rw_table; /* rw dispatch table */
int (*event_cb)(struct bt_stream_pos *pos,
struct ctf_stream_definition *stream);
+ int (*pre_trace_cb)(struct bt_stream_pos *pos,
+ struct bt_trace_descriptor *trace);
+ int (*post_trace_cb)(struct bt_stream_pos *pos,
+ struct bt_trace_descriptor *trace);
+ struct bt_trace_descriptor *trace;
};
static inline
* read/write non aligned on CHAR_BIT.
*/
struct declaration_integer {
- struct declaration p;
+ struct bt_declaration p;
size_t len; /* length, in bits. */
- int byte_order; /* byte order */
+ int byte_order; /* LITTLE_ENDIAN/BIG_ENDIAN, 0 == "Native" */
int signedness;
int base; /* Base for pretty-printing: 2, 8, 10, 16 */
enum ctf_string_encoding encoding;
};
struct declaration_float {
- struct declaration p;
+ struct bt_declaration p;
struct declaration_integer *sign;
struct declaration_integer *mantissa;
struct declaration_integer *exp;
- int byte_order;
+ int byte_order; /* LITTLE_ENDIAN/BIG_ENDIAN, 0 == "Native" */
/* TODO: we might want to express more info about NaN, +inf and -inf */
};
};
struct declaration_enum {
- struct declaration p;
+ struct bt_declaration p;
struct declaration_integer *integer_declaration;
struct enum_table table;
};
};
struct declaration_string {
- struct declaration p;
+ struct bt_declaration p;
enum ctf_string_encoding encoding;
};
struct declaration_field {
GQuark name;
- struct declaration *declaration;
+ struct bt_declaration *declaration;
};
struct declaration_struct {
- struct declaration p;
+ struct bt_declaration p;
GHashTable *fields_by_name; /* Tuples (field name, field index) */
struct declaration_scope *scope;
GArray *fields; /* Array of declaration_field */
};
struct declaration_untagged_variant {
- struct declaration p;
+ struct bt_declaration p;
GHashTable *fields_by_tag; /* Tuples (field tag, field index) */
struct declaration_scope *scope;
GArray *fields; /* Array of declaration_field */
};
struct declaration_variant {
- struct declaration p;
+ struct bt_declaration p;
struct declaration_untagged_variant *untagged_variant;
GArray *tag_name; /* Array of GQuark */
};
};
struct declaration_array {
- struct declaration p;
+ struct bt_declaration p;
size_t len;
- struct declaration *elem;
+ struct bt_declaration *elem;
struct declaration_scope *scope;
};
};
struct declaration_sequence {
- struct declaration p;
+ struct bt_declaration p;
GArray *length_name; /* Array of GQuark */
- struct declaration *elem;
+ struct bt_declaration *elem;
struct declaration_scope *scope;
};
};
int bt_register_declaration(GQuark declaration_name,
- struct declaration *declaration,
+ struct bt_declaration *declaration,
struct declaration_scope *scope);
-struct declaration *bt_lookup_declaration(GQuark declaration_name,
+struct bt_declaration *bt_lookup_declaration(GQuark declaration_name,
struct declaration_scope *scope);
/*
return definition->path == path;
}
-void bt_declaration_ref(struct declaration *declaration);
-void bt_declaration_unref(struct declaration *declaration);
+void bt_declaration_ref(struct bt_declaration *declaration);
+void bt_declaration_unref(struct bt_declaration *declaration);
void bt_definition_ref(struct bt_definition *definition);
void bt_definition_unref(struct bt_definition *definition);
char *bt_get_string(const struct bt_definition *field);
enum ctf_string_encoding bt_get_string_encoding(const struct bt_definition *field);
+double bt_get_float(const struct bt_definition *field);
+
+const struct bt_definition *bt_get_variant_field(struct bt_definition *definition);
+
struct declaration_struct *
bt_struct_declaration_new(struct declaration_scope *parent_scope,
uint64_t min_align);
void bt_struct_declaration_add_field(struct declaration_struct *struct_declaration,
const char *field_name,
- struct declaration *field_declaration);
+ struct bt_declaration *field_declaration);
/*
* Returns the index of a field within a structure.
*/
bt_struct_declaration_get_field_from_index(struct declaration_struct *struct_declaration,
int index);
struct bt_definition *
-bt_struct_definition_get_field_from_index(struct definition_struct *struct_definition,
+bt_struct_definition_get_field_from_index(const struct definition_struct *struct_definition,
int index);
int bt_struct_rw(struct bt_stream_pos *pos, struct bt_definition *definition);
-uint64_t bt_struct_declaration_len(struct declaration_struct *struct_declaration);
+uint64_t bt_struct_declaration_len(const struct declaration_struct *struct_declaration);
/*
* The tag enumeration is validated to ensure that it contains only mappings
void bt_untagged_variant_declaration_add_field(struct declaration_untagged_variant *untagged_variant_declaration,
const char *field_name,
- struct declaration *field_declaration);
+ struct bt_declaration *field_declaration);
struct declaration_field *
bt_untagged_variant_declaration_get_field_from_tag(struct declaration_untagged_variant *untagged_variant_declaration,
GQuark tag);
* array.
*/
struct declaration_array *
- bt_array_declaration_new(size_t len, struct declaration *elem_declaration,
+ bt_array_declaration_new(size_t len, struct bt_declaration *elem_declaration,
struct declaration_scope *parent_scope);
uint64_t bt_array_len(struct definition_array *array);
struct bt_definition *bt_array_index(struct definition_array *array, uint64_t i);
*/
struct declaration_sequence *
bt_sequence_declaration_new(const char *length_name,
- struct declaration *elem_declaration,
+ struct bt_declaration *elem_declaration,
struct declaration_scope *parent_scope);
uint64_t bt_sequence_len(struct definition_sequence *sequence);
struct bt_definition *bt_sequence_index(struct definition_sequence *sequence, uint64_t i);