+
+ for (i = 1; i < dive_table.nr; i++) {
+ struct dive **pp = &dive_table.dives[i-1];
+ struct dive *prev = pp[0];
+ struct dive *dive = pp[1];
+ struct dive *merged;
+
+ if (prev->when + prev->duration.seconds < dive->when)
+ continue;
+
+ merged = try_to_merge(prev, dive);
+ if (!merged)
+ continue;
+
+ free(prev);
+ free(dive);
+ *pp = merged;
+ dive_table.nr--;
+ memmove(pp+1, pp+2, sizeof(*pp)*(dive_table.nr - i));
+
+ /* Redo the new 'i'th dive */
+ i--;
+ }