summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Berthold Stoeger <bstoeger@mail.tuwien.ac.at>2018-10-06 16:30:57 +0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2018-10-07 17:50:51 +0300
commitb61f6f66d8859e62023e3818879b90de529e9a72 (patch)
tree3f504976833a99d518886f0059ca6b28504b8c8b
parent97991e2b9fff4254c2b40417bf6d7496ba0d849f (diff)
downloadsubsurface-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.c11
-rw-r--r--core/statistics.h5
-rw-r--r--desktop-widgets/tab-widgets/TabDiveStatistics.cpp2
-rw-r--r--desktop-widgets/tab-widgets/maintab.cpp2
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();
}