diff options
author | Berthold Stoeger <bstoeger@mail.tuwien.ac.at> | 2018-10-06 16:30:57 +0200 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2018-10-07 17:50:51 +0300 |
commit | b61f6f66d8859e62023e3818879b90de529e9a72 (patch) | |
tree | 3f504976833a99d518886f0059ca6b28504b8c8b | |
parent | 97991e2b9fff4254c2b40417bf6d7496ba0d849f (diff) | |
download | subsurface-b61f6f66d8859e62023e3818879b90de529e9a72.tar.gz |
Statistics: un-globalize stats_selection
The statistics of the selected dives were calculated
a) into a global objects and
b) at a completely different place than where they're used.
There's no plausible reason for either. There fore render
into a caller-provided structure at the place of use.
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
-rw-r--r-- | core/statistics.c | 11 | ||||
-rw-r--r-- | core/statistics.h | 5 | ||||
-rw-r--r-- | desktop-widgets/tab-widgets/TabDiveStatistics.cpp | 2 | ||||
-rw-r--r-- | desktop-widgets/tab-widgets/maintab.cpp | 2 |
4 files changed, 9 insertions, 11 deletions
diff --git a/core/statistics.c b/core/statistics.c index b7e4e1f4c..5d9c8049a 100644 --- a/core/statistics.c +++ b/core/statistics.c @@ -4,6 +4,7 @@ * core logic for the Info & Stats page - * char *get_minutes(int seconds); * void calculate_stats_summary(struct stats_summary *out); + * void calculate_stats_selected(stats_t *stats_selection); */ #include "gettext.h" #include <string.h> @@ -14,8 +15,6 @@ #include "divelist.h" #include "statistics.h" -stats_t stats_selection; - static void process_temperatures(struct dive *dp, stats_t *stats) { temperature_t min_temp, mean_temp, max_temp = {.mkelvin = 0}; @@ -224,21 +223,21 @@ void init_stats_summary(struct stats_summary *stats) } /* make sure we skip the selected summary entries */ -void process_selected_dives(void) +void calculate_stats_selected(stats_t *stats_selection) { struct dive *dive; unsigned int i, nr; - memset(&stats_selection, 0, sizeof(stats_selection)); + memset(stats_selection, 0, sizeof(*stats_selection)); nr = 0; for_each_dive(i, dive) { if (dive->selected) { - process_dive(dive, &stats_selection); + process_dive(dive, stats_selection); nr++; } } - stats_selection.selection_size = nr; + stats_selection->selection_size = nr; } #define SOME_GAS 5000 // 5bar drop in cylinder pressure makes cylinder used diff --git a/core/statistics.h b/core/statistics.h index 4639ecf3f..d0cf5ab67 100644 --- a/core/statistics.h +++ b/core/statistics.h @@ -37,7 +37,6 @@ typedef struct bool is_trip; char *location; } stats_t; -extern stats_t stats_selection; struct stats_summary { stats_t *stats_yearly; @@ -54,9 +53,9 @@ extern char *get_minutes(int seconds); extern void init_stats_summary(struct stats_summary *stats); extern void free_stats_summary(struct stats_summary *stats); extern void calculate_stats_summary(struct stats_summary *stats); +extern void calculate_stats_selected(stats_t *stats_selection); 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); +extern void selected_dives_gas_parts(volume_t *o2_tot, volume_t *he_tot); #ifdef __cplusplus } diff --git a/desktop-widgets/tab-widgets/TabDiveStatistics.cpp b/desktop-widgets/tab-widgets/TabDiveStatistics.cpp index 55f61eb5a..67e80ed24 100644 --- a/desktop-widgets/tab-widgets/TabDiveStatistics.cpp +++ b/desktop-widgets/tab-widgets/TabDiveStatistics.cpp @@ -44,6 +44,8 @@ void TabDiveStatistics::clear() void TabDiveStatistics::updateData() { + stats_t stats_selection; + calculate_stats_selected(&stats_selection); clear(); ui->depthLimits->setMaximum(get_depth_string(stats_selection.max_depth, true)); if (amount_selected > 1) diff --git a/desktop-widgets/tab-widgets/maintab.cpp b/desktop-widgets/tab-widgets/maintab.cpp index 25fe34adc..070184a86 100644 --- a/desktop-widgets/tab-widgets/maintab.cpp +++ b/desktop-widgets/tab-widgets/maintab.cpp @@ -424,8 +424,6 @@ void MainTab::updateDiveInfo(bool clear) setEnabled(false); editMode = IGNORE; // don't trigger on changes to the widgets - process_selected_dives(); - for (auto widget : extraWidgets) { widget->updateData(); } |