[PATCH] Rewrite is_gas_used to use get_cylinder_index

Anton Lundin glance at acc.umu.se
Thu Nov 28 16:42:57 UTC 2013


On 28 November, 2013 - Dirk Hohndel wrote:

> 
> That will require a little more "staring at it" to convince myself that
> this is really equivalent...
> 
> Maybe you could expand on the commit message a bit?
> 

The sac-rate-graphs in the profile would do the right thing if i had a
dive with eg 21/35 and a 50, and with a gaschange event to the 50, but
in the cylinders panel i would have entered the analyzed value of 52%.
Previously the gaslist/gasvolume/sac-rate in the dive-stats panel
wouldn't have shown the 52% as used, but how it does.

This makes the dive-stats panel consistent with the logic in the
dive-profile.

//Anton

> 
> On Fri, 2013-11-29 at 00:40 +0100, Anton Lundin wrote:
> > get_cylinder_index implements a algorithm to map gaschange events to gas
> > idx. This is a bit clumsy to use it to map if a gas idx have bin used,
> > but its consistent with other parts.
> > 
> > Signed-off-by: Anton Lundin <glance at acc.umu.se>
> > ---
> >  statistics.c | 44 ++++++++++----------------------------------
> >  1 file changed, 10 insertions(+), 34 deletions(-)
> > 
> > diff --git a/statistics.c b/statistics.c
> > index c4beba3..807539f 100644
> > --- a/statistics.c
> > +++ b/statistics.c
> > @@ -295,49 +295,25 @@ void get_selected_dives_text(char *buffer, int size)
> >  
> >  bool is_gas_used(struct dive *dive, int idx)
> >  {
> > -	cylinder_t *cyl = &dive->cylinder[idx];
> > -	int o2, he;
> > -	struct divecomputer *dc;
> > -	bool used = FALSE;
> > +	struct divecomputer *dc = &dive->dc;
> >  	bool firstGasExplicit = FALSE;
> > -	if (cylinder_none(cyl))
> > +	if (cylinder_none(&dive->cylinder[idx]))
> >  		return FALSE;
> >  
> > -	o2 = get_o2(&cyl->gasmix);
> > -	he = get_he(&cyl->gasmix);
> > -	dc = &dive->dc;
> >  	while (dc) {
> > -		struct event *event = dc->events;
> > +		struct event *event = get_next_event(dc->events, "gaschange");
> >  		while (event) {
> > -			if (event->value) {
> > -				if (event->name && !strcmp(event->name, "gaschange")) {
> > -					unsigned int event_he = event->value >> 16;
> > -					unsigned int event_o2 = event->value & 0xffff;
> > -					if (event->time.seconds < 30)
> > -						firstGasExplicit = TRUE;
> > -					if (is_air(o2, he)) {
> > -						if (is_air(event_o2 * 10, event_he * 10))
> > -							used = TRUE;
> > -					} else if (event->type == 25 && he == event_he * 10 && o2 == event_o2 * 10) {
> > -						/* SAMPLE_EVENT_GASCHANGE2(25) contains both o2 and he */
> > -						used = TRUE;
> > -					} else if (o2 == event_o2 * 10) {
> > -						/* SAMPLE_EVENT_GASCHANGE(11) only contains o2 */
> > -						used = TRUE;
> > -					}
> > -				}
> > -			}
> > -			if (used)
> > -				break;
> > -			event = event->next;
> > +			if (event->time.seconds < 30)
> > +				firstGasExplicit = TRUE;
> > +			if (get_cylinder_index(dive, event) == idx)
> > +				return TRUE;
> > +			event = get_next_event(event->next, "gaschange");
> >  		}
> > -		if (used)
> > -			break;
> >  		dc = dc->next;
> >  	}
> >  	if (idx == 0 && !firstGasExplicit)
> > -		used = TRUE;
> > -	return used;
> > +		return TRUE;
> > +	return FALSE;
> >  }
> >  
> >  void get_gas_used(struct dive *dive, volume_t gases[MAX_CYLINDERS])
> 

-- 
Anton Lundin	+46702-161604


More information about the subsurface mailing list