diff options
Diffstat (limited to 'core/dive.c')
-rw-r--r-- | core/dive.c | 53 |
1 files changed, 27 insertions, 26 deletions
diff --git a/core/dive.c b/core/dive.c index 7255416ac..20b39b6a3 100644 --- a/core/dive.c +++ b/core/dive.c @@ -264,7 +264,7 @@ struct gasmix get_gasmix_from_event(const struct dive *dive, const struct event if (ev && event_is_gaschange(ev)) { int index = ev->gas.index; if (index >= 0 && index < dive->cylinders.nr) - return dive->cylinders.cylinders[index].gasmix; + return get_cylinder(dive, index)->gasmix; return ev->gas.mix; } return dummy; @@ -526,8 +526,8 @@ void copy_used_cylinders(const struct dive *s, struct dive *d, bool used_only) clear_cylinder_table(&d->cylinders); for (i = 0; i < s->cylinders.nr; i++) { - if (!used_only || is_cylinder_used(s, i) || s->cylinders.cylinders[i].cylinder_use == NOT_USED) - add_cloned_cylinder(&d->cylinders, s->cylinders.cylinders[i]); + if (!used_only || is_cylinder_used(s, i) || get_cylinder(s, i)->cylinder_use == NOT_USED) + add_cloned_cylinder(&d->cylinders, *get_cylinder(s, i)); } } @@ -696,7 +696,7 @@ static int get_cylinder_used(const struct dive *dive, bool used[]) int i, num = 0; for (i = 0; i < dive->cylinders.nr; i++) { - used[i] = cylinder_used(dive->cylinders.cylinders + i); + used[i] = cylinder_used(get_cylinder(dive, i)); if (used[i]) num++; } @@ -1000,8 +1000,8 @@ static void sanitize_cylinder_info(struct dive *dive) int i; for (i = 0; i < dive->cylinders.nr; i++) { - sanitize_gasmix(&dive->cylinders.cylinders[i].gasmix); - sanitize_cylinder_type(&dive->cylinders.cylinders[i].type); + sanitize_gasmix(&get_cylinder(dive, i)->gasmix); + sanitize_cylinder_type(&get_cylinder(dive, i)->type); } } @@ -1334,7 +1334,7 @@ static void simplify_dc_pressures(struct divecomputer *dc) static void fixup_start_pressure(struct dive *dive, int idx, pressure_t p) { if (idx >= 0 && idx < dive->cylinders.nr) { - cylinder_t *cyl = dive->cylinders.cylinders + idx; + cylinder_t *cyl = get_cylinder(dive, idx); if (p.mbar && !cyl->sample_start.mbar) cyl->sample_start = p; } @@ -1343,7 +1343,7 @@ static void fixup_start_pressure(struct dive *dive, int idx, pressure_t p) static void fixup_end_pressure(struct dive *dive, int idx, pressure_t p) { if (idx >= 0 && idx < dive->cylinders.nr) { - cylinder_t *cyl = dive->cylinders.cylinders + idx; + cylinder_t *cyl = get_cylinder(dive, idx); if (p.mbar && !cyl->sample_end.mbar) cyl->sample_end = p; } @@ -1415,7 +1415,7 @@ static bool validate_gaschange(struct dive *dive, struct event *event) /* Fix up the event to have the right information */ event->gas.index = index; - event->gas.mix = dive->cylinders.cylinders[index].gasmix; + event->gas.mix = get_cylinder(dive, index)->gasmix; /* Convert to odd libdivecomputer format */ o2 = get_o2(event->gas.mix); @@ -1540,7 +1540,7 @@ struct dive *fixup_dive(struct dive *dive) fixup_watertemp(dive); fixup_airtemp(dive); for (i = 0; i < dive->cylinders.nr; i++) { - cylinder_t *cyl = dive->cylinders.cylinders + i; + cylinder_t *cyl = get_cylinder(dive, i); add_cylinder_description(&cyl->type); if (same_rounded_pressure(cyl->sample_start, cyl->start)) cyl->start.mbar = 0; @@ -1923,7 +1923,7 @@ extern int get_cylinder_idx_by_use(const struct dive *dive, enum cylinderuse cyl { int cylinder_index; for (cylinder_index = 0; cylinder_index < dive->cylinders.nr; cylinder_index++) { - if (dive->cylinders.cylinders[cylinder_index].cylinder_use == cylinder_use_type) + if (get_cylinder(dive, cylinder_index)->cylinder_use == cylinder_use_type) return cylinder_index; // return the index of the cylinder with that cylinder use type } return -1; // negative number means cylinder_use_type not found in list of cylinders @@ -2073,7 +2073,7 @@ int same_gasmix_cylinder(const cylinder_t *cyl, int cylid, const struct dive *di for (int i = 0; i < dive->cylinders.nr; i++) { if (i == cylid) continue; - struct gasmix gas2 = dive->cylinders.cylinders[i].gasmix; + struct gasmix gas2 = get_cylinder(dive, i)->gasmix; if (gasmix_distance(mygas, gas2) == 0 && (is_cylinder_used(dive, i) || check_unused)) return i; } @@ -2108,7 +2108,7 @@ static int match_cylinder(const cylinder_t *cyl, const struct dive *dive, const if (!used[i]) continue; - target = dive->cylinders.cylinders + i; + target = get_cylinder(dive, i); if (!same_gasmix(cyl->gasmix, target->gasmix)) continue; if (cyl->cylinder_use != target->cylinder_use) @@ -2197,7 +2197,7 @@ static void merge_cylinders(struct dive *res, const struct dive *a, const struct if (!used_in_b[i]) continue; - j = match_cylinder(b->cylinders.cylinders + i, a, used_in_a); + j = match_cylinder(get_cylinder(b, i), a, used_in_a); if (j < 0) continue; @@ -2216,14 +2216,14 @@ static void merge_cylinders(struct dive *res, const struct dive *a, const struct mapping_a[j] = res->cylinders.nr; used_in_a[i] = false; used_in_b[j] = false; - merge_one_cylinder(&res->cylinders, a->cylinders.cylinders + j, b->cylinders.cylinders + i); + merge_one_cylinder(&res->cylinders, get_cylinder(a, j), get_cylinder(b, i)); } /* Now copy all the used cylinders from 'a' that are used but have not been matched */ for (i = 0; i < a->cylinders.nr; i++) { if (used_in_a[i]) { mapping_a[i] = res->weightsystems.nr; - add_cloned_cylinder(&res->cylinders, a->cylinders.cylinders[i]); + add_cloned_cylinder(&res->cylinders, *get_cylinder(a, i)); } } @@ -2231,7 +2231,7 @@ static void merge_cylinders(struct dive *res, const struct dive *a, const struct for (i = 0; i < b->cylinders.nr; i++) { if (used_in_b[i]) { mapping_b[i] = res->weightsystems.nr; - add_cloned_cylinder(&res->cylinders, b->cylinders.cylinders[i]); + add_cloned_cylinder(&res->cylinders, *get_cylinder(b, i)); } } @@ -3018,10 +3018,11 @@ static void force_fixup_dive(struct dive *d) d->maxtemp.mkelvin = 0; d->mintemp.mkelvin = 0; for (int i = 0; i < d->cylinders.nr; i++) { - old_pressures[i].start = d->cylinders.cylinders[i].start; - old_pressures[i].end = d->cylinders.cylinders[i].end; - d->cylinders.cylinders[i].start.mbar = 0; - d->cylinders.cylinders[i].end.mbar = 0; + cylinder_t *cyl = get_cylinder(d, i); + old_pressures[i].start = cyl->start; + old_pressures[i].end = cyl->end; + cyl->start.mbar = 0; + cyl->end.mbar = 0; } fixup_dive(d); @@ -3041,10 +3042,10 @@ static void force_fixup_dive(struct dive *d) if (!d->duration.seconds) d->duration = old_duration; for (int i = 0; i < d->cylinders.nr; i++) { - if (!d->cylinders.cylinders[i].start.mbar) - d->cylinders.cylinders[i].start = old_pressures[i].start; - if (!d->cylinders.cylinders[i].end.mbar) - d->cylinders.cylinders[i].end = old_pressures[i].end; + if (!get_cylinder(d, i)->start.mbar) + get_cylinder(d, i)->start = old_pressures[i].start; + if (!get_cylinder(d, i)->end.mbar) + get_cylinder(d, i)->end = old_pressures[i].end; } free(old_pressures); } @@ -4009,7 +4010,7 @@ struct gasmix get_gasmix(const struct dive *dive, const struct divecomputer *dc, if (!ev) { /* on first invocation, get initial gas mix and first event (if any) */ int cyl = explicit_first_cylinder(dive, dc); - res = dive->cylinders.cylinders[cyl].gasmix; + res = get_cylinder(dive, cyl)->gasmix; ev = dc ? get_next_event(dc->events, "gaschange") : NULL; } else { res = gasmix; |