diff options
-rw-r--r-- | core/divelist.c | 27 | ||||
-rw-r--r-- | core/divelist.h | 1 |
2 files changed, 28 insertions, 0 deletions
diff --git a/core/divelist.c b/core/divelist.c index 543d9e17b..52545af1a 100644 --- a/core/divelist.c +++ b/core/divelist.c @@ -1189,6 +1189,33 @@ void report_datafile_version(int version) min_datafile_version = version; } +int get_dive_id_closest_to(timestamp_t when) +{ + int i; + int nr = dive_table.nr; + + // deal with pathological cases + if (nr == 0) + return 0; + else if (nr == 1) + return dive_table.dives[0]->id; + + for (i = 0; i < nr && dive_table.dives[i]->when <= when; i++) + ; // nothing + + // again, capture the two edge cases first + if (i == nr) + return dive_table.dives[i - 1]->id; + else if (i == 0) + return dive_table.dives[0]->id; + + if (when - dive_table.dives[i - 1]->when < dive_table.dives[i]->when - when) + return dive_table.dives[i - 1]->id; + else + return dive_table.dives[i]->id; +} + + void clear_dive_file_data() { while (dive_table.nr) diff --git a/core/divelist.h b/core/divelist.h index 5bae09cff..7a35fb264 100644 --- a/core/divelist.h +++ b/core/divelist.h @@ -48,6 +48,7 @@ extern void set_dive_nr_for_current_dive(); int get_min_datafile_version(); void reset_min_datafile_version(); void report_datafile_version(int version); +int get_dive_id_closest_to(timestamp_t when); void clear_dive_file_data(); #ifdef DEBUG_TRIP |