summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Miika Turkia <miika.turkia@gmail.com>2016-10-04 07:14:51 +0300
committerGravatar Dirk Hohndel <dirk@hohndel.org>2016-10-11 21:56:52 -0700
commitb5de08b709819783e5d79ffffa333cea05f5186f (patch)
tree2dd480f5a61ef41a7064eea88913a64066e15431
parentf9e6a3ecc6198cf4fb8fae856e258c461399aa5c (diff)
downloadsubsurface-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>
-rw-r--r--core/dive.c22
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;