+ /* list in is empty, need a seek */
+ {
+ /* 1.1 Add requests to list_in */
+ GSList *ltime = NULL;
+ GSList *lpos = NULL;
+ GSList *iter = NULL;
+
+ /* 1.1.1 Find all time requests with the lowest start time in list_out
+ * (ltime)
+ */
+ if(g_slist_length(list_out) > 0)
+ ltime = g_slist_append(ltime, g_slist_nth_data(list_out, 0));
+ for(iter=g_slist_nth(list_out,1);iter!=NULL;iter=g_slist_next(iter)) {
+ /* 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 = (EventsRequest*)g_slist_nth_data(ltime, 0);
+ EventsRequest *event_request_list_out = (EventsRequest*)iter->data;
+
+ int comp;
+ comp = ltt_time_compare(event_request_ltime->start_time,
+ event_request_list_out->start_time);
+ if(comp == 0)
+ ltime = g_slist_append(ltime, event_request_list_out);
+ else if(comp > 0) {
+ /* Remove all elements from ltime, and add current */
+ while(ltime != NULL)
+ ltime = g_slist_delete_link(ltime, g_slist_nth(ltime, 0));
+ ltime = g_slist_append(ltime, event_request_list_out);
+ }
+ }
+
+ /* 1.1.2 Find all position requests with the lowest position in list_out
+ * (lpos)
+ */
+ if(g_slist_length(list_out) > 0)
+ lpos = g_slist_append(lpos, g_slist_nth_data(list_out, 0));
+ for(iter=g_slist_nth(list_out,1);iter!=NULL;iter=g_slist_next(iter)) {
+ /* Find all position requests with the lowest position in list_out */
+ guint index_lpos = g_array_index(lpos, guint, 0);
+ EventsRequest *event_request_lpos = (EventsRequest*)g_slist_nth_data(lpos, 0);
+ EventsRequest *event_request_list_out = (EventsRequest*)iter->data;
+
+ int comp;
+ if(event_request_lpos->start_position != NULL
+ && event_request_list_out->start_position != NULL)
+ {
+ comp = lttv_traceset_context_pos_pos_compare
+ (event_request_lpos->start_position,
+ event_request_list_out->start_position);
+ } else {
+ comp = -1;
+ }
+ if(comp == 0)
+ lpos = g_slist_append(lpos, event_request_list_out);
+ else if(comp > 0) {
+ /* Remove all elements from lpos, and add current */
+ while(lpos != NULL)
+ lpos = g_slist_delete_link(lpos, g_slist_nth(lpos, 0));
+ lpos = g_slist_append(lpos, event_request_list_out);
+ }
+ }
+
+ /* 1.1.3 If lpos.start time < ltime */
+ {
+ EventsRequest *event_request_lpos = (EventsRequest*)g_slist_nth_data(lpos, 0);
+ EventsRequest *event_request_ltime = (EventsRequest*)g_slist_nth_data(ltime, 0);
+ LttTime lpos_start_time;
+
+ if(event_request_lpos != NULL
+ && event_request_lpos->start_position != NULL) {
+
+ lpos_start_time = lttv_traceset_context_position_get_time(
+ event_request_lpos->start_position);
+ if(ltt_time_compare(lpos_start_time,
+ event_request_ltime->start_time)<0) {
+ /* Add lpos to list_in, remove them from list_out */
+
+ for(iter=lpos;iter!=NULL;iter=g_slist_next(iter)) {
+ /* Add to list_in */
+ EventsRequest *event_request_lpos =
+ (EventsRequest*)iter->data;
+
+ g_slist_append(list_in, event_request_lpos);
+ /* Remove from list_out */
+ g_slist_remove(list_out, event_request_lpos);
+ }
+ }
+ } else {
+ /* 1.1.4 (lpos.start time >= ltime) */
+ /* Add ltime to list_in, remove them from list_out */
+
+ for(iter=ltime;iter!=NULL;iter=g_slist_next(iter)) {
+ /* Add to list_in */
+ EventsRequest *event_request_ltime =
+ (EventsRequest*)iter->data;
+
+ g_slist_append(list_in, event_request_ltime);
+ /* Remove from list_out */
+ g_slist_remove(list_out, event_request_ltime);
+ }
+ }
+ }
+ g_slist_free(lpos);
+ g_slist_free(ltime);
+ }