+
+int set_values_position(const LttvTracesetPosition *pos)
+{
+ LttvTracesetPosition previous_pos;
+ previous_pos.iter = pos->iter;
+ previous_pos.bt_pos = bt_iter_get_pos(bt_ctf_get_iter(pos->iter));
+ /* Seek to the new desired position */
+ lttv_traceset_seek_to_position(pos);
+ /*Read the event*/
+ struct bt_ctf_event *event = bt_ctf_iter_read_event(pos->iter);
+
+ if(event != NULL){
+ ((LttvTracesetPosition *)pos)->timestamp = bt_ctf_get_timestamp_raw(event);
+
+ LttvEvent lttv_event;
+ lttv_event.bt_event = event;
+ ((LttvTracesetPosition *)pos)->cpu_id = lttv_traceset_get_cpuid_from_event(<tv_event);
+ }
+ else {
+ /* The event is null */
+ return 0;
+ }
+
+ /* Reassign the previously saved position */
+ lttv_traceset_seek_to_position(&previous_pos);
+ /*We must desallocate because the function bt_iter_get_pos() does a g_new */
+ bt_iter_free_pos(previous_pos.bt_pos);
+}
+
+guint64 lttv_traceset_position_get_timestamp(const LttvTracesetPosition *pos)
+{
+ if(pos->timestamp == G_MAXUINT64){
+ if(set_values_position(pos) == 0){
+ return 0;
+ }
+ }
+
+ return pos->timestamp;
+}
+
+int lttv_traceset_position_get_cpuid(const LttvTracesetPosition *pos){
+ if(pos->cpu_id == INT_MAX ){
+ if(set_values_position(pos) == 0){
+ return 0;
+ }
+ }
+ return pos->cpu_id;
+}
+
+LttTime lttv_traceset_position_get_time(const LttvTracesetPosition *pos)
+{
+ return ltt_time_from_uint64(lttv_traceset_position_get_timestamp(pos));
+}
+
+
+
+int lttv_traceset_position_compare(const LttvTracesetPosition *pos1, const LttvTracesetPosition *pos2)
+{
+#warning " TODO :Rename for lttv_traceset_position_equals && Must return COMPARAISON OF THE 2 POSITION && verify if it is the best way to compare position"
+ if(pos1 == NULL || pos2 == NULL){
+ return -1;
+ }
+
+ guint64 timeStampPos1,timeStampPos2;
+ guint cpuId1, cpuId2;
+
+ timeStampPos1 = lttv_traceset_position_get_timestamp(pos1);
+ timeStampPos2 = lttv_traceset_position_get_timestamp(pos2);
+
+
+ cpuId1 = lttv_traceset_position_get_cpuid(pos1);
+ cpuId2 = lttv_traceset_position_get_cpuid(pos2);
+
+ if(timeStampPos1 == timeStampPos2 && cpuId1 == cpuId2){
+ return 0;
+ }
+ else{
+ return 1;
+ }
+}
+
+int lttv_traceset_position_time_compare(const LttvTracesetPosition *pos1,
+ const LttvTracesetPosition *pos2)
+{
+ guint64 timeStampPos1,timeStampPos2;
+
+ timeStampPos1 = lttv_traceset_position_get_timestamp(pos1);
+ timeStampPos2 = lttv_traceset_position_get_timestamp(pos2);
+
+ return timeStampPos1 - timeStampPos2;
+}
+int lttv_traceset_position_compare_current(const LttvTraceset *ts,
+ const LttvTracesetPosition *pos)
+{
+ int result = 0;
+ LttvTracesetPosition *curPos = lttv_traceset_create_current_position(ts);
+
+ result = lttv_traceset_position_compare(curPos,pos);
+
+ lttv_traceset_destroy_position(curPos);
+
+ return result;
+}
+
+LttTime lttv_traceset_get_current_time(const LttvTraceset *ts)
+{
+ LttvTracesetPosition *curPos = lttv_traceset_create_current_position(ts);
+ guint64 currentTimestamp = lttv_traceset_position_get_timestamp(curPos);
+ lttv_traceset_destroy_position(curPos);
+
+ return ltt_time_from_uint64(currentTimestamp);
+}