aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/datatrak.c10
-rw-r--r--core/dive.c53
-rw-r--r--core/divelist.c4
-rw-r--r--core/equipment.c8
-rw-r--r--core/gaspressures.c6
-rw-r--r--core/import-divinglog.c2
-rw-r--r--core/import-shearwater.c2
-rw-r--r--core/parse-xml.c6
-rw-r--r--core/planner.c54
-rw-r--r--core/plannernotes.c8
-rw-r--r--core/profile.c16
-rw-r--r--core/qthelper.cpp4
-rw-r--r--core/save-git.c2
-rw-r--r--core/save-html.c2
-rw-r--r--core/save-xml.c2
-rw-r--r--core/statistics.c6
-rw-r--r--core/subsurface-qt/DiveObjectHelper.cpp18
-rw-r--r--desktop-widgets/divelogexportdialog.cpp2
-rw-r--r--desktop-widgets/simplewidgets.cpp2
-rw-r--r--desktop-widgets/tab-widgets/TabDiveInformation.cpp2
-rw-r--r--desktop-widgets/tab-widgets/maintab.cpp2
-rw-r--r--mobile-widgets/qmlmanager.cpp22
-rw-r--r--profile-widget/diveprofileitem.cpp2
-rw-r--r--profile-widget/profilewidget2.cpp6
-rw-r--r--profile-widget/tankitem.cpp2
-rw-r--r--qt-models/cylindermodel.cpp16
-rw-r--r--qt-models/diveplannermodel.cpp10
-rw-r--r--qt-models/divetripmodel.cpp4
-rw-r--r--qt-models/models.cpp2
-rw-r--r--smtk-import/smartrak.c22
30 files changed, 149 insertions, 148 deletions
diff --git a/core/datatrak.c b/core/datatrak.c
index f9f577c73..728efe5ab 100644
--- a/core/datatrak.c
+++ b/core/datatrak.c
@@ -356,7 +356,7 @@ static unsigned char *dt_dive_parser(unsigned char *runner, struct dive *dt_dive
*/
read_bytes(2);
if (tmp_2bytes != 0x7FFF && dt_dive->cylinders.nr > 0)
- dt_dive->cylinders.cylinders[0].gas_used.mliter = lrint(dt_dive->cylinders.cylinders[0].type.size.mliter * (tmp_2bytes / 100.0));
+ get_cylinder(dt_dive, 0)->gas_used.mliter = lrint(get_cylinder(dt_dive, 0)->type.size.mliter * (tmp_2bytes / 100.0));
/*
* Dive Type 1 - Bit table. Subsurface don't have this record, but
@@ -532,10 +532,10 @@ static unsigned char *dt_dive_parser(unsigned char *runner, struct dive *dt_dive
goto bail;
}
if (is_nitrox && dt_dive->cylinders.nr > 0)
- dt_dive->cylinders.cylinders[0].gasmix.o2.permille =
+ get_cylinder(dt_dive, 0)->gasmix.o2.permille =
lrint(membuf[23] & 0x0F ? 20.0 + 2 * (membuf[23] & 0x0F) : 21.0) * 10;
if (is_O2 && dt_dive->cylinders.nr > 0)
- dt_dive->cylinders.cylinders[0].gasmix.o2.permille = membuf[23] * 10;
+ get_cylinder(dt_dive, 0)->gasmix.o2.permille = membuf[23] * 10;
free(compl_buffer);
}
JUMP(membuf, profile_length);
@@ -550,8 +550,8 @@ static unsigned char *dt_dive_parser(unsigned char *runner, struct dive *dt_dive
create_device_node(dt_dive->dc.model, dt_dive->dc.deviceid, "", "", dt_dive->dc.model);
dt_dive->dc.next = NULL;
if (!is_SCR && dt_dive->cylinders.nr > 0) {
- dt_dive->cylinders.cylinders[0].end.mbar = dt_dive->cylinders.cylinders[0].start.mbar -
- ((dt_dive->cylinders.cylinders[0].gas_used.mliter / dt_dive->cylinders.cylinders[0].type.size.mliter) * 1000);
+ get_cylinder(dt_dive, 0)->end.mbar = get_cylinder(dt_dive, 0)->start.mbar -
+ ((get_cylinder(dt_dive, 0)->gas_used.mliter / get_cylinder(dt_dive, 0)->type.size.mliter) * 1000);
}
free(devdata);
return membuf;
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;
diff --git a/core/divelist.c b/core/divelist.c
index 5eae5e638..451ed70a7 100644
--- a/core/divelist.c
+++ b/core/divelist.c
@@ -66,7 +66,7 @@ void get_dive_gas(const struct dive *dive, int *o2_p, int *he_p, int *o2max_p)
for (i = 0; i < dive->cylinders.nr; i++) {
- const cylinder_t *cyl = dive->cylinders.cylinders + i;
+ const cylinder_t *cyl = get_cylinder(dive, i);
int o2 = get_o2(cyl->gasmix);
int he = get_he(cyl->gasmix);
@@ -349,7 +349,7 @@ static double calculate_airuse(const struct dive *dive)
for (i = 0; i < dive->cylinders.nr; i++) {
pressure_t start, end;
- const cylinder_t *cyl = dive->cylinders.cylinders + i;
+ const cylinder_t *cyl = get_cylinder(dive, i);
start = cyl->start.mbar ? cyl->start : cyl->sample_start;
end = cyl->end.mbar ? cyl->end : cyl->sample_end;
diff --git a/core/equipment.c b/core/equipment.c
index 3a2e6db4b..39505a39d 100644
--- a/core/equipment.c
+++ b/core/equipment.c
@@ -279,7 +279,7 @@ void reset_cylinders(struct dive *dive, bool track_gas)
pressure_t decopo2 = {.mbar = prefs.decopo2};
for (int i = 0; i < dive->cylinders.nr; i++) {
- cylinder_t *cyl = &dive->cylinders.cylinders[i];
+ cylinder_t *cyl = get_cylinder(dive, i);
if (cyl->depth.mm == 0) /* if the gas doesn't give a mod, calculate based on prefs */
cyl->depth = gas_mod(cyl->gasmix, decopo2, dive, M_OR_FT(3,10));
if (track_gas)
@@ -308,10 +308,10 @@ void copy_cylinder_types(const struct dive *s, struct dive *d)
return;
for (i = 0; i < s->cylinders.nr && i < d->cylinders.nr; i++)
- copy_cylinder_type(s->cylinders.cylinders + i, d->cylinders.cylinders + i);
+ copy_cylinder_type(get_cylinder(s, i), get_cylinder(d, i));
for ( ; i < s->cylinders.nr; i++)
- add_cloned_cylinder(&d->cylinders, s->cylinders.cylinders[i]);
+ add_cloned_cylinder(&d->cylinders, *get_cylinder(s, i));
}
cylinder_t *add_empty_cylinder(struct cylinder_table *t)
@@ -355,7 +355,7 @@ void dump_cylinders(struct dive *dive, bool verbose)
{
printf("Cylinder list:\n");
for (int i = 0; i < dive->cylinders; i++) {
- cylinder_t *cyl = &dive->cylinders.cylinders[i];
+ cylinder_t *cyl = get_cylinder(dive, i);
printf("%02d: Type %s, %3.1fl, %3.0fbar\n", i, cyl->type.description, cyl->type.size.mliter / 1000.0, cyl->type.workingpressure.mbar / 1000.0);
printf(" Gasmix O2 %2.0f%% He %2.0f%%\n", cyl->gasmix.o2.permille / 10.0, cyl->gasmix.he.permille / 10.0);
diff --git a/core/gaspressures.c b/core/gaspressures.c
index a69dbb295..bf329add4 100644
--- a/core/gaspressures.c
+++ b/core/gaspressures.c
@@ -238,7 +238,7 @@ static void fill_missing_tank_pressures(struct dive *dive, struct plot_info *pi,
if (!track_pr)
return;
- if (dive->cylinders.cylinders[cyl].cylinder_use == OC_GAS)
+ if (get_cylinder(dive, cyl)->cylinder_use == OC_GAS)
strategy = SAC;
else
strategy = TIME;
@@ -302,7 +302,7 @@ static void fill_missing_tank_pressures(struct dive *dive, struct plot_info *pi,
last_segment = segment;
}
- if(dive->cylinders.cylinders[cyl].cylinder_use == OC_GAS) {
+ if(get_cylinder(dive, cyl)->cylinder_use == OC_GAS) {
/* if this segment has pressure_time, then calculate a new interpolated pressure */
if (interpolate.pressure_time) {
@@ -366,7 +366,7 @@ void populate_pressure_information(struct dive *dive, struct divecomputer *dc, s
{
UNUSED(dc);
int first, last, cyl;
- cylinder_t *cylinder = dive->cylinders.cylinders + sensor;
+ cylinder_t *cylinder = get_cylinder(dive, sensor);
pr_track_t *track = NULL;
pr_track_t *current = NULL;
const struct event *ev, *b_ev;
diff --git a/core/import-divinglog.c b/core/import-divinglog.c
index 5b9e4be3b..f3a62eaff 100644
--- a/core/import-divinglog.c
+++ b/core/import-divinglog.c
@@ -130,7 +130,7 @@ static int divinglog_profile(void *param, int columns, char **data, char **colum
state->cur_sample->pressure[0].mbar = pressure * 100;
state->cur_sample->rbt.seconds = rbt;
if (oldcyl != tank && tank >= 0 && tank < state->cur_dive->cylinders.nr) {
- struct gasmix mix = state->cur_dive->cylinders.cylinders[tank].gasmix;
+ struct gasmix mix = get_cylinder(state->cur_dive, tank)->gasmix;
int o2 = get_o2(mix);
int he = get_he(mix);
diff --git a/core/import-shearwater.c b/core/import-shearwater.c
index 1c1e68eb4..3cedb3f22 100644
--- a/core/import-shearwater.c
+++ b/core/import-shearwater.c
@@ -61,7 +61,7 @@ static int shearwater_changes(void *param, int columns, char **data, char **colu
int i;
bool found = false;
for (i = 0; i < state->cur_dive->cylinders.nr; ++i) {
- const cylinder_t *cyl = &state->cur_dive->cylinders.cylinders[i];
+ const cylinder_t *cyl = get_cylinder(state->cur_dive, i);
if (cyl->gasmix.o2.permille == o2 && cyl->gasmix.he.permille == he) {
found = true;
break;
diff --git a/core/parse-xml.c b/core/parse-xml.c
index 0f297bf9a..bca0269a3 100644
--- a/core/parse-xml.c
+++ b/core/parse-xml.c
@@ -704,7 +704,7 @@ void add_gas_switch_event(struct dive *dive, struct divecomputer *dc, int second
return;
}
/* The gas switch event format is insane for historical reasons */
- struct gasmix mix = dive->cylinders.cylinders[idx].gasmix;
+ struct gasmix mix = get_cylinder(dive, idx)->gasmix;
int o2 = get_o2(mix);
int he = get_he(mix);
struct event *ev;
@@ -1242,7 +1242,7 @@ static void gps_picture_location(char *buffer, struct picture *pic)
static void try_to_fill_dive(struct dive *dive, const char *name, char *buf, struct parser_state *state)
{
char *hash = NULL;
- cylinder_t *cyl = dive->cylinders.nr > 0 ? &dive->cylinders.cylinders[dive->cylinders.nr - 1] : NULL;
+ cylinder_t *cyl = dive->cylinders.nr > 0 ? get_cylinder(dive, dive->cylinders.nr - 1) : NULL;
pressure_t p;
start_match("dive", name, buf);
@@ -1904,7 +1904,7 @@ int parse_dlf_buffer(unsigned char *buffer, size_t size, struct dive_table *tabl
found = false;
for (i = 0; i < state.cur_dive->cylinders.nr; ++i) {
- const cylinder_t *cyl = &state.cur_dive->cylinders.cylinders[i];
+ const cylinder_t *cyl = get_cylinder(state.cur_dive, i);
if (cyl->gasmix.o2.permille == ptr[6] * 10 && cyl->gasmix.he.permille == ptr[7] * 10) {
found = true;
break;
diff --git a/core/planner.c b/core/planner.c
index 4a480640d..51453e1ee 100644
--- a/core/planner.c
+++ b/core/planner.c
@@ -409,7 +409,7 @@ static struct gaschanges *analyze_gaslist(struct diveplan *diveplan, struct dive
int nr = 0;
struct gaschanges *gaschanges = NULL;
struct divedatapoint *dp = diveplan->dp;
- int best_depth = dive->cylinders.cylinders[*asc_cylinder].depth.mm;
+ int best_depth = get_cylinder(dive, *asc_cylinder)->depth.mm;
bool total_time_zero = true;
while (dp) {
if (dp->time == 0 && total_time_zero) {
@@ -444,7 +444,7 @@ static struct gaschanges *analyze_gaslist(struct diveplan *diveplan, struct dive
for (nr = 0; nr < *gaschangenr; nr++) {
int idx = gaschanges[nr].gasidx;
printf("gaschange nr %d: @ %5.2lfm gasidx %d (%s)\n", nr, gaschanges[nr].depth / 1000.0,
- idx, gasname(dive->cylinders.cylinders[idx].gasmix));
+ idx, gasname(&get_cylinder(&dive, idx)->gasmix));
}
#endif
return gaschanges;
@@ -527,7 +527,7 @@ int ascent_velocity(int depth, int avg_depth, int bottom_time)
static void track_ascent_gas(int depth, struct dive *dive, int cylinder_id, int avg_depth, int bottom_time, bool safety_stop, enum divemode_t divemode)
{
- cylinder_t *cylinder = &dive->cylinders.cylinders[cylinder_id];
+ cylinder_t *cylinder = get_cylinder(dive, cylinder_id);
while (depth > 0) {
int deltad = ascent_velocity(depth, avg_depth, bottom_time) * TIMESTEP;
if (deltad > depth)
@@ -598,7 +598,7 @@ static bool enough_gas(const struct dive *dive, int current_cylinder)
cylinder_t *cyl;
if (current_cylinder < 0 || current_cylinder >= dive->cylinders.nr)
return false;
- cyl = &dive->cylinders.cylinders[current_cylinder];
+ cyl = get_cylinder(dive, current_cylinder);
if (!cyl->start.mbar)
return true;
@@ -732,7 +732,7 @@ bool plan(struct deco_state *ds, struct diveplan *diveplan, struct dive *dive, i
const struct event *ev = NULL;
divemode = UNDEF_COMP_TYPE;
divemode = get_current_divemode(&dive->dc, bottom_time, &ev, &divemode);
- gas = dive->cylinders.cylinders[current_cylinder].gasmix;
+ gas = get_cylinder(dive, current_cylinder)->gasmix;
po2 = sample->setpoint.mbar;
depth = dive->dc.sample[dive->dc.samples - 1].depth.mm;
@@ -787,11 +787,11 @@ bool plan(struct deco_state *ds, struct diveplan *diveplan, struct dive *dive, i
// How long can we stay at the current depth and still directly ascent to the surface?
do {
add_segment(ds, depth_to_bar(depth, dive),
- dive->cylinders.cylinders[current_cylinder].gasmix,
+ get_cylinder(dive, current_cylinder)->gasmix,
timestep, po2, divemode, prefs.bottomsac);
- update_cylinder_pressure(dive, depth, depth, timestep, prefs.bottomsac, &dive->cylinders.cylinders[current_cylinder], false, divemode);
+ update_cylinder_pressure(dive, depth, depth, timestep, prefs.bottomsac, get_cylinder(dive, current_cylinder), false, divemode);
clock += timestep;
- } while (trial_ascent(ds, 0, depth, 0, avg_depth, bottom_time, dive->cylinders.cylinders[current_cylinder].gasmix,
+ } while (trial_ascent(ds, 0, depth, 0, avg_depth, bottom_time, get_cylinder(dive, current_cylinder)->gasmix,
po2, diveplan->surface_pressure / 1000.0, dive, divemode) &&
enough_gas(dive, current_cylinder) && clock < 6 * 3600);
@@ -799,7 +799,7 @@ bool plan(struct deco_state *ds, struct diveplan *diveplan, struct dive *dive, i
// In the best of all worlds, we would roll back also the last add_segment in terms of caching deco state, but
// let's ignore that since for the eventual ascent in recreational mode, nobody looks at the ceiling anymore,
// so we don't really have to compute the deco state.
- update_cylinder_pressure(dive, depth, depth, -timestep, prefs.bottomsac, &dive->cylinders.cylinders[current_cylinder], false, divemode);
+ update_cylinder_pressure(dive, depth, depth, -timestep, prefs.bottomsac, get_cylinder(dive, current_cylinder), false, divemode);
clock -= timestep;
plan_add_segment(diveplan, clock - previous_point_time, depth, current_cylinder, po2, true, divemode);
previous_point_time = clock;
@@ -837,7 +837,7 @@ bool plan(struct deco_state *ds, struct diveplan *diveplan, struct dive *dive, i
if (best_first_ascend_cylinder != current_cylinder) {
current_cylinder = best_first_ascend_cylinder;
- gas = dive->cylinders.cylinders[current_cylinder].gasmix;
+ gas = get_cylinder(dive, current_cylinder)->gasmix;
#if DEBUG_PLAN & 16
printf("switch to gas %d (%d/%d) @ %5.2lfm\n", best_first_ascend_cylinder,
@@ -851,7 +851,7 @@ bool plan(struct deco_state *ds, struct diveplan *diveplan, struct dive *dive, i
divemode = OC;
po2 = 0;
add_segment(ds, depth_to_bar(depth, dive),
- dive->cylinders.cylinders[current_cylinder].gasmix,
+ get_cylinder(dive, current_cylinder)->gasmix,
prefs.min_switch_duration, po2, divemode, prefs.bottomsac);
plan_add_segment(diveplan, prefs.min_switch_duration, depth, current_cylinder, po2, false, divemode);
clock += prefs.min_switch_duration;
@@ -893,7 +893,7 @@ bool plan(struct deco_state *ds, struct diveplan *diveplan, struct dive *dive, i
last_ascend_rate = ascent_velocity(depth, avg_depth, bottom_time);
/* Always prefer the best_first_ascend_cylinder if it has the right gasmix.
* Otherwise take first cylinder from list with rightgasmix */
- if (same_gasmix(gas, dive->cylinders.cylinders[best_first_ascend_cylinder].gasmix))
+ if (same_gasmix(gas, get_cylinder(dive, best_first_ascend_cylinder)->gasmix))
current_cylinder = best_first_ascend_cylinder;
else
current_cylinder = get_gasidx(dive, gas);
@@ -918,7 +918,7 @@ bool plan(struct deco_state *ds, struct diveplan *diveplan, struct dive *dive, i
deltad = depth - stoplevels[stopidx];
add_segment(ds, depth_to_bar(depth, dive),
- dive->cylinders.cylinders[current_cylinder].gasmix,
+ get_cylinder(dive, current_cylinder)->gasmix,
TIMESTEP, po2, divemode, prefs.decosac);
last_segment_min_switch = false;
clock += TIMESTEP;
@@ -943,21 +943,21 @@ bool plan(struct deco_state *ds, struct diveplan *diveplan, struct dive *dive, i
if (current_cylinder != gaschanges[gi].gasidx) {
if (!prefs.switch_at_req_stop ||
!trial_ascent(ds, 0, depth, stoplevels[stopidx - 1], avg_depth, bottom_time,
- dive->cylinders.cylinders[current_cylinder].gasmix, po2, diveplan->surface_pressure / 1000.0, dive, divemode) || get_o2(dive->cylinders.cylinders[current_cylinder].gasmix) < 160) {
+ get_cylinder(dive, current_cylinder)->gasmix, po2, diveplan->surface_pressure / 1000.0, dive, divemode) || get_o2(get_cylinder(dive, current_cylinder)->gasmix) < 160) {
if (is_final_plan)
plan_add_segment(diveplan, clock - previous_point_time, depth, current_cylinder, po2, false, divemode);
stopping = true;
previous_point_time = clock;
current_cylinder = gaschanges[gi].gasidx;
- gas = dive->cylinders.cylinders[current_cylinder].gasmix;
+ gas = get_cylinder(dive, current_cylinder)->gasmix;
#if DEBUG_PLAN & 16
printf("switch to gas %d (%d/%d) @ %5.2lfm\n", gaschanges[gi].gasidx,
(get_o2(&gas) + 5) / 10, (get_he(&gas) + 5) / 10, gaschanges[gi].depth / 1000.0);
#endif
/* Stop for the minimum duration to switch gas unless we switch to o2 */
- if (!last_segment_min_switch && get_o2(dive->cylinders.cylinders[current_cylinder].gasmix) != 1000) {
+ if (!last_segment_min_switch && get_o2(get_cylinder(dive, current_cylinder)->gasmix) != 1000) {
add_segment(ds, depth_to_bar(depth, dive),
- dive->cylinders.cylinders[current_cylinder].gasmix,
+ get_cylinder(dive, current_cylinder)->gasmix,
prefs.min_switch_duration, po2, divemode, prefs.decosac);
clock += prefs.min_switch_duration;
last_segment_min_switch = true;
@@ -977,7 +977,7 @@ bool plan(struct deco_state *ds, struct diveplan *diveplan, struct dive *dive, i
while (1) {
/* Check if ascending to next stop is clear, go back and wait if we hit the ceiling on the way */
if (trial_ascent(ds, 0, depth, stoplevels[stopidx], avg_depth, bottom_time,
- dive->cylinders.cylinders[current_cylinder].gasmix, po2, diveplan->surface_pressure / 1000.0, dive, divemode)) {
+ get_cylinder(dive, current_cylinder)->gasmix, po2, diveplan->surface_pressure / 1000.0, dive, divemode)) {
decostoptable[decostopcounter].depth = depth;
decostoptable[decostopcounter].time = 0;
decostopcounter++;
@@ -1003,15 +1003,15 @@ bool plan(struct deco_state *ds, struct diveplan *diveplan, struct dive *dive, i
*/
if (pendinggaschange) {
current_cylinder = gaschanges[gi + 1].gasidx;
- gas = dive->cylinders.cylinders[current_cylinder].gasmix;
+ gas = get_cylinder(dive, current_cylinder)->gasmix;
#if DEBUG_PLAN & 16
printf("switch to gas %d (%d/%d) @ %5.2lfm\n", gaschanges[gi + 1].gasidx,
(get_o2(&gas) + 5) / 10, (get_he(&gas) + 5) / 10, gaschanges[gi + 1].depth / 1000.0);
#endif
/* Stop for the minimum duration to switch gas unless we switch to o2 */
- if (!last_segment_min_switch && get_o2(dive->cylinders.cylinders[current_cylinder].gasmix) != 1000) {
+ if (!last_segment_min_switch && get_o2(get_cylinder(dive, current_cylinder)->gasmix) != 1000) {
add_segment(ds, depth_to_bar(depth, dive),
- dive->cylinders.cylinders[current_cylinder].gasmix,
+ get_cylinder(dive, current_cylinder)->gasmix,
prefs.min_switch_duration, po2, divemode, prefs.decosac);
clock += prefs.min_switch_duration;
last_segment_min_switch = true;
@@ -1020,7 +1020,7 @@ bool plan(struct deco_state *ds, struct diveplan *diveplan, struct dive *dive, i
}
int new_clock = wait_until(ds, dive, clock, clock, laststoptime * 2 + 1, timestep, depth, stoplevels[stopidx], avg_depth,
- bottom_time, dive->cylinders.cylinders[current_cylinder].gasmix, po2, diveplan->surface_pressure / 1000.0, divemode);
+ bottom_time, get_cylinder(dive, current_cylinder)->gasmix, po2, diveplan->surface_pressure / 1000.0, divemode);
laststoptime = new_clock - clock;
/* Finish infinite deco */
if (laststoptime >= 48 * 3600 && depth >= 6000) {
@@ -1035,12 +1035,12 @@ bool plan(struct deco_state *ds, struct diveplan *diveplan, struct dive *dive, i
* backgas. This could be customized if there were demand.
*/
if (break_cylinder == -1) {
- if (get_o2(dive->cylinders.cylinders[best_first_ascend_cylinder].gasmix) <= 320)
+ if (get_o2(get_cylinder(dive, best_first_ascend_cylinder)->gasmix) <= 320)
break_cylinder = best_first_ascend_cylinder;
else
break_cylinder = 0;
}
- if (get_o2(dive->cylinders.cylinders[current_cylinder].gasmix) == 1000) {
+ if (get_o2(get_cylinder(dive, current_cylinder)->gasmix) == 1000) {
if (laststoptime >= 12 * 60) {
laststoptime = 12 * 60;
new_clock = clock + laststoptime;
@@ -1051,7 +1051,7 @@ bool plan(struct deco_state *ds, struct diveplan *diveplan, struct dive *dive, i
plan_add_segment(diveplan, laststoptime, depth, current_cylinder, po2, false, divemode);
previous_point_time = clock + laststoptime;
current_cylinder = break_cylinder;
- gas = dive->cylinders.cylinders[current_cylinder].gasmix;
+ gas = get_cylinder(dive, current_cylinder)->gasmix;
}
} else if (o2break_next) {
if (laststoptime >= 6 * 60) {
@@ -1063,11 +1063,11 @@ bool plan(struct deco_state *ds, struct diveplan *diveplan, struct dive *dive, i
plan_add_segment(diveplan, laststoptime, depth, current_cylinder, po2, false, divemode);
previous_point_time = clock + laststoptime;
current_cylinder = breakfrom_cylinder;
- gas = dive->cylinders.cylinders[current_cylinder].gasmix;
+ gas = get_cylinder(dive, current_cylinder)->gasmix;
}
}
}
- add_segment(ds, depth_to_bar(depth, dive), dive->cylinders.cylinders[stop_cylinder].gasmix,
+ add_segment(ds, depth_to_bar(depth, dive), get_cylinder(dive, stop_cylinder)->gasmix,
laststoptime, po2, divemode, prefs.decosac);
last_segment_min_switch = false;
decostoptable[decostopcounter].depth = depth;
diff --git a/core/plannernotes.c b/core/plannernotes.c
index dd909108a..6b3095082 100644
--- a/core/plannernotes.c
+++ b/core/plannernotes.c
@@ -190,13 +190,13 @@ void add_plan_to_notes(struct diveplan *diveplan, struct dive *dive, bool show_d
nextdp = dp->next;
if (dp->time == 0)
continue;
- gasmix = dive->cylinders.cylinders[dp->cylinderid].gasmix;
+ gasmix = get_cylinder(dive, dp->cylinderid)->gasmix;
depthvalue = get_depth_units(dp->depth.mm, &decimals, &depth_unit);
/* analyze the dive points ahead */
while (nextdp && nextdp->time == 0)
nextdp = nextdp->next;
if (nextdp)
- newgasmix = dive->cylinders.cylinders[nextdp->cylinderid].gasmix;
+ newgasmix = get_cylinder(dive, nextdp->cylinderid)->gasmix;
gaschange_after = (nextdp && (gasmix_distance(gasmix, newgasmix)));
gaschange_before = (gasmix_distance(lastprintgasmix, gasmix));
rebreatherchange_after = (nextdp && (dp->setpoint != nextdp->setpoint || dp->divemode != nextdp->divemode));
@@ -466,7 +466,7 @@ void add_plan_to_notes(struct diveplan *diveplan, struct dive *dive, bool show_d
const char *unit, *pressure_unit, *depth_unit;
char warning[1000] = "";
char mingas[1000] = "";
- cylinder_t *cyl = &dive->cylinders.cylinders[gasidx];
+ cylinder_t *cyl = get_cylinder(dive, gasidx);
if (cyl->cylinder_use == NOT_USED)
continue;
@@ -581,7 +581,7 @@ void add_plan_to_notes(struct diveplan *diveplan, struct dive *dive, bool show_d
while (dp) {
if (dp->time != 0) {
struct gas_pressures pressures;
- struct gasmix gasmix = dive->cylinders.cylinders[dp->cylinderid].gasmix;
+ struct gasmix gasmix = get_cylinder(dive, dp->cylinderid)->gasmix;
current_divemode = get_current_divemode(&dive->dc, dp->time, &evd, &current_divemode);
amb = depth_to_atm(dp->depth.mm, dive);
diff --git a/core/profile.c b/core/profile.c
index 4d35155b2..bee2b7a4a 100644
--- a/core/profile.c
+++ b/core/profile.c
@@ -189,7 +189,7 @@ static int get_local_sac(struct plot_info *pi, int idx1, int idx2, struct dive *
depth = (entry1->depth + entry2->depth) / 2;
atm = depth_to_atm(depth, dive);
- cyl = dive->cylinders.cylinders + index;
+ cyl = get_cylinder(dive, index);
airuse = gas_volume(cyl, a) - gas_volume(cyl, b);
@@ -414,7 +414,7 @@ static void calculate_max_limits_new(struct dive *dive, struct divecomputer *giv
/* Get the per-cylinder maximum pressure if they are manual */
for (cyl = 0; cyl < dive->cylinders.nr; cyl++) {
- int mbar = dive->cylinders.cylinders[cyl].start.mbar;
+ int mbar = get_cylinder(dive, cyl)->start.mbar;
if (mbar > maxpressure)
maxpressure = mbar;
if (mbar < minpressure)
@@ -677,7 +677,7 @@ static int sac_between(struct dive *dive, struct plot_info *pi, int first, int l
a.mbar = get_plot_pressure(pi, first, i);
b.mbar = get_plot_pressure(pi, last, i);
- cyl = dive->cylinders.cylinders + i;
+ cyl = get_cylinder(dive, i);
cyluse = gas_volume(cyl, a) - gas_volume(cyl, b);
if (cyluse > 0)
airuse += cyluse;
@@ -800,7 +800,7 @@ static void matching_gases(struct dive *dive, struct gasmix gasmix, bool gases[]
int i;
for (i = 0; i < dive->cylinders.nr; i++)
- gases[i] = same_gasmix(gasmix, dive->cylinders.cylinders[i].gasmix);
+ gases[i] = same_gasmix(gasmix, get_cylinder(dive, i)->gasmix);
}
static void calculate_sac(struct dive *dive, struct divecomputer *dc, struct plot_info *pi)
@@ -890,7 +890,7 @@ static void setup_gas_sensor_pressure(const struct dive *dive, const struct dive
// Fill in "seen[]" array - mark cylinders we're not interested
// in as negative.
for (i = 0; i < pi->nr_cylinders; i++) {
- const cylinder_t *cyl = dive->cylinders.cylinders + i;
+ const cylinder_t *cyl = get_cylinder(dive, i);
int start = cyl->start.mbar;
int end = cyl->end.mbar;
@@ -920,7 +920,7 @@ static void setup_gas_sensor_pressure(const struct dive *dive, const struct dive
for (i = 0; i < pi->nr_cylinders; i++) {
if (seen[i] >= 0) {
- const cylinder_t *cyl = dive->cylinders.cylinders + i;
+ const cylinder_t *cyl = get_cylinder(dive, i);
add_plot_pressure(pi, first[i], i, cyl->start);
add_plot_pressure(pi, last[i], i, cyl->end);
@@ -1442,7 +1442,7 @@ static void plot_string(struct plot_info *pi, int idx, struct membuffer *b)
int mbar = get_plot_pressure(pi, idx, cyl);
if (!mbar)
continue;
- struct gasmix mix = displayed_dive.cylinders.cylinders[cyl].gasmix;
+ struct gasmix mix = get_cylinder(&displayed_dive, cyl)->gasmix;
pressurevalue = get_pressure_units(mbar, &pressure_unit);
put_format_loc(b, translate("gettextFromC", "P: %d%s (%s)\n"), pressurevalue, pressure_unit, gasname(mix));
}
@@ -1706,7 +1706,7 @@ void compare_samples(struct plot_info *pi, int idx1, int idx2, char *buf, int bu
pressurevalue = get_pressure_units(bar_used, &pressure_unit);
memcpy(buf2, buf, bufsize);
snprintf_loc(buf, bufsize, translate("gettextFromC", "%s ΔP:%d%s"), buf2, pressurevalue, pressure_unit);
- cylinder_t *cyl = displayed_dive.cylinders.cylinders + 0;
+ cylinder_t *cyl = get_cylinder(&displayed_dive, 0);
/* if we didn't cross a tank change and know the cylidner size as well, show SAC rate */
if (!crossed_tankchange && cyl->type.size.mliter) {
double volume_value;
diff --git a/core/qthelper.cpp b/core/qthelper.cpp
index b8afd8267..6d33be383 100644
--- a/core/qthelper.cpp
+++ b/core/qthelper.cpp
@@ -391,7 +391,7 @@ QVector<QPair<QString, int>> selectedDivesGasUsed()
volume_t *diveGases = get_gas_used(d);
for (j = 0; j < d->cylinders.nr; j++) {
if (diveGases[j].mliter) {
- QString gasName = gasname(d->cylinders.cylinders[j].gasmix);
+ QString gasName = gasname(get_cylinder(d, j)->gasmix);
gasUsed[gasName] += diveGases[j].mliter;
}
}
@@ -1186,7 +1186,7 @@ QString get_gas_string(struct gasmix gas)
QString get_divepoint_gas_string(struct dive *d, const divedatapoint &p)
{
int idx = p.cylinderid;
- return get_gas_string(d->cylinders.cylinders[idx].gasmix);
+ return get_gas_string(get_cylinder(d, idx)->gasmix);
}
QString get_taglist_string(struct tag_entry *tag_list)
diff --git a/core/save-git.c b/core/save-git.c
index 662891153..9e14784fe 100644
--- a/core/save-git.c
+++ b/core/save-git.c
@@ -138,7 +138,7 @@ static void save_cylinder_info(struct membuffer *b, struct dive *dive)
nr = nr_cylinders(dive);
for (i = 0; i < nr; i++) {
- cylinder_t *cylinder = dive->cylinders.cylinders + i;
+ cylinder_t *cylinder = get_cylinder(dive, i);
int volume = cylinder->type.size.mliter;
const char *description = cylinder->type.description;
int use = cylinder->cylinder_use;
diff --git a/core/save-html.c b/core/save-html.c
index 380f2fa8e..4c9b428cb 100644
--- a/core/save-html.c
+++ b/core/save-html.c
@@ -132,7 +132,7 @@ static void put_cylinder_HTML(struct membuffer *b, struct dive *dive)
put_string(b, separator);
for (i = 0; i < nr; i++) {
- cylinder_t *cylinder = dive->cylinders.cylinders + i;
+ cylinder_t *cylinder = get_cylinder(dive, i);
put_format(b, "%s{", separator);
separator = ", ";
write_attribute(b, "Type", cylinder->type.description, ", ");
diff --git a/core/save-xml.c b/core/save-xml.c
index a7bf6b23e..f1fbdc831 100644
--- a/core/save-xml.c
+++ b/core/save-xml.c
@@ -179,7 +179,7 @@ static void save_cylinder_info(struct membuffer *b, struct dive *dive)
nr = nr_cylinders(dive);
for (i = 0; i < nr; i++) {
- cylinder_t *cylinder = dive->cylinders.cylinders + i;
+ cylinder_t *cylinder = get_cylinder(dive, i);
int volume = cylinder->type.size.mliter;
const char *description = cylinder->type.description;
int use = cylinder->cylinder_use;
diff --git a/core/statistics.c b/core/statistics.c
index fa7985c90..7adffa2f0 100644
--- a/core/statistics.c
+++ b/core/statistics.c
@@ -334,7 +334,7 @@ bool is_cylinder_used(const struct dive *dive, int idx)
if (idx < 0 || idx >= dive->cylinders.nr)
return false;
- cyl = &dive->cylinders.cylinders[idx];
+ cyl = get_cylinder(dive, idx);
if ((cyl->start.mbar - cyl->end.mbar) > SOME_GAS)
return true;
@@ -369,7 +369,7 @@ volume_t *get_gas_used(struct dive *dive)
volume_t *gases = malloc(dive->cylinders.nr * sizeof(volume_t));
for (idx = 0; idx < dive->cylinders.nr; idx++) {
- cylinder_t *cyl = &dive->cylinders.cylinders[idx];
+ cylinder_t *cyl = get_cylinder(dive, idx);
pressure_t start, end;
start = cyl->start.mbar ? cyl->start : cyl->sample_start;
@@ -408,7 +408,7 @@ void selected_dives_gas_parts(volume_t *o2_tot, volume_t *he_tot)
for (j = 0; j < d->cylinders.nr; j++) {
if (diveGases[j].mliter) {
volume_t o2 = {}, he = {};
- get_gas_parts(d->cylinders.cylinders[j].gasmix, diveGases[j], O2_IN_AIR, &o2, &he);
+ get_gas_parts(get_cylinder(d, j)->gasmix, diveGases[j], O2_IN_AIR, &o2, &he);
o2_tot->mliter += o2.mliter;
he_tot->mliter += he.mliter;
}
diff --git a/core/subsurface-qt/DiveObjectHelper.cpp b/core/subsurface-qt/DiveObjectHelper.cpp
index 8e289d6e1..606614b05 100644
--- a/core/subsurface-qt/DiveObjectHelper.cpp
+++ b/core/subsurface-qt/DiveObjectHelper.cpp
@@ -32,7 +32,7 @@ static QString getFormattedWeight(const struct dive *dive, int idx)
static QString getFormattedCylinder(const struct dive *dive, int idx)
{
- const cylinder_t *cyl = &dive->cylinders.cylinders[idx];
+ const cylinder_t *cyl = get_cylinder(dive, idx);
const char *desc = cyl->type.description;
if (!desc && idx > 0)
return QString();
@@ -46,7 +46,7 @@ static QString getFormattedCylinder(const struct dive *dive, int idx)
static QString getPressures(const struct dive *dive, int i, enum returnPressureSelector ret)
{
- const cylinder_t *cyl = &dive->cylinders.cylinders[i];
+ const cylinder_t *cyl = get_cylinder(dive, i);
QString fmt;
if (ret == START_PRESSURE) {
if (cyl->start.mbar)
@@ -104,10 +104,10 @@ static QString formatGas(const dive *d)
for (int i = 0; i < d->cylinders.nr; i++) {
if (!is_cylinder_used(d, i))
continue;
- gas = d->cylinders.cylinders[i].type.description;
+ gas = get_cylinder(d, i)->type.description;
if (!gas.isEmpty())
gas += QChar(' ');
- gas += gasname(d->cylinders.cylinders[i].gasmix);
+ gas += gasname(get_cylinder(d, i)->gasmix);
// if has a description and if such gas is not already present
if (!gas.isEmpty() && gases.indexOf(gas) == -1) {
if (!gases.isEmpty())
@@ -167,8 +167,8 @@ static QVector<CylinderObjectHelper> makeCylinderObjects(const dive *d)
QVector<CylinderObjectHelper> res;
for (int i = 0; i < d->cylinders.nr; i++) {
//Don't add blank cylinders, only those that have been defined.
- if (d->cylinders.cylinders[i].type.description)
- res.append(CylinderObjectHelper(&d->cylinders.cylinders[i])); // no emplace for QVector. :(
+ if (get_cylinder(d, i)->type.description)
+ res.append(CylinderObjectHelper(get_cylinder(d, i))); // no emplace for QVector. :(
}
return res;
}
@@ -178,7 +178,7 @@ QStringList formatGetCylinder(const dive *d)
QStringList getCylinder;
for (int i = 0; i < d->cylinders.nr; i++) {
if (is_cylinder_used(d, i))
- getCylinder << d->cylinders.cylinders[i].type.description;
+ getCylinder << get_cylinder(d, i)->type.description;
}
return getCylinder;
}
@@ -208,7 +208,7 @@ QStringList getFirstGas(const dive *d)
QStringList gas;
for (int i = 0; i < d->cylinders.nr; i++) {
if (is_cylinder_used(d, i))
- gas << get_gas_string(d->cylinders.cylinders[i].gasmix);
+ gas << get_gas_string(get_cylinder(d, i)->gasmix);
}
return gas;
}
@@ -239,7 +239,7 @@ QStringList getFullCylinderList()
int i = 0;
for_each_dive (i, d) {
for (int j = 0; j < d->cylinders.nr; j++)
- addStringToSortedList(cylinders, d->cylinders.cylinders[j].type.description);
+ addStringToSortedList(cylinders, get_cylinder(d, j)->type.description);
}
for (int ti = 0; ti < MAX_TANK_INFO; ti++)
diff --git a/desktop-widgets/divelogexportdialog.cpp b/desktop-widgets/divelogexportdialog.cpp
index e093819dd..cf859e2b9 100644
--- a/desktop-widgets/divelogexportdialog.cpp
+++ b/desktop-widgets/divelogexportdialog.cpp
@@ -445,7 +445,7 @@ void DiveLogExportDialog::export_TeX(const char *filename, const bool selected_o
put_format(&buf, "\n%% Gas use information:\n");
qty_cyl = 0;
for (i = 0; i < dive->cylinders.nr; i++){
- const cylinder_t &cyl = dive->cylinders.cylinders[i];
+ const cylinder_t &cyl = *get_cylinder(dive, i);
if (is_cylinder_used(dive, i) || (prefs.display_unused_tanks && cyl.type.description)){
put_format(&buf, "\\def\\%scyl%cdescription{%s}\n", ssrf, 'a' + i, cyl.type.description);
put_format(&buf, "\\def\\%scyl%cgasname{%s}\n", ssrf, 'a' + i, gasname(cyl.gasmix));
diff --git a/desktop-widgets/simplewidgets.cpp b/desktop-widgets/simplewidgets.cpp
index c49a9886b..5edc66e80 100644
--- a/desktop-widgets/simplewidgets.cpp
+++ b/desktop-widgets/simplewidgets.cpp
@@ -512,7 +512,7 @@ void DiveComponentSelection::buttonClicked(QAbstractButton *button)
text << tr("Cylinders:\n");
for (cyl = 0; cyl < displayed_dive.cylinders.nr; cyl++) {
if (is_cylinder_used(&displayed_dive, cyl))
- text << displayed_dive.cylinders.cylinders[cyl].type.description << " " << gasname(displayed_dive.cylinders.cylinders[cyl].gasmix) << "\n";
+ text << get_cylinder(&displayed_dive, cyl)->type.description << " " << gasname(get_cylinder(&displayed_dive, cyl)->gasmix) << "\n";
}
}
if (what->weights) {
diff --git a/desktop-widgets/tab-widgets/TabDiveInformation.cpp b/desktop-widgets/tab-widgets/TabDiveInformation.cpp
index 6fabc3bb3..928627311 100644
--- a/desktop-widgets/tab-widgets/TabDiveInformation.cpp
+++ b/desktop-widgets/tab-widgets/TabDiveInformation.cpp
@@ -66,7 +66,7 @@ void TabDiveInformation::updateProfile()
gaslist.append(separator); volumes.append(separator); SACs.append(separator);
separator = "\n";
- gaslist.append(gasname(current_dive->cylinders.cylinders[i].gasmix));
+ gaslist.append(gasname(get_cylinder(current_dive, i)->gasmix));
if (!gases[i].mliter)
continue;
volumes.append(get_volume_string(gases[i], true));
diff --git a/desktop-widgets/tab-widgets/maintab.cpp b/desktop-widgets/tab-widgets/maintab.cpp
index 4d3d7397d..e10575942 100644
--- a/desktop-widgets/tab-widgets/maintab.cpp
+++ b/desktop-widgets/tab-widgets/maintab.cpp
@@ -656,7 +656,7 @@ bool cylinders_equal(const dive *d1, const dive *d2)
if (d1->cylinders.nr != d2->cylinders.nr)
return false;
for (int i = 0; i < d1->cylinders.nr; ++i) {
- if (!same_cylinder(d1->cylinders.cylinders[i], d2->cylinders.cylinders[i]))
+ if (!same_cylinder(*get_cylinder(d1, i), *get_cylinder(d2, i)))
return false;
}
return true;
diff --git a/mobile-widgets/qmlmanager.cpp b/mobile-widgets/qmlmanager.cpp
index f14092fb1..c27e2ca23 100644
--- a/mobile-widgets/qmlmanager.cpp
+++ b/mobile-widgets/qmlmanager.cpp
@@ -1125,10 +1125,10 @@ void QMLManager::commitChanges(QString diveId, QString number, QString date, QSt
if (state != "add" && !is_cylinder_used(d, i))
continue;
- d->cylinders.cylinders[i].start.mbar = parsePressureToMbar(startpressure[j]);
- d->cylinders.cylinders[i].end.mbar = parsePressureToMbar(endpressure[j]);
- if (d->cylinders.cylinders[i].end.mbar > d->cylinders.cylinders[i].start.mbar)
- d->cylinders.cylinders[i].end.mbar = d->cylinders.cylinders[i].start.mbar;
+ get_cylinder(d, i)->start.mbar = parsePressureToMbar(startpressure[j]);
+ get_cylinder(d, i)->end.mbar = parsePressureToMbar(endpressure[j]);
+ if (get_cylinder(d, i)->end.mbar > get_cylinder(d, i)->start.mbar)
+ get_cylinder(d, i)->end.mbar = get_cylinder(d, i)->start.mbar;
j++;
}
@@ -1146,8 +1146,8 @@ void QMLManager::commitChanges(QString diveId, QString number, QString date, QSt
he >= 0 && he <= 1000 &&
o2 + he <= 1000) {
diveChanged = true;
- d->cylinders.cylinders[i].gasmix.o2.permille = o2;
- d->cylinders.cylinders[i].gasmix.he.permille = he;
+ get_cylinder(d, i)->gasmix.o2.permille = o2;
+ get_cylinder(d, i)->gasmix.he.permille = he;
}
j++;
}
@@ -1173,9 +1173,9 @@ void QMLManager::commitChanges(QString diveId, QString number, QString date, QSt
break;
}
}
- d->cylinders.cylinders[j].type.description = copy_qstring(usedCylinder[k]);
- d->cylinders.cylinders[j].type.size.mliter = size;
- d->cylinders.cylinders[j].type.workingpressure.mbar = wp;
+ get_cylinder(d, j)->type.description = copy_qstring(usedCylinder[k]);
+ get_cylinder(d, j)->type.size.mliter = size;
+ get_cylinder(d, j)->type.workingpressure.mbar = wp;
k++;
}
}
@@ -1789,8 +1789,8 @@ QStringList QMLManager::cylinderInit() const
int i = 0;
for_each_dive (i, d) {
for (int j = 0; j < d->cylinders.nr; j++) {
- if (!empty_string(d->cylinders.cylinders[j].type.description))
- cylinders << d->cylinders.cylinders[j].type.description;
+ if (!empty_string(get_cylinder(d, j)->type.description))
+ cylinders << get_cylinder(d, j)->type.description;
}
}
diff --git a/profile-widget/diveprofileitem.cpp b/profile-widget/diveprofileitem.cpp
index 3d0ba2e7a..2d50ad222 100644
--- a/profile-widget/diveprofileitem.cpp
+++ b/profile-widget/diveprofileitem.cpp
@@ -748,7 +748,7 @@ void DiveGasPressureItem::modelDataChanged(const QModelIndex &topLeft, const QMo
label_y_offset = -7 * axisLog;
}
plotPressureValue(mbar, entry->sec, alignVar, value_y_offset);
- plotGasValue(mbar, entry->sec, displayed_dive.cylinders.cylinders[cyl].gasmix, alignVar, label_y_offset);
+ plotGasValue(mbar, entry->sec, get_cylinder(&displayed_dive, cyl)->gasmix, alignVar, label_y_offset);
seen_cyl[cyl] = true;
/* Alternate alignment as we see cylinder use.. */
diff --git a/profile-widget/profilewidget2.cpp b/profile-widget/profilewidget2.cpp
index 01cd733be..ccbae7cc4 100644
--- a/profile-widget/profilewidget2.cpp
+++ b/profile-widget/profilewidget2.cpp
@@ -1536,7 +1536,7 @@ void ProfileWidget2::contextMenuEvent(QContextMenuEvent *event)
int newGasIdx = gasChangeIdx + 1;
const struct plot_data &newGasEntry = plotInfo.entry[newGasIdx];
qDebug() << "after gas change at " << newGasEntry->sec << ": sensor pressure" << newGasEntry->pressure[0] << "interpolated" << newGasEntry->pressure[1];
- if (get_plot_sensor_pressure(&plotInfo, gasChangeIdx) == 0 || displayed_dive.cylinders.cylinders[gasChangeEntry->sensor[0]].sample_start.mbar == 0) {
+ if (get_plot_sensor_pressure(&plotInfo, gasChangeIdx) == 0 || get_cylinder(&displayed_dive, gasChangeEntry->sensor[0])->sample_start.mbar == 0) {
// if we have no sensorpressure or if we have no pressure from samples we can assume that
// we only have interpolated pressure (the pressure in the entry may be stored in the sensor
// pressure field if this is the first or last entry for this tank... see details in gaspressures.c
@@ -1545,7 +1545,7 @@ void ProfileWidget2::contextMenuEvent(QContextMenuEvent *event)
QAction *adjustOldPressure = m.addAction(tr("Adjust pressure of cyl. %1 (currently interpolated as %2)")
.arg(gasChangeEntry->sensor[0] + 1).arg(get_pressure_string(pressure)));
}
- if (get_plot_sensor_pressure(&plotInfo, newGasIdx) == 0 || displayed_dive.cylinders.cylinders[newGasEntry->sensor[0]].sample_start.mbar == 0) {
+ if (get_plot_sensor_pressure(&plotInfo, newGasIdx) == 0 || get_cylinder(&displayed_dive, newGasEntry->sensor[0])->sample_start.mbar == 0) {
// we only have interpolated press -- see commend above
pressure_t pressure;
pressure.mbar = get_plot_interpolated_pressure(&plotInfo, newGasIdx) ? : get_plot_sensor_pressure(&plotInfo, newGasIdx);
@@ -1882,7 +1882,7 @@ void ProfileWidget2::repositionDiveHandlers()
QLineF line(p1, p2);
QPointF pos = line.pointAt(0.5);
gases[i]->setPos(pos);
- gases[i]->setText(get_gas_string(displayed_dive.cylinders.cylinders[datapoint.cylinderid].gasmix));
+ gases[i]->setText(get_gas_string(get_cylinder(&displayed_dive, datapoint.cylinderid)->gasmix));
gases[i]->setVisible(datapoint.entered &&
(i == 0 || gases[i]->text() != gases[i-1]->text()));
}
diff --git a/profile-widget/tankitem.cpp b/profile-widget/tankitem.cpp
index e3233184c..4967633ed 100644
--- a/profile-widget/tankitem.cpp
+++ b/profile-widget/tankitem.cpp
@@ -97,7 +97,7 @@ void TankItem::modelDataChanged(const QModelIndex&, const QModelIndex&)
// start with the first gasmix and at the start of the dive
int cyl = explicit_first_cylinder(&displayed_dive, dc);
- struct gasmix gasmix = displayed_dive.cylinders.cylinders[cyl].gasmix;
+ struct gasmix gasmix = get_cylinder(&displayed_dive, cyl)->gasmix;
int startTime = 0;
// work through all the gas changes and add the rectangle for each gas while it was used
diff --git a/qt-models/cylindermodel.cpp b/qt-models/cylindermodel.cpp
index f64cc213a..22fc5ae8b 100644
--- a/qt-models/cylindermodel.cpp
+++ b/qt-models/cylindermodel.cpp
@@ -134,7 +134,7 @@ QVariant CylindersModel::data(const QModelIndex &index, int role) const
if (!index.isValid() || index.row() >= rows)
return QVariant();
- const cylinder_t *cyl = &displayed_dive.cylinders.cylinders[index.row()];
+ const cylinder_t *cyl = get_cylinder(&displayed_dive, index.row());
switch (role) {
case Qt::BackgroundRole: {
@@ -259,7 +259,7 @@ QVariant CylindersModel::data(const QModelIndex &index, int role) const
cylinder_t *CylindersModel::cylinderAt(const QModelIndex &index)
{
- return &displayed_dive.cylinders.cylinders[index.row()];
+ return get_cylinder(&displayed_dive, index.row());
}
// this is our magic 'pass data in' function that allows the delegate to get
@@ -449,7 +449,7 @@ static bool show_cylinder(struct dive *dive, int i)
if (is_cylinder_used(dive, i))
return true;
- cylinder_t *cyl = dive->cylinders.cylinders + i;
+ cylinder_t *cyl = get_cylinder(dive, i);
if (cyl->start.mbar || cyl->sample_start.mbar ||
cyl->end.mbar || cyl->sample_end.mbar)
return true;
@@ -533,10 +533,10 @@ void CylindersModel::moveAtFirst(int cylid)
cylinder_t temp_cyl;
beginMoveRows(QModelIndex(), cylid, cylid, QModelIndex(), 0);
- memmove(&temp_cyl, &displayed_dive.cylinders.cylinders[cylid], sizeof(temp_cyl));
+ memmove(&temp_cyl, get_cylinder(&displayed_dive, cylid), sizeof(temp_cyl));
for (int i = cylid - 1; i >= 0; i--)
- memmove(&displayed_dive.cylinders.cylinders[i + 1], &displayed_dive.cylinders.cylinders[i], sizeof(temp_cyl));
- memmove(&displayed_dive.cylinders.cylinders[0], &temp_cyl, sizeof(temp_cyl));
+ memmove(get_cylinder(&displayed_dive, i + 1), get_cylinder(&displayed_dive, i), sizeof(temp_cyl));
+ memmove(get_cylinder(&displayed_dive, 0), &temp_cyl, sizeof(temp_cyl));
// Create a mapping of cylinder indexes:
// 1) Fill mapping[0]..mapping[cyl] with 0..index
@@ -558,7 +558,7 @@ void CylindersModel::updateDecoDepths(pressure_t olddecopo2)
pressure_t decopo2;
decopo2.mbar = prefs.decopo2;
for (int i = 0; i < displayed_dive.cylinders.nr; i++) {
- cylinder_t *cyl = &displayed_dive.cylinders.cylinders[i];
+ cylinder_t *cyl = get_cylinder(&displayed_dive, i);
/* If the gas's deco MOD matches the old pO2, it will have been automatically calculated and should be updated.
* If they don't match, we should leave the user entered depth as it is */
if (cyl->depth.mm == gas_mod(cyl->gasmix, olddecopo2, &displayed_dive, M_OR_FT(3, 10)).mm) {
@@ -578,7 +578,7 @@ bool CylindersModel::updateBestMixes()
// Check if any of the cylinders are best mixes, update if needed
bool gasUpdated = false;
for (int i = 0; i < displayed_dive.cylinders.nr; i++) {
- cylinder_t *cyl = &displayed_dive.cylinders.cylinders[i];
+ cylinder_t *cyl = get_cylinder(&displayed_dive, i);
if (cyl->bestmix_o2) {
cyl->gasmix.o2 = best_o2(displayed_dive.maxdepth, &displayed_dive);
// fO2 + fHe must not be greater than 1
diff --git a/qt-models/diveplannermodel.cpp b/qt-models/diveplannermodel.cpp
index 8d19afcfb..dbac82681 100644
--- a/qt-models/diveplannermodel.cpp
+++ b/qt-models/diveplannermodel.cpp
@@ -268,13 +268,13 @@ QVariant DivePlannerPointsModel::data(const QModelIndex &index, int role) const
case GAS:
/* Check if we have the same gasmix two or more times
* If yes return more verbose string */
- int same_gas = same_gasmix_cylinder(&displayed_dive.cylinders.cylinders[p.cylinderid], p.cylinderid, &displayed_dive, true);
+ int same_gas = same_gasmix_cylinder(get_cylinder(&displayed_dive, p.cylinderid), p.cylinderid, &displayed_dive, true);
if (same_gas == -1)
- return get_gas_string(displayed_dive.cylinders.cylinders[p.cylinderid].gasmix);
+ return get_gas_string(get_cylinder(&displayed_dive, p.cylinderid)->gasmix);
else
- return get_gas_string(displayed_dive.cylinders.cylinders[p.cylinderid].gasmix) +
+ return get_gas_string(get_cylinder(&displayed_dive, p.cylinderid)->gasmix) +
QString(" (%1 %2 ").arg(tr("cyl.")).arg(p.cylinderid + 1) +
- displayed_dive.cylinders.cylinders[p.cylinderid].type.description + ")";
+ get_cylinder(&displayed_dive, p.cylinderid)->type.description + ")";
}
} else if (role == Qt::DecorationRole) {
switch (index.column()) {
@@ -894,7 +894,7 @@ void DivePlannerPointsModel::createTemporaryPlan()
struct deco_state *cache = NULL;
struct divedatapoint *dp = NULL;
for (int i = 0; i < displayed_dive.cylinders.nr; i++) {
- cylinder_t *cyl = &displayed_dive.cylinders.cylinders[i];
+ cylinder_t *cyl = get_cylinder(&displayed_dive, i);
if (cyl->depth.mm && cyl->cylinder_use != NOT_USED) {
dp = create_dp(0, cyl->depth.mm, i, 0);
if (diveplan.dp) {
diff --git a/qt-models/divetripmodel.cpp b/qt-models/divetripmodel.cpp
index 220d122d4..ada648762 100644
--- a/qt-models/divetripmodel.cpp
+++ b/qt-models/divetripmodel.cpp
@@ -157,7 +157,7 @@ QVariant DiveTripModelBase::diveData(const struct dive *d, int column, int role)
case SUIT:
return QString(d->suit);
case CYLINDER:
- return d->cylinders.nr > 0 ? QString(d->cylinders.cylinders[0].type.description) : QString();
+ return d->cylinders.nr > 0 ? QString(get_cylinder(d, 0)->type.description) : QString();
case SAC:
return displaySac(d, prefs.units.show_units_table);
case OTU:
@@ -1411,7 +1411,7 @@ bool DiveTripModelList::lessThan(const QModelIndex &i1, const QModelIndex &i2) c
return lessThanHelper(strCmp(d1->suit, d2->suit), row_diff);
case CYLINDER:
if (d1->cylinders.nr > 0 && d2->cylinders.nr > 0)
- return lessThanHelper(strCmp(d1->cylinders.cylinders[0].type.description, d2->cylinders.cylinders[0].type.description), row_diff);
+ return lessThanHelper(strCmp(get_cylinder(d1, 0)->type.description, get_cylinder(d2, 0)->type.description), row_diff);
return d1->cylinders.nr - d2->cylinders.nr < 0;
case GAS:
return lessThanHelper(nitrox_sort_value(d1) - nitrox_sort_value(d2), row_diff);
diff --git a/qt-models/models.cpp b/qt-models/models.cpp
index ab80f95f0..7be9c2440 100644
--- a/qt-models/models.cpp
+++ b/qt-models/models.cpp
@@ -27,7 +27,7 @@ static QStringList getGasList()
{
QStringList list;
for (int i = 0; i < displayed_dive.cylinders.nr; i++) {
- const cylinder_t *cyl = &displayed_dive.cylinders.cylinders[i];
+ const cylinder_t *cyl = get_cylinder(&displayed_dive, i);
/* Check if we have the same gasmix two or more times
* If yes return more verbose string */
int same_gas = same_gasmix_cylinder(cyl, i, &displayed_dive, true);
diff --git a/smtk-import/smartrak.c b/smtk-import/smartrak.c
index 64a613fc7..5054297ab 100644
--- a/smtk-import/smartrak.c
+++ b/smtk-import/smartrak.c
@@ -507,7 +507,7 @@ static void merge_cylinder_info(cylinder_t *src, cylinder_t *dst)
static int smtk_clean_cylinders(struct dive *d)
{
int i = tanks - 1;
- cylinder_t *cyl, *base = &d->cylinders.cylinders[0];
+ cylinder_t *cyl, *base = get_cylinder(d, 0);
cyl = base + tanks - 1;
while (cyl != base) {
@@ -1038,24 +1038,24 @@ void smartrak_import(const char *file, struct dive_table *divetable)
int tankidxcol = coln(TANKIDX);
for (i = 0; i < tanks; i++) {
- if (smtkdive->cylinders.cylinders[i].start.mbar == 0)
- smtkdive->cylinders.cylinders[i].start.mbar = lrint(strtod(col[(i * 2) + pstartcol]->bind_ptr, NULL) * 1000);
+ if (get_cylinder(smtkdive, i)->start.mbar == 0)
+ get_cylinder(smtkdive, i)->start.mbar = lrint(strtod(col[(i * 2) + pstartcol]->bind_ptr, NULL) * 1000);
/*
* If there is a start pressure ensure that end pressure is not zero as
* will be registered in DCs which only keep track of differential pressures,
* and collect the data registered by the user in mdb
*/
- if (smtkdive->cylinders.cylinders[i].end.mbar == 0 && smtkdive->cylinders.cylinders[i].start.mbar != 0)
- smtkdive->cylinders.cylinders[i].end.mbar = lrint(strtod(col[(i * 2) + 1 + pstartcol]->bind_ptr, NULL) * 1000 ? : 1000);
- if (smtkdive->cylinders.cylinders[i].gasmix.o2.permille == 0)
- smtkdive->cylinders.cylinders[i].gasmix.o2.permille = lrint(strtod(col[i + o2fraccol]->bind_ptr, NULL) * 10);
+ if (get_cylinder(smtkdive, i)->end.mbar == 0 && get_cylinder(smtkdive, i)->start.mbar != 0)
+ get_cylinder(smtkdive, i)->end.mbar = lrint(strtod(col[(i * 2) + 1 + pstartcol]->bind_ptr, NULL) * 1000 ? : 1000);
+ if (get_cylinder(smtkdive, i)->gasmix.o2.permille == 0)
+ get_cylinder(smtkdive, i)->gasmix.o2.permille = lrint(strtod(col[i + o2fraccol]->bind_ptr, NULL) * 10);
if (smtk_version == 10213) {
- if (smtkdive->cylinders.cylinders[i].gasmix.he.permille == 0)
- smtkdive->cylinders.cylinders[i].gasmix.he.permille = lrint(strtod(col[i + hefraccol]->bind_ptr, NULL) * 10);
+ if (get_cylinder(smtkdive, i)->gasmix.he.permille == 0)
+ get_cylinder(smtkdive, i)->gasmix.he.permille = lrint(strtod(col[i + hefraccol]->bind_ptr, NULL) * 10);
} else {
- smtkdive->cylinders.cylinders[i].gasmix.he.permille = 0;
+ get_cylinder(smtkdive, i)->gasmix.he.permille = 0;
}
- smtk_build_tank_info(mdb_clon, &smtkdive->cylinders.cylinders[i], col[i + tankidxcol]->bind_ptr);
+ smtk_build_tank_info(mdb_clon, get_cylinder(smtkdive, i), col[i + tankidxcol]->bind_ptr);
}
/* Check for duplicated cylinders and clean them */
smtk_clean_cylinders(smtkdive);