X-Git-Url: https://git.street.me.uk/andy/viking.git/blobdiff_plain/f629b00b58bf2a9ff9d115ab3b6469ee50e5e836..bc07590a14b533ff65b0c4e802e160de7816ec0d:/src/viktrack.c diff --git a/src/viktrack.c b/src/viktrack.c index 13b3c00e..04e75f02 100644 --- a/src/viktrack.c +++ b/src/viktrack.c @@ -1363,6 +1363,22 @@ VikTrackpoint* vik_track_get_tp_by_min_alt ( const VikTrack *tr ) return min_alt_tp; } +VikTrackpoint *vik_track_get_tp_first( const VikTrack *tr ) +{ + if ( !tr->trackpoints ) + return NULL; + + return (VikTrackpoint*)g_list_first(tr->trackpoints)->data; +} + +VikTrackpoint *vik_track_get_tp_last ( const VikTrack *tr ) +{ + if ( !tr->trackpoints ) + return NULL; + + return (VikTrackpoint*)g_list_last(tr->trackpoints)->data; +} + gboolean vik_track_get_minmax_alt ( const VikTrack *tr, gdouble *min_alt, gdouble *max_alt ) { *min_alt = 25000; @@ -1749,3 +1765,35 @@ VikCoord *vik_track_cut_back_to_double_point ( VikTrack *tr ) return rv; } +/** + * Function to compare two tracks by their first timestamp + **/ +int vik_track_compare_timestamp (const void *x, const void *y) +{ + VikTrack *a = (VikTrack *)x; + VikTrack *b = (VikTrack *)y; + + VikTrackpoint *tpa = NULL; + VikTrackpoint *tpb = NULL; + + if ( a->trackpoints ) + tpa = VIK_TRACKPOINT(g_list_first(a->trackpoints)->data); + + if ( b->trackpoints ) + tpb = VIK_TRACKPOINT(g_list_first(b->trackpoints)->data); + + if ( tpa && tpb ) { + if ( tpa->timestamp < tpb->timestamp ) + return -1; + if ( tpa->timestamp > tpb->timestamp ) + return 1; + } + + if ( tpa && !tpb ) + return 1; + + if ( !tpa && tpb ) + return -1; + + return 0; +}