#ifndef PROCESSTRACE_H
#define PROCESSTRACE_H
+#include <string.h>
#include <lttv/traceset.h>
#include <lttv/attribute.h>
#include <lttv/hook.h>
#include <ltt/ltt.h>
-#include <ltt/markers.h>
+#include <ltt/marker.h>
/* This is the generic part of trace processing. All events within a
certain time interval are accessed and processing hooks are called for
guint lttv_process_traceset_middle(LttvTracesetContext *self,
LttTime end,
- guint nb_events,
+ gulong nb_events,
const LttvTracesetContextPosition *end_position);
void lttv_process_traceset_end(LttvTracesetContext *self,
gpointer hook_data;
} LttvTraceHook;
-#define FIELD_ARRAY(val) ({ (val), 0 })
-
-/* Get the head of marker list correcponding to the given trace hook.
+/* Get the head of marker list corresponding to the given trace hook.
*/
struct marker_info *lttv_trace_hook_get_marker(LttTrace *t, LttvTraceHook *th);
-void lttv_trace_hook_destroy(GArray *th);
+/* Remove the hooks from the array. Does not free the array itself. */
+void lttv_trace_hook_remove_all(GArray **th);
/* Search in the trace for the id of the named event type within the named
facility. Then, find the three (if non null) named fields. All that
is useful to find the specific id for an event within a trace, for
registering a hook using this structure as event data;
it already contains the (up to three) needed fields handles.
- Returns an array of LttvTraceHook, or NULL on error.
+ Returns the modified LttvTraceHook array.
+ Prints warnings if events or markers are not found. returns 1 on error,
+ 0 on success.
+ Adds the hooks to the trace_hooks array.
*/
-GArray *lttv_trace_find_hook(LttTrace *t, GQuark marker_name,
- GQuark fields[], LttvHook h, gpointer hook_data);
+int lttv_trace_find_hook(LttTrace *t, GQuark facility_name, GQuark event_name,
+ GQuark fields[], LttvHook h, gpointer hook_data, GArray **trace_hooks);
+
+static inline struct marker_field *
+lttv_trace_get_hook_field(LttvTraceHook *hook, unsigned int index)
+{
+ return g_ptr_array_index(hook->fields, index);
+}
+
+static inline GQuark lttv_merge_facility_event_name(GQuark fac, GQuark ev)
+{
+ char *tmp;
+ const char *sfac, *sev;
+ GQuark ret;
+
+ sfac = g_quark_to_string(fac);
+ sev = g_quark_to_string(ev);
+ tmp = g_new(char, strlen(sfac) + strlen(sev) + 3); /* 3: _ \0 \0 */
+ strcpy(tmp, sfac);
+ strcat(tmp, "_");
+ strcat(tmp, sev);
+ ret = g_quark_from_string(tmp);
+ g_free(tmp);
+ return ret;
+}
LttvTracefileContext *lttv_traceset_context_get_current_tfc(
LttvTracesetContext *self);
LttvFilter *filter3,
gpointer data);
+#define FIELD_ARRAY(val...) ((GQuark[]){ val, 0 })
#endif // PROCESSTRACE_H