+struct ctf_stream {
+ struct ctf_stream_class *stream_class;
+ uint64_t timestamp; /* Current timestamp, in ns */
+
+ struct definition_struct *trace_packet_header;
+ struct definition_struct *stream_packet_context;
+ struct definition_struct *stream_event_header;
+ struct definition_struct *stream_event_context;
+ GPtrArray *events_by_id; /* Array of struct ctf_file_event pointers indexed by id */
+ struct definition_scope *parent_def_scope; /* for initialization */
+ int stream_definitions_created;
+};
+
+struct ctf_file_event {
+ struct definition_struct *event_context;
+ struct definition_struct *event_fields;
+};
+
+struct ctf_file_stream {
+ uint64_t stream_id;
+ struct ctf_stream stream;
+ struct ctf_stream_pos pos; /* current stream position */
+};
+
+#define CTF_TRACE_SET_FIELD(ctf_trace, field) \
+ do { \
+ (ctf_trace)->field_mask |= CTF_TRACE_ ## field; \
+ } while (0)
+
+#define CTF_TRACE_FIELD_IS_SET(ctf_trace, field) \
+ ((ctf_trace)->field_mask & CTF_TRACE_ ## field)
+
+#define CTF_TRACE_GET_FIELD(ctf_trace, field) \
+ ({ \
+ assert(CTF_TRACE_FIELD_IS_SET(ctf_trace, field)); \
+ (ctf_trace)->(field); \
+ })
+
+