diff options
author | Robert C. Helling <helling@atdotde.de> | 2017-02-02 20:29:44 +0100 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2017-02-02 12:37:24 -0800 |
commit | 1d8662006cbb5edae941315e30ede381c23a817b (patch) | |
tree | 88ff6ec54d5e4ed4e29f3b93bea04292ef986e5f /core | |
parent | a031dbbbd8fbd8a913e517cf1bea5d61311bf266 (diff) | |
download | subsurface-1d8662006cbb5edae941315e30ede381c23a817b.tar.gz |
In statistics, ignore gas use of planned dives
When merged with real dives, those would double count otherwise.
Signed-off-by: Robert C. Helling <helling@atdotde.de>
Diffstat (limited to 'core')
-rw-r--r-- | core/dive.c | 6 | ||||
-rw-r--r-- | core/dive.h | 2 | ||||
-rw-r--r-- | core/divelist.c | 2 | ||||
-rw-r--r-- | core/statistics.c | 8 | ||||
-rw-r--r-- | core/subsurface-qt/DiveObjectHelper.cpp | 2 |
5 files changed, 11 insertions, 9 deletions
diff --git a/core/dive.c b/core/dive.c index 19a950482..b305df56d 100644 --- a/core/dive.c +++ b/core/dive.c @@ -582,7 +582,7 @@ void copy_cylinders(struct dive *s, struct dive *d, bool used_only) memset(&d->cylinder[i], 0, sizeof(cylinder_t)); } for (i = j = 0; i < MAX_CYLINDERS; i++) { - if (!used_only || is_cylinder_used(s, i)) { + if (!used_only || is_cylinder_used(s, i, false)) { d->cylinder[j].type = s->cylinder[i].type; d->cylinder[j].type.description = copy_string(s->cylinder[i].type.description); d->cylinder[j].gasmix = s->cylinder[i].gasmix; @@ -2050,10 +2050,10 @@ static void merge_cylinders(struct dive *res, struct dive *a, struct dive *b) } else { int j=0; for (i = 0; i < MAX_CYLINDERS && j < MAX_CYLINDERS; i++) { - if (is_cylinder_used(res, i)) + if (is_cylinder_used(res, i, false)) continue; - while (!is_cylinder_used(b, j) && j < MAX_CYLINDERS - 1) { + while (!is_cylinder_used(b, j, false) && j < MAX_CYLINDERS - 1) { mapping[j] = 0; ++j; } diff --git a/core/dive.h b/core/dive.h index c9d176920..47f2227e3 100644 --- a/core/dive.h +++ b/core/dive.h @@ -771,7 +771,7 @@ extern void copy_events(struct divecomputer *s, struct divecomputer *d); extern void free_events(struct event *ev); extern void copy_cylinders(struct dive *s, struct dive *d, bool used_only); extern void copy_samples(struct divecomputer *s, struct divecomputer *d); -extern bool is_cylinder_used(struct dive *dive, int idx); +extern bool is_cylinder_used(struct dive *dive, int idx, bool ignore_planned); extern void fill_default_cylinder(cylinder_t *cyl); extern void add_gas_switch_event(struct dive *dive, struct divecomputer *dc, int time, int idx); extern struct event *add_event(struct divecomputer *dc, unsigned int time, int type, int flags, int value, const char *name); diff --git a/core/divelist.c b/core/divelist.c index b28dd5ef3..096fc3359 100644 --- a/core/divelist.c +++ b/core/divelist.c @@ -119,7 +119,7 @@ void get_dive_gas(struct dive *dive, int *o2_p, int *he_p, int *o2max_p) int o2 = get_o2(&cyl->gasmix); int he = get_he(&cyl->gasmix); - if (!is_cylinder_used(dive, i)) + if (!is_cylinder_used(dive, i, false)) continue; if (cylinder_none(cyl)) continue; diff --git a/core/statistics.c b/core/statistics.c index 62a4d737f..6a0ff9f94 100644 --- a/core/statistics.c +++ b/core/statistics.c @@ -326,16 +326,18 @@ void get_selected_dives_text(char *buffer, size_t size) #define SOME_GAS 5000 // 5bar drop in cylinder pressure makes cylinder used -bool is_cylinder_used(struct dive *dive, int idx) +bool is_cylinder_used(struct dive *dive, int idx, bool ignore_plannned) { struct divecomputer *dc; bool firstGasExplicit = false; if (cylinder_none(&dive->cylinder[idx])) return false; - if ((dive->cylinder[idx].start.mbar - dive->cylinder[idx].end.mbar) > SOME_GAS) + if ((dive->cylinder[idx].start.mbar - dive->cylinder[idx].end.mbar) > SOME_GAS && !ignore_plannned) return true; for_each_dc(dive, dc) { + if (ignore_plannned && !strcmp(dc->model, "planned dive")) + continue; struct event *event = get_next_event(dc->events, "gaschange"); while (event) { if (dc->sample && (event->time.seconds == 0 || @@ -360,7 +362,7 @@ void get_gas_used(struct dive *dive, volume_t gases[MAX_CYLINDERS]) cylinder_t *cyl = &dive->cylinder[idx]; pressure_t start, end; - if (!is_cylinder_used(dive, idx)) + if (!is_cylinder_used(dive, idx, true)) continue; start = cyl->start.mbar ? cyl->start : cyl->sample_start; diff --git a/core/subsurface-qt/DiveObjectHelper.cpp b/core/subsurface-qt/DiveObjectHelper.cpp index 9814f9a6a..cd7c4abca 100644 --- a/core/subsurface-qt/DiveObjectHelper.cpp +++ b/core/subsurface-qt/DiveObjectHelper.cpp @@ -186,7 +186,7 @@ QString DiveObjectHelper::gas() const */ QString gas, gases; for (int i = 0; i < MAX_CYLINDERS; i++) { - if (!is_cylinder_used(m_dive, i)) + if (!is_cylinder_used(m_dive, i, false)) continue; gas = m_dive->cylinder[i].type.description; if (!gas.isEmpty()) |