diff --git a/core/divelist.cpp b/core/divelist.cpp index d17a3bce2..4dfa8d022 100644 --- a/core/divelist.cpp +++ b/core/divelist.cpp @@ -1270,17 +1270,15 @@ bool dive_or_trip_less_than(struct dive_or_trip a, struct dive_or_trip b) * 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) +timestamp_t dive_table::get_surface_interval(timestamp_t when) const { - timestamp_t prev_end; - /* find previous dive. might want to use a binary search. */ - auto it = std::find_if(divelog.dives.rbegin(), divelog.dives.rend(), + auto it = std::find_if(rbegin(), rend(), [when] (auto &d) { return d->when < when; }); - if (it == divelog.dives.rend()) + if (it == rend()) return -1; - prev_end = (*it)->endtime(); + timestamp_t prev_end = (*it)->endtime(); if (prev_end > when) return 0; return when - prev_end; diff --git a/core/divelist.h b/core/divelist.h index 946d87638..2942c9da1 100644 --- a/core/divelist.h +++ b/core/divelist.h @@ -21,6 +21,7 @@ struct dive_table : public sorted_owning_table { void record_dive(std::unique_ptr d); // call fixup_dive() before adding dive to table. std::unique_ptr unregister_dive(int idx); + timestamp_t get_surface_interval(timestamp_t when) const; struct dive *find_next_visible_dive(timestamp_t when); }; @@ -51,7 +52,6 @@ extern process_imported_dives_result process_imported_dives(struct divelog &impo extern void get_dive_gas(const struct dive *dive, int *o2_p, int *he_p, int *o2low_p); extern int get_dive_nr_at_idx(int idx); -extern timestamp_t get_surface_interval(timestamp_t when); int get_min_datafile_version(); void report_datafile_version(int version); diff --git a/desktop-widgets/tab-widgets/TabDiveInformation.cpp b/desktop-widgets/tab-widgets/TabDiveInformation.cpp index f08594fe0..a0c430205 100644 --- a/desktop-widgets/tab-widgets/TabDiveInformation.cpp +++ b/desktop-widgets/tab-widgets/TabDiveInformation.cpp @@ -167,7 +167,7 @@ void TabDiveInformation::updateProfile() // Update fields that depend on start of dive void TabDiveInformation::updateWhen() { - timestamp_t surface_interval = get_surface_interval(parent.currentDive->when); + timestamp_t surface_interval = divelog.dives.get_surface_interval(parent.currentDive->when); if (surface_interval >= 0) ui->surfaceIntervalText->setText(get_dive_surfint_string(surface_interval, tr("d"), tr("h"), tr("min"))); else