+}
+
+guint lttv_process_traceset_seek_n_forward(LttvTraceset *traceset,
+ guint n,
+ check_handler *check,
+ gboolean *stop_flag,
+ LttvFilter *filter1,
+ LttvFilter *filter2,
+ LttvFilter *filter3,
+ gpointer data)
+{
+ struct bt_ctf_event *bt_event;
+ unsigned count = 0;
+ while(count < n) {
+ if(bt_iter_next(bt_ctf_get_iter(traceset->iter)) < 0) {
+ printf("ERROR NEXT\n");
+ break;
+ }
+ count++;
+ }
+ return count;
+}
+
+guint lttv_process_traceset_seek_n_backward(LttvTraceset *ts,
+ guint n,
+ gdouble ratio,
+ check_handler *check,
+ gboolean *stop_flag,
+ LttvFilter *filter1,
+ LttvFilter *filter2,
+ LttvFilter *filter3,
+ gpointer data)
+{
+ guint i, count, ret;
+ gint extraEvent = 0;
+ guint64 initialTimeStamp, previousTimeStamp;
+ LttvTracesetPosition *initialPos, *previousPos, *currentPos;
+
+ /*Save initial position of the traceset*/
+ initialPos = lttv_traceset_create_position (ts);
+
+ /*Get the timespan of the initial position*/
+ initialTimeStamp = lttv_traceset_position_get_timestamp(initialPos);
+ /*
+ * Create a position before the initial timestamp according
+ * to the ratio of nanosecond/nanosecond hopefully before the
+ * the desired seek position
+ */
+ while(1){
+ previousTimeStamp = initialTimeStamp - n*(guint)ceil(ratio);
+
+ previousPos = lttv_traceset_create_time_position(ts,ltt_time_from_uint64(previousTimeStamp));
+ if(initialTimeStamp == previousTimeStamp)
+ break;
+
+ currentPos = lttv_traceset_create_time_position(ts,ltt_time_from_uint64(previousTimeStamp));
+ /*move traceset position */
+ lttv_traceset_seek_to_position(previousPos);
+ /* iterate to the initial position counting the number of event*/
+ count = 0;
+ do {
+ if((ret = lttv_traceset_position_compare(currentPos,initialPos)) == 1){
+ bt_iter_next(bt_ctf_get_iter(ts->iter));
+ lttv_traceset_destroy_position(currentPos);
+ currentPos = lttv_traceset_create_position(ts);
+ count++;
+ }
+ }while(ret != 0);
+ lttv_traceset_destroy_position(currentPos);
+ /*substract the desired number of event to the count*/
+ extraEvent = count - n;
+ if(extraEvent >= 0){
+ //if the extraEvent is over 0 go back to previousPos and
+ //move forward the value of extraEvent times
+ lttv_traceset_seek_to_position(previousPos);
+
+ for(i = 0 ; i < extraEvent ; i++){
+ if(bt_iter_next(bt_ctf_get_iter(ts->iter)) < 0){
+ printf("ERROR NEXT\n");
+ break;
+ }
+
+ }
+ break; /* we successfully seeked backward */
+ }
+ else{ /* if the extraEvent is below 0 create a position before and start over*/
+ ratio = ratio * 16;
+ }
+ }
+ return 0;