Cleanup: unify get_gas_at_time() and get_gasmix()

There were two functions for getting gas-mixes at a certain timestamp:
- get_gasmix() for repeated queries.
- get_gas_at_time() for a single query.
Since the latter is a special case of the former, simply call
the former in the latter. Moreover, rename to get_gasmix_at_time()
for consistency.

Replace on get_gasmix() call, which was outside of a loop by the
corresponding get_gasmix_at_time() call.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
Berthold Stoeger 2018-08-16 17:11:51 +02:00 committed by Dirk Hohndel
parent f5b11daffd
commit 5c4569247a
6 changed files with 15 additions and 23 deletions

View file

@ -4308,3 +4308,11 @@ struct gasmix get_gasmix(struct dive *dive, struct divecomputer *dc, int time, s
*evp = ev; *evp = ev;
return res; return res;
} }
/* get the gas at a certain time during the dive */
struct gasmix get_gasmix_at_time(struct dive *d, struct divecomputer *dc, duration_t time)
{
struct event *ev = NULL;
struct gasmix gasmix = { 0 };
return get_gasmix(d, dc, time.seconds, &ev, &gasmix);
}

View file

@ -718,12 +718,15 @@ extern void printdecotable(struct decostop *table);
extern struct event *get_next_event(struct event *event, const char *name); extern struct event *get_next_event(struct event *event, const char *name);
/* Get gasmix at increasing timestamps. /* Get gasmixes at increasing timestamps.
* In "evp", pass a pointer to a "struct event *" which is NULL-initialized on first invocation. * In "evp", pass a pointer to a "struct event *" which is NULL-initialized on first invocation.
* On subsequent calls, pass the same "evp" and the "gasmix" from previous calls. * On subsequent calls, pass the same "evp" and the "gasmix" from previous calls.
*/ */
extern struct gasmix get_gasmix(struct dive *dive, struct divecomputer *dc, int time, struct event **evp, struct gasmix *gasmix); extern struct gasmix get_gasmix(struct dive *dive, struct divecomputer *dc, int time, struct event **evp, struct gasmix *gasmix);
/* Get gasmix at a given time */
extern struct gasmix get_gasmix_at_time(struct dive *dive, struct divecomputer *dc, duration_t time);
/* these structs holds the information that /* these structs holds the information that
* describes the cylinders / weight systems. * describes the cylinders / weight systems.
* they are global variables initialized in equipment.c * they are global variables initialized in equipment.c

View file

@ -134,8 +134,7 @@ int total_weight(struct dive *dive)
static int active_o2(struct dive *dive, struct divecomputer *dc, duration_t time) static int active_o2(struct dive *dive, struct divecomputer *dc, duration_t time)
{ {
struct gasmix gas; struct gasmix gas = get_gasmix_at_time(dive, dc, time);
get_gas_at_time(dive, dc, time, &gas);
return get_o2(&gas); return get_o2(&gas);
} }

View file

@ -81,22 +81,6 @@ bool diveplan_empty(struct diveplan *diveplan)
return true; return true;
} }
/* get the gas at a certain time during the dive */
void get_gas_at_time(struct dive *dive, struct divecomputer *dc, duration_t time, struct gasmix *gas)
{
// we always start with the first gas, so that's our gas
// unless an event tells us otherwise
struct event *event = dc->events;
*gas = dive->cylinder[0].gasmix;
while (event && event->time.seconds <= time.seconds) {
if (!strcmp(event->name, "gaschange")) {
int cylinder_idx = get_cylinder_index(dive, event);
*gas = dive->cylinder[cylinder_idx].gasmix;
}
event = event->next;
}
}
/* get the cylinder index at a certain time during the dive */ /* get the cylinder index at a certain time during the dive */
int get_cylinderid_at_time(struct dive *dive, struct divecomputer *dc, duration_t time) int get_cylinderid_at_time(struct dive *dive, struct divecomputer *dc, duration_t time)
{ {
@ -164,7 +148,7 @@ int tissue_at_end(struct deco_state *ds, struct dive *dive, struct deco_state **
setpoint = sample[0].setpoint; setpoint = sample[0].setpoint;
t1 = sample->time; t1 = sample->time;
get_gas_at_time(dive, dc, t0, &gas); gas = get_gasmix_at_time(dive, dc, t0);
if (i > 0) if (i > 0)
lastdepth = psample->depth; lastdepth = psample->depth;

View file

@ -17,7 +17,6 @@ extern void set_verbatim(bool verbatim);
extern void set_display_runtime(bool display); extern void set_display_runtime(bool display);
extern void set_display_duration(bool display); extern void set_display_duration(bool display);
extern void set_display_transitions(bool display); extern void set_display_transitions(bool display);
extern void get_gas_at_time(struct dive *dive, struct divecomputer *dc, duration_t time, struct gasmix *gas);
extern int get_cylinderid_at_time(struct dive *dive, struct divecomputer *dc, duration_t time); extern int get_cylinderid_at_time(struct dive *dive, struct divecomputer *dc, duration_t time);
extern int get_gasidx(struct dive *dive, struct gasmix *mix); extern int get_gasidx(struct dive *dive, struct gasmix *mix);
extern bool diveplan_empty(struct diveplan *diveplan); extern bool diveplan_empty(struct diveplan *diveplan);

View file

@ -758,8 +758,7 @@ void ProfileWidget2::plotDive(struct dive *d, bool force, bool doClearPictures)
qDeleteAll(eventItems); qDeleteAll(eventItems);
eventItems.clear(); eventItems.clear();
struct event *event = currentdc->events; struct event *event = currentdc->events;
struct event *ev; struct gasmix lastgasmix = get_gasmix_at_time(&displayed_dive, current_dc, duration_t{1});
struct gasmix lastgasmix = get_gasmix(&displayed_dive, current_dc, 1, &ev, NULL);
while (event) { while (event) {
#ifndef SUBSURFACE_MOBILE #ifndef SUBSURFACE_MOBILE