+void lttv_traceset_context_position_save(const LttvTracesetContext *self,
+ LttvTracesetContextPosition *pos)
+{
+ guint nb_trace, nb_tracefile;
+ guint iter_trace, iter_tracefile;
+
+ LttvTraceContext *tc;
+
+ LttvTracefileContext *tfc;
+
+ LttEvent *event;
+
+ LttTime timestamp = self->time_span.end_time;
+
+ pos->nb_trace = nb_trace = lttv_traceset_number(self->ts);
+ pos->t_pos = g_new(LttvTraceContextPosition, nb_trace);
+
+ for(iter_trace = 0 ; iter_trace < nb_trace ; iter_trace++) {
+ tc = self->traces[iter_trace];
+ pos->t_pos[iter_trace].nb_tracefile = nb_tracefile =
+ ltt_trace_control_tracefile_number(tc->t) +
+ ltt_trace_per_cpu_tracefile_number(tc->t);
+
+ pos->t_pos[iter_trace].tf_pos = g_new(LttEventPosition*, nb_tracefile);
+ for(iter_tracefile = 0; iter_tracefile < nb_tracefile; iter_tracefile++) {
+ pos->t_pos[iter_trace].tf_pos[iter_tracefile]
+ = ltt_event_position_new();
+ tfc = tc->tracefiles[iter_tracefile];
+ event = tfc->e;
+ ltt_event_position(event,
+ pos->t_pos[iter_trace].tf_pos[iter_tracefile]);
+ if(ltt_time_compare(tfc->timestamp, timestamp) < 0)
+ timestamp = tfc->timestamp;
+ }
+ }
+ pos->timestamp = timestamp;
+}
+
+void lttv_traceset_context_position_destroy(LttvTracesetContextPosition *pos)
+{
+ guint nb_trace, nb_tracefile;
+ guint iter_trace, iter_tracefile;
+
+ nb_trace = pos->nb_trace;
+
+ for(iter_trace = 0 ; iter_trace < nb_trace ; iter_trace++) {
+ for(iter_tracefile = 0; iter_tracefile <
+ pos->t_pos[iter_trace].nb_tracefile;
+ iter_tracefile++) {
+
+ g_free(pos->t_pos[iter_trace].tf_pos[iter_tracefile]);
+ }
+ g_free(pos->t_pos[iter_trace].tf_pos);
+ }
+ g_free(pos->t_pos);
+
+}
+
+gint lttv_traceset_context_ctx_pos_compare(const LttvTracesetContext *self,
+ const LttvTracesetContextPosition *pos)
+{
+ guint nb_trace, nb_tracefile;
+ guint iter_trace, iter_tracefile;
+ gint ret;
+
+ LttvTraceContext *tc;
+
+ LttvTracefileContext *tfc;
+
+ LttEvent *event;
+
+ nb_trace = lttv_traceset_number(self->ts);
+
+ if(pos->nb_trace != nb_trace)
+ g_error("lttv_traceset_context_ctx_pos_compare : nb_trace does not match.");
+
+ for(iter_trace = 0 ; iter_trace < nb_trace ; iter_trace++) {
+ tc = self->traces[iter_trace];
+ nb_tracefile = ltt_trace_control_tracefile_number(tc->t) +
+ ltt_trace_per_cpu_tracefile_number(tc->t);
+
+ if(pos->t_pos[iter_trace].nb_tracefile != nb_tracefile)
+ g_error("lttv_traceset_context_ctx_pos_compare : nb_tracefile does not match.");
+
+ for(iter_tracefile = 0; iter_tracefile < nb_tracefile; iter_tracefile++) {
+ tfc = tc->tracefiles[iter_tracefile];
+ event = tfc->e;
+ if(
+ ret =
+ ltt_event_event_position_compare(event,
+ pos->t_pos[iter_trace].tf_pos[iter_tracefile])
+ != 0)
+ return ret;
+ }
+ }
+ return 0;
+}
+
+
+gint lttv_traceset_context_pos_pos_compare(
+ const LttvTracesetContextPosition *pos1,
+ const LttvTracesetContextPosition *pos2)
+{
+ guint nb_trace, nb_tracefile;
+ guint iter_trace, iter_tracefile;
+
+ gint ret;
+
+ nb_trace = pos1->nb_trace;
+ if(nb_trace != pos2->nb_trace)
+ g_error("lttv_traceset_context_pos_pos_compare : nb_trace does not match.");
+
+ for(iter_trace = 0 ; iter_trace < nb_trace ; iter_trace++) {
+
+ nb_tracefile = pos1->t_pos[iter_trace].nb_tracefile;
+ if(nb_tracefile != pos2->t_pos[iter_trace].nb_tracefile)
+ g_error("lttv_traceset_context_ctx_pos_compare : nb_tracefile does not match.");
+
+ for(iter_tracefile = 0; iter_tracefile < nb_tracefile; iter_tracefile++) {
+ if(ret =
+ ltt_event_position_compare(
+ pos1->t_pos[iter_trace].tf_pos[iter_tracefile],
+ pos2->t_pos[iter_trace].tf_pos[iter_tracefile])
+ != 0)
+ return ret;
+ }
+ }
+ return 0;
+}
+
+
+LttTime lttv_traceset_context_position_get_time(
+ const LttvTracesetContextPosition *pos)
+{
+ return pos->timestamp;
+}
+
+
+LttvTracefileContext *lttv_traceset_context_get_current_tfc(LttvTracesetContext *self)
+{
+ GTree *pqueue = self->pqueue;
+ LttvTracefileContext *tfc;
+
+ g_tree_foreach(pqueue, get_first, &tfc);
+
+ return tfc;
+}