From b5de08b709819783e5d79ffffa333cea05f5186f Mon Sep 17 00:00:00 2001 From: Miika Turkia Date: Tue, 4 Oct 2016 07:14:51 +0300 Subject: 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 Signed-off-by: Dirk Hohndel --- core/dive.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'core') 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; -- cgit v1.2.3-70-g09d2