+ num++;
+ // Maintain track segments
+ if ( VIK_TRACKPOINT(iter->next->data)->newsegment && (iter->next)->next )
+ VIK_TRACKPOINT(((iter->next)->next)->data)->newsegment = TRUE;
+
+ vik_trackpoint_free ( iter->next->data );
+ tr->trackpoints = g_list_delete_link ( tr->trackpoints, iter->next );
+ }
+ else
+ iter = iter->next;
+ }
+ return num;
+}
+
+/*
+ * Get a count of trackpoints with the same defined timestamp
+ * Note is using timestamps with a resolution with 1 second
+ */
+gulong vik_track_get_same_time_point_count ( const VikTrack *tr )
+{
+ gulong num = 0;
+ GList *iter = tr->trackpoints;
+ while ( iter ) {
+ if ( iter->next &&
+ ( VIK_TRACKPOINT(iter->data)->has_timestamp &&
+ VIK_TRACKPOINT(iter->next->data)->has_timestamp ) &&
+ ( VIK_TRACKPOINT(iter->data)->timestamp ==
+ VIK_TRACKPOINT(iter->next->data)->timestamp) )
+ num++;
+ iter = iter->next;
+ }
+ return num;
+}
+
+/*
+ * Deletes adjacent points that have the same defined timestamp
+ * Returns the number of points that were deleted
+ */
+gulong vik_track_remove_same_time_points ( VikTrack *tr )
+{
+ gulong num = 0;
+ GList *iter = tr->trackpoints;
+ while ( iter ) {
+ if ( iter->next &&
+ ( VIK_TRACKPOINT(iter->data)->has_timestamp &&
+ VIK_TRACKPOINT(iter->next->data)->has_timestamp ) &&
+ ( VIK_TRACKPOINT(iter->data)->timestamp ==
+ VIK_TRACKPOINT(iter->next->data)->timestamp) ) {
+
+ num++;
+
+ // Maintain track segments
+ if ( VIK_TRACKPOINT(iter->next->data)->newsegment && (iter->next)->next )
+ VIK_TRACKPOINT(((iter->next)->next)->data)->newsegment = TRUE;
+
+ vik_trackpoint_free ( iter->next->data );