#define DEFAULT_IDENTIFIER_SIZE 128
#define DEFAULT_METADATA_STRING_SIZE 4096
+struct notification_handler {
+ bt_ctf_notification_cb func;
+ void *data;
+};
+
static
void bt_ctf_trace_destroy(struct bt_object *obj);
static
return ret;
}
+int bt_ctf_trace_add_notification_handler_cb(struct bt_ctf_trace *trace,
+ bt_ctf_notification_cb handler, void *handler_data)
+{
+ int ret = 0;
+ struct notification_handler *handler_wrapper =
+ g_new0(struct notification_handler, 1);
+
+ if (!trace || !handler || !handler_wrapper) {
+ ret = -1;
+ goto error;
+ }
+
+ handler_wrapper->func = handler;
+ handler_wrapper->data = handler_data;
+ g_ptr_array_add(trace->notification_handlers, handler_wrapper);
+ return ret;
+error:
+ g_free(handler_wrapper);
+ return ret;
+}
+
BT_HIDDEN
struct bt_ctf_field_type *get_field_type(enum field_type_alias alias)
{
struct bt_ctf_stream_class;
struct bt_ctf_clock;
+/**
+ * Notification handling function type.
+ *
+ * A reference must be taken on the notification if the handler has to
+ * keep ownership of the notification beyond the invocation of the callback.
+ *
+ * @param notification Notification to handle
+ * @param data Handler private data
+ */
+typedef void (*bt_ctf_notification_cb)(
+ struct bt_notification *notification, void *data);
+
/*
* bt_ctf_trace_create: create a trace instance.
*
extern int bt_ctf_trace_set_packet_header_type(struct bt_ctf_trace *trace,
struct bt_ctf_field_type *packet_header_type);
+/*
+ * bt_ctf_trace_add_notification_handler_cb: set a notification callback
+ * which will be invoked whenever a trace's schema is modified.
+ *
+ * Register a notification handler to a trace.
+ *
+ * @param trace Trace instance.
+ * @param handler Notification handler to invoke on trace xmodification.
+ * @param handler_data Private data passed to the notification handler.
+ *
+ * Returns 0 on success, a negative value on error.
+ *
+ * Note: the notification handler will be used to serialize the trace's current
+ * state on registration. It will then be invoked on any change occuring within
+ * the trace's hierarchy.
+ */
+extern int bt_ctf_trace_add_notification_handler_cb(struct bt_ctf_trace *trace,
+ bt_ctf_notification_cb handler, void *handler_data);
+
#ifdef __cplusplus
}
#endif