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

Henrik Brautaset Aronsen subsurface at henrik.synth.no
Thu Jan 24 13:47:12 PST 2013


Nice catch.  I didn't look too hard on that piece of code, just good 
'ole copy and paste.

The commit works fine.

Henrik

Dirk Hohndel wrote:
> 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