+ /* list in is empty, need a seek */
+ {
+ /* 1.1 Add requests to list_in */
+ GArray *ltime = g_array_new(FALSE, FALSE, sizeof(guint));
+ GArray *lpos = g_array_new(FALSE, FALSE, sizeof(guint));
+ guint i;
+
+ /* 1.1.1 Find all time requests with the lowest start time in list_out
+ * (ltime)
+ */
+ if(list_out->len > 0)
+ g_array_append_val(ltime, 0);
+ for(i=1;i<list_out->len;i++) {
+ /* Find all time requests with the lowest start time in list_out */
+ guint index_ltime = g_array_index(ltime, guint, 0);
+ EventsRequest *event_request_ltime = &g_array_index(list_out,
+ EventsRequest,
+ index_ltime);
+ EventsRequest *event_request_list_out = &g_array_index(list_out,
+ EventsRequest,
+ i);
+ int comp;
+ comp = ltt_time_compare(event_request_ltime->start_time,
+ event_request_list_out->start_time);
+ if(comp == 0)
+ g_array_append_val(ltime, i);
+ else if(comp > 0) {
+ /* Remove all elements from ltime, and add current */
+ g_array_remove_range(ltime, 0, ltime->len);
+ g_array_append_val(ltime, i);
+
+ }
+ }
+
+ /* 1.1.2 Find all position requests with the lowest position in list_out
+ * (lpos)
+ */
+ if(list_out->len > 0)
+ g_array_append(lpos, 0);
+ for(i=1;i<list_out->len;i++) {
+ /* Find all position requests with the lowest position in list_out */
+ guint index_lpos = g_array_index(lpos, guint, 0);
+ EventsRequest *event_request_lpos = &g_array_index(lpos,
+ EventsRequest,
+ index_lpos);
+ EventsRequest *event_request_list_out = &g_array_index(list_out,
+ EventsRequest,
+ i);
+ int comp;
+ comp = lttv_traceset_context_pos_pos_compare
+ (event_request_pos->start_position,
+ event_request_list_out->start_position);
+ if(comp == 0)
+ g_array_append_val(lpos, i);
+ else if(comp > 0) {
+ /* Remove all elements from lpos, and add current */
+ g_array_remove_range(lpos, 0, lpos->len);
+ g_array_append_val(lpos, i);
+ }
+ }
+
+ /* 1.1.3 If lpos.start time < ltime */
+ {
+ guint i;
+ EventsRequest *event_request_lpos = &g_array_index(lpos, 0);
+ EventsRequest *event_request_ltime = &g_array_index(ltime,0);
+ LttTime lpos_start_time =
+ lttv_traceset_context_position_get_time(event_request_lpos);
+
+ if(ltt_time_compare(lpos_start_time,
+ event_request_ltime->start_time)<0) {
+ /* Add lpos to list_in, remove them from list_out */
+
+ for(i=0;i<lpos->len;i++) {
+ /* Add to list_in */
+ guint index_lpos = g_array_index(lpos, guint, i);
+ EventsRequest *event_request_lpos =
+ &g_array_index(lpos,index_lpos);
+
+ g_array_append_val(list_in, *event_request_lpos);
+
+ }
+
+ for(i=0;i<lpos->len;i++) {
+ /* Remove from list_out */
+ guint index_lpos = g_array_index(lpos, guint, i);
+
+ g_array_remove_index_fast(list_out, index_lpos);
+ }
+
+ } else {
+ /* 1.1.4 (lpos.start time >= ltime) */
+ /* Add ltime to list_in, remove them from list_out */
+
+ for(i=0;i<ltime->len;i++) {
+ /* Add to list_in */
+ guint index_ltime = g_array_index(ltime, guint, i);
+ EventsRequest *event_request_ltime =
+ &g_array_index(ltime,index_ltime);
+
+ g_array_append_val(list_in, *event_request_ltime);
+ }
+
+ for(i=0;i<ltime->len;i++) {
+ /* Remove from list_out */
+ guint index_ltime = g_array_index(ltime, guint, i);
+
+ g_array_remove_index_fast(list_out, index_ltime);
+ }
+ }
+ }
+ g_array_free(lpos, TRUE);
+ g_array_free(ltime, TRUE);
+ }