[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