X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=include%2Fbabeltrace%2Fbabeltrace.h;h=c77ea7827614cb4d89c84d5c05f8c7c22a695bb2;hp=c8b0581a4df5772294e2f8d0da254003e302d7a6;hb=aacd0c695fce3e2bcba4a1c6acd4c82346311b3e;hpb=70bd0a12b09ce7f233189cf07e090fda593ebc48 diff --git a/include/babeltrace/babeltrace.h b/include/babeltrace/babeltrace.h index c8b0581a..c77ea782 100644 --- a/include/babeltrace/babeltrace.h +++ b/include/babeltrace/babeltrace.h @@ -17,71 +17,85 @@ * all copies or substantial portions of the Software. */ +#include +#include +#include +#include +#include +#include + /* Forward declarations */ -struct babeltrace_iter; -struct babeltrace_iter_pos; -struct babeltrace_iter_stream_pos; -struct trace_collection; +struct bt_iter; struct ctf_stream_event; struct ctf_stream; +struct bt_dependencies; -/* - * babeltrace_iter_create - Allocate a trace collection iterator. - */ -struct babeltrace_iter *babeltrace_iter_create(struct trace_collection *tc); +enum bt_cb_ret { + BT_CB_OK = 0, + BT_CB_OK_STOP = 1, + BT_CB_ERROR_STOP = 2, + BT_CB_ERROR_CONTINUE = 3, +}; /* - * babeltrace_iter_destroy - Free a trace collection iterator. + * Receives a variable number of strings as parameter, ended with NULL. */ -void babeltrace_iter_destroy(struct babeltrace_iter *iter); +struct bt_dependencies *babeltrace_dependencies_create(const char *first, ...); /* - * babeltrace_iter_next: Move trace collection position to the next event. - * - * Returns 0 on success, a negative value on error + * struct bt_dependencies must be destroyed explicitly if not passed as + * parameter to a bt_iter_add_callback(). */ -int babeltrace_iter_next(struct babeltrace_iter *iter); +void babeltrace_dependencies_destroy(struct bt_dependencies *dep); /* - * babeltrace_iter_get_pos - Get the current trace collection position. + * bt_iter_add_callback: Add a callback to iterator. * - * The position returned by this function needs to be freed by - * babeltrace_iter_free_pos after use. - */ -struct babeltrace_iter_pos * - babeltrace_iter_get_pos(struct babeltrace_iter *iter); - -/* - * babeltrace_iter_free_pos - Free the position. - */ -void babeltrace_iter_free_pos(struct babeltrace_iter_pos *pos); - -/* - * babeltrace_iter_seek_pos - Seek the trace collection to the position. - */ -int babeltrace_iter_seek_pos(struct babeltrace_iter *iter, - struct babeltrace_iter_pos *pos); - -/* - * babeltrace_iter_seek_time: Seek the trace collection to the given timestamp. + * @iter: trace collection iterator (input) + * @event: event to target. 0 for all events. + * @private_data: private data pointer to pass to the callback + * @flags: specific flags controlling the behavior of this callback + * (or'd). + * + * @callback: function pointer to call + * @depends: struct bt_dependency detailing the required computation results. + * Ends with 0. + * @weak_depends: struct bt_dependency detailing the optional computation + * results that can be optionally consumed by this + * callback. + * @provides: struct bt_dependency detailing the computation results + * provided by this callback. + * Ends with 0. + * + * "depends", "weak_depends" and "provides" memory is handled by the + * babeltrace library after this call succeeds or fails. These objects + * can still be used by the caller until the babeltrace iterator is + * destroyed, but they belong to the babeltrace library. * - * Return EOF if timestamp is after the last event of the trace collection. - * Return other negative value for other errors. - * Return 0 for success. + * (note to implementor: we need to keep a gptrarray of struct + * bt_dependencies to "garbage collect" in struct bt_iter, and + * dependencies need to have a refcount to handle the case where they + * would be passed to more than one iterator. Upon iterator detroy, we + * iterate on all the gc ptrarray and decrement the refcounts, freeing + * if we reach 0.) + * (note to implementor: we calculate the dependency graph when + * bt_iter_read_event() is executed after a + * bt_iter_add_callback(). Beware that it is valid to create/add + * callbacks/read/add more callbacks/read some more.) */ -int babeltrace_iter_seek_time(struct babeltrace_iter *iter, - uint64_t timestamp); +int bt_iter_add_callback(struct bt_iter *iter, + bt_intern_str event, void *private_data, int flags, + enum bt_cb_ret (*callback)(struct bt_ctf_event *ctf_data, + void *caller_data), + struct bt_dependencies *depends, + struct bt_dependencies *weak_depends, + struct bt_dependencies *provides); /* - * babeltrace_iter_read_event: Read the iterator's current event data. - * - * @iter: trace collection iterator (input) - * @stream: stream containing event at current position (output) - * @event: current event (output) - * Return 0 on success, negative error value on error. + * For flags parameter above. */ -int babeltrace_iter_read_event(struct babeltrace_iter *iter, - struct ctf_stream **stream, - struct ctf_stream_event **event); +enum { + BT_FLAGS_FREE_PRIVATE_DATA = (1 << 0), +}; #endif /* _BABELTRACE_H */