When merging dives, this will skip the gas change event if both dives
use same gas.

Fixes #1099

Signed-off-by: Miika Turkia <[email protected]>
---
 core/dive.c | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/core/dive.c b/core/dive.c
index 04c0bdc..c1d5b73 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;
-- 
2.5.0

_______________________________________________
subsurface mailing list
[email protected]
http://lists.subsurface-divelog.org/cgi-bin/mailman/listinfo/subsurface

Reply via email to