[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