X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=include%2Fbabeltrace%2Fbabeltrace.h;h=c77ea7827614cb4d89c84d5c05f8c7c22a695bb2;hp=b7646a1d57320d1edd4e1863f3d243816f160a55;hb=aacd0c695fce3e2bcba4a1c6acd4c82346311b3e;hpb=d63ca2cd2249356c28a63653d30c681e9a7ce249 diff --git a/include/babeltrace/babeltrace.h b/include/babeltrace/babeltrace.h index b7646a1d..c77ea782 100644 --- a/include/babeltrace/babeltrace.h +++ b/include/babeltrace/babeltrace.h @@ -1,30 +1,101 @@ #ifndef _BABELTRACE_H #define _BABELTRACE_H -#include +/* + * BabelTrace API + * + * Copyright 2010-2011 - 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 + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + */ -#define BABELTRACE_VERSION_MAJOR 0 -#define BABELTRACE_VERSION_MINOR 1 +#include +#include +#include +#include +#include +#include -extern int babeltrace_verbose, babeltrace_debug; +/* Forward declarations */ +struct bt_iter; +struct ctf_stream_event; +struct ctf_stream; +struct bt_dependencies; -#define printf_verbose(fmt, args...) \ - do { \ - if (babeltrace_verbose) \ - printf("[verbose] " fmt, ## args); \ - } while (0) +enum bt_cb_ret { + BT_CB_OK = 0, + BT_CB_OK_STOP = 1, + BT_CB_ERROR_STOP = 2, + BT_CB_ERROR_CONTINUE = 3, +}; -#define printf_debug(fmt, args...) \ - do { \ - if (babeltrace_debug) \ - printf("[debug] " fmt, ## args); \ - } while (0) +/* + * Receives a variable number of strings as parameter, ended with NULL. + */ +struct bt_dependencies *babeltrace_dependencies_create(const char *first, ...); -struct trace_descriptor; +/* + * struct bt_dependencies must be destroyed explicitly if not passed as + * parameter to a bt_iter_add_callback(). + */ +void babeltrace_dependencies_destroy(struct bt_dependencies *dep); -int convert_trace(struct trace_descriptor *td_write, - struct trace_descriptor *td_read); +/* + * bt_iter_add_callback: Add a callback to iterator. + * + * @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. + * + * (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 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); -extern int opt_field_names; +/* + * For flags parameter above. + */ +enum { + BT_FLAGS_FREE_PRIVATE_DATA = (1 << 0), +}; -#endif +#endif /* _BABELTRACE_H */