diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/divelist.c | 29 | ||||
-rw-r--r-- | core/divelist.h | 1 | ||||
-rw-r--r-- | core/statistics.c | 10 | ||||
-rw-r--r-- | core/statistics.h | 2 |
4 files changed, 33 insertions, 9 deletions
diff --git a/core/divelist.c b/core/divelist.c index 84290e6b6..94adc92dc 100644 --- a/core/divelist.c +++ b/core/divelist.c @@ -1420,3 +1420,32 @@ void sort_table(struct dive_table *table) { qsort(table->dives, table->nr, sizeof(struct dive *), sortfn); } + +/* + * Calculate surface interval for dive starting at "when". Currently, we + * might display dives which are not yet in the divelist, therefore the + * input parameter is a timestamp. + * If the given dive starts during a different dive, the surface interval + * is 0. If we can't determine a surface interval (first dive), <0 is + * returned. This does *not* consider pathological cases such as dives + * that happened inside other dives. The interval will always be calculated + * with respect to the dive that started previously. + */ +timestamp_t get_surface_interval(timestamp_t when) +{ + int i; + timestamp_t prev_end; + + /* find previous dive. might want to use a binary search. */ + for (i = dive_table.nr - 1; i >= 0; --i) { + if (dive_table.dives[i]->when < when) + break; + } + if (i < 0) + return -1; + + prev_end = dive_endtime(dive_table.dives[i]); + if (prev_end > when) + return 0; + return when - prev_end; +} diff --git a/core/divelist.h b/core/divelist.h index 937909d2b..af47d0f23 100644 --- a/core/divelist.h +++ b/core/divelist.h @@ -42,6 +42,7 @@ extern struct dive *first_selected_dive(); extern struct dive *last_selected_dive(); extern bool is_trip_before_after(const struct dive *dive, bool before); extern void set_dive_nr_for_current_dive(); +extern timestamp_t get_surface_interval(timestamp_t when); int get_min_datafile_version(); void reset_min_datafile_version(); diff --git a/core/statistics.c b/core/statistics.c index beeb258a6..b25080a9f 100644 --- a/core/statistics.c +++ b/core/statistics.c @@ -3,7 +3,7 @@ * * core logic for the Info & Stats page - * char *get_minutes(int seconds); - * void process_all_dives(struct dive *dive, struct dive **prev_dive); + * void process_all_dives(); */ #include "gettext.h" #include <string.h> @@ -91,7 +91,7 @@ char *get_minutes(int seconds) return buf; } -void process_all_dives(struct dive *dive, struct dive **prev_dive) +void process_all_dives() { int idx; struct dive *dp; @@ -105,7 +105,6 @@ void process_all_dives(struct dive *dive, struct dive **prev_dive) dive_trip_t *trip_ptr = 0; unsigned int size, tsize; - *prev_dive = NULL; memset(&stats, 0, sizeof(stats)); if (dive_table.nr > 0) { stats.shortest_time.seconds = dive_table.dives[0]->duration.seconds; @@ -152,11 +151,6 @@ void process_all_dives(struct dive *dive, struct dive **prev_dive) /* this relies on the fact that the dives in the dive_table * are in chronological order */ for_each_dive (idx, dp) { - if (dive && dp->when == dive->when) { - /* that's the one we are showing */ - if (idx > 0) - *prev_dive = dive_table.dives[idx - 1]; - } process_dive(dp, &stats); /* yearly statistics */ diff --git a/core/statistics.h b/core/statistics.h index 597edfb94..7766d3154 100644 --- a/core/statistics.h +++ b/core/statistics.h @@ -48,7 +48,7 @@ extern stats_t *stats_by_trip; extern stats_t *stats_by_type; extern char *get_minutes(int seconds); -extern void process_all_dives(struct dive *dive, struct dive **prev_dive); +extern void process_all_dives(); extern void get_gas_used(struct dive *dive, volume_t gases[MAX_CYLINDERS]); extern void process_selected_dives(void); void selected_dives_gas_parts(volume_t *o2_tot, volume_t *he_tot); |