diff options
author | Miika Turkia <miika.turkia@gmail.com> | 2016-10-04 07:14:51 +0300 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2016-10-11 21:56:52 -0700 |
commit | b5de08b709819783e5d79ffffa333cea05f5186f (patch) | |
tree | 2dd480f5a61ef41a7064eea88913a64066e15431 /core | |
parent | f9e6a3ecc6198cf4fb8fae856e258c461399aa5c (diff) | |
download | subsurface-b5de08b709819783e5d79ffffa333cea05f5186f.tar.gz |
No gas change event on merging dives with same gas
When merging dives, this will skip the gas change event if both dives
use same gas.
Fixes #1099
Signed-off-by: Miika Turkia <miika.turkia@gmail.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'core')
-rw-r--r-- | core/dive.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/core/dive.c b/core/dive.c index 04c0bdc1c..c1d5b7324 100644 --- a/core/dive.c +++ b/core/dive.c @@ -1765,6 +1765,15 @@ static int sort_event(struct event *a, struct event *b) return strcmp(a->name, b->name); } +static int same_gas(struct event *a, struct event *b) +{ + if (a->type == b->type && a->flags == b->flags && a->value == b->value && !strcmp(a->name, b->name) && + a->gas.mix.o2.permille == b->gas.mix.o2.permille && a->gas.mix.he.permille == b->gas.mix.he.permille) { + return true; + } + return false; +} + static void merge_events(struct divecomputer *res, struct divecomputer *src1, struct divecomputer *src2, int offset) { struct event *a, *b; @@ -1799,6 +1808,19 @@ static void merge_events(struct divecomputer *res, struct divecomputer *src1, st break; } s = sort_event(a, b); + + /* No gas change event when continuing with same gas */ + if (same_gas(a, b)) { + if (s > 0) { + p = &b->next; + b = b->next; + } else { + p = &a->next; + a = a->next; + } + continue; + } + /* Pick b */ if (s > 0) { *p = b; |