[PATCH] Use actual min and max temperatures in statistics.

Dirk Hohndel dirk at hohndel.org
Thu Jan 24 13:13:14 PST 2013


The code snippet below does really unfortunate things with the variable
"unit". But since we never actually use what get_temp_units() returns to
us and since get_temp_units() happily takes NULL as argument if you
don't use the return value...

Please check the fix that I just pushed (that and all the other stuff in
my queue)

/D

subsurface at henrik.synth.no writes:
> diff --git a/statistics.c b/statistics.c
> index 1050b39..0cdbf71 100644
> --- a/statistics.c
> +++ b/statistics.c
> @@ -107,6 +107,37 @@ enum {
>  
>  static char * get_time_string(int seconds, int maxdays);
>  
> +static void process_temperatures(struct dive *dp, stats_t *stats, const char *unit)
> +{
> +	int min_temp, mean_temp, max_temp = 0;
> +
> +	if (dp->maxtemp.mkelvin)
> +		max_temp = dp->maxtemp.mkelvin;
> +	else
> +		max_temp = dp->dc.watertemp.mkelvin;
> +
> +	if (max_temp && (!stats->max_temp || max_temp > stats->max_temp))
> +		stats->max_temp = max_temp;
> +
> +	if (dp->mintemp.mkelvin)
> +		min_temp = dp->mintemp.mkelvin;
> +	else
> +		min_temp = dp->dc.watertemp.mkelvin;
> +
> +	if (min_temp && (!stats->min_temp || min_temp < stats->min_temp))
> +		stats->min_temp = min_temp;
> +
> +	if (min_temp || max_temp) {
> +		mean_temp = min_temp;
> +		if (mean_temp)
> +			mean_temp = (mean_temp + max_temp) / 2;
> +		else
> +			mean_temp = max_temp;
> +		stats->combined_temp += get_temp_units(mean_temp, &unit);
> +		stats->combined_count++;
> +	}
> +}
> +
>  static void process_dive(struct dive *dp, stats_t *stats)
>  {
>  	int old_tt, sac_time = 0;
> @@ -122,14 +153,8 @@ static void process_dive(struct dive *dp, stats_t *stats)
>  		stats->max_depth.mm = dp->dc.maxdepth.mm;
>  	if (stats->min_depth.mm == 0 || dp->dc.maxdepth.mm < stats->min_depth.mm)
>  		stats->min_depth.mm = dp->dc.maxdepth.mm;
> -	if (dp->dc.watertemp.mkelvin) {
> -		if (stats->min_temp == 0 || dp->dc.watertemp.mkelvin < stats->min_temp)
> -			stats->min_temp = dp->dc.watertemp.mkelvin;
> -		if (dp->dc.watertemp.mkelvin > stats->max_temp)
> -			stats->max_temp = dp->dc.watertemp.mkelvin;
> -		stats->combined_temp += get_temp_units(dp->dc.watertemp.mkelvin, &unit);
> -		stats->combined_count++;
> -	}
> +
> +	process_temperatures(dp, stats, unit);
>  
>  	/* Maybe we should drop zero-duration dives */
>  	if (!dp->dc.duration.seconds)
> -- 
> 1.8.1.1


More information about the subsurface mailing list