if(last_ret == TRUE ||
count >= nb_events ||
- (end_position!=NULL)?FALSE:lttv_traceset_context_ctx_pos_compare(self,
- end_position) >= 0 ||
+ ((end_position==NULL)?FALSE:(lttv_traceset_context_ctx_pos_compare(self,
+ end_position) >= 0))||
ltt_time_compare(tfc->timestamp, end) >= 0)
{
return count;
}
+LttvTracesetContextPosition *ltt_traceset_context_position_new()
+{
+ return g_new(LttvTracesetContextPosition,1);
+}
+
+
void lttv_traceset_context_position_save(const LttvTracesetContext *self,
LttvTracesetContextPosition *pos)
{
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(event!=NULL) {
+ pos->t_pos[iter_trace].tf_pos[iter_tracefile]
+ = ltt_event_position_new();
+ ltt_event_position(event,
+ pos->t_pos[iter_trace].tf_pos[iter_tracefile]);
+ } else {
+ pos->t_pos[iter_trace].tf_pos[iter_tracefile] = NULL;
+ }
if(ltt_time_compare(tfc->timestamp, timestamp) < 0)
timestamp = tfc->timestamp;
}
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]);
+ if(pos->t_pos[iter_trace].tf_pos[iter_tracefile] != NULL)
+ g_free(pos->t_pos[iter_trace].tf_pos[iter_tracefile]);
}
g_free(pos->t_pos[iter_trace].tf_pos);
}
}
+void lttv_traceset_context_position_copy(LttvTracesetContextPosition *dest,
+ const LttvTracesetContextPosition *src)
+{
+ guint nb_trace, nb_tracefile;
+ guint iter_trace, iter_tracefile;
+
+ nb_trace = dest->nb_trace = src->nb_trace;
+ dest->t_pos = g_new(LttvTraceContextPosition, nb_trace);
+
+ for(iter_trace = 0 ; iter_trace < nb_trace ; iter_trace++) {
+
+ nb_tracefile = dest->t_pos[iter_trace].nb_tracefile =
+ src->t_pos[iter_trace].nb_tracefile;
+
+ for(iter_tracefile = 0; iter_tracefile < nb_tracefile; iter_tracefile++) {
+ dest->t_pos[iter_trace].tf_pos[iter_tracefile] =
+ ltt_event_position_new();
+ if(src->t_pos[iter_trace].tf_pos[iter_tracefile] != NULL)
+ ltt_event_position_copy(
+ dest->t_pos[iter_trace].tf_pos[iter_tracefile],
+ src->t_pos[iter_trace].tf_pos[iter_tracefile]);
+ else
+ dest->t_pos[iter_trace].tf_pos[iter_tracefile] = NULL;
+ }
+ }
+
+ dest->timestamp = src->timestamp;
+}
+
gint lttv_traceset_context_ctx_pos_compare(const LttvTracesetContext *self,
const LttvTracesetContextPosition *pos)
{