diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/dive.c | 15 | ||||
-rw-r--r-- | core/dive.h | 1 |
2 files changed, 15 insertions, 1 deletions
diff --git a/core/dive.c b/core/dive.c index 84d476958..59bbef9c8 100644 --- a/core/dive.c +++ b/core/dive.c @@ -1858,7 +1858,7 @@ static int sort_event(struct event *a, struct event *b) 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) { + same_gasmix(&a->gas.mix, &b->gas.mix)) { return true; } return false; @@ -2078,6 +2078,19 @@ int same_gasmix(struct gasmix *a, struct gasmix *b) return a->o2.permille == b->o2.permille && a->he.permille == b->he.permille; } +int same_gasmix_cylinder(cylinder_t *cyl, int cylid, struct dive *dive, bool check_unused) +{ + struct gasmix *mygas = &cyl->gasmix; + for (int i = 0; i < MAX_CYLINDERS; i++) { + if (i == cylid || cylinder_none(&dive->cylinder[i])) + continue; + struct gasmix *gas2 = &dive->cylinder[i].gasmix; + if (gasmix_distance(mygas, gas2) == 0 && (is_cylinder_used(dive, i) || check_unused)) + return i; + } + return -1; +} + static int pdiff(pressure_t a, pressure_t b) { return a.mbar && b.mbar && a.mbar != b.mbar; diff --git a/core/dive.h b/core/dive.h index 51524500f..f361cfcb2 100644 --- a/core/dive.h +++ b/core/dive.h @@ -368,6 +368,7 @@ static inline bool dive_cache_is_valid(const struct dive *dive) extern int get_cylinder_idx_by_use(struct dive *dive, enum cylinderuse cylinder_use_type); extern void dc_cylinder_renumber(struct dive *dive, struct divecomputer *dc, int mapping[]); +extern int same_gasmix_cylinder(cylinder_t *cyl, int cylid, struct dive *dive, bool check_unused); /* when selectively copying dive information, which parts should be copied? */ struct dive_components { |