subsurface/statistics.h
Linus Torvalds 3aaf8b1f5a Make gas use statistics be coherent and more complete
The gas use logic in the dive statistics page is confused.

The SAC case had a special case for "unknown", but only for
the first gas. Other gases had the normal empty case.

Also, the logic was really odd - if you had gases that weren't used (or
pressures not known) intermixed with gases you *did* have pressure for,
the statistics got really confused.

The list of gases showed all gases that we know about during the dive,
but then the gas use and SAC-rate lists wouldn't necessarily match,
because the loops that computed those stopped after the first gas that
didn't have any pressure change.

To make things worse, the first cylinder was special-cased again, so it
all lined up for the single-cylinder case.

This makes all the cylinders act the same way, leaving unknown gas use
(and thus SAC) just empty for that gas.

It also fixes the SAC calculation case where we don't have real samples,
and the profile is a fake profile - possibly with gas changes in between
the fake points. We now make the SAC calculations match what we show -
which is admittedly not at all necessarily what the dive was, but at
least we're consistent.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2014-08-06 09:14:34 -07:00

55 lines
1.2 KiB
C

/*
* statistics.h
*
* core logic functions called from statistics UI
* common types and variables
*/
#ifndef STATISTICS_H
#define STATISTICS_H
#ifdef __cplusplus
extern "C" {
#endif
typedef struct
{
int period;
duration_t total_time;
/* avg_time is simply total_time / nr -- let's not keep this */
duration_t shortest_time;
duration_t longest_time;
depth_t max_depth;
depth_t min_depth;
depth_t avg_depth;
volume_t max_sac;
volume_t min_sac;
volume_t avg_sac;
int max_temp;
int min_temp;
double combined_temp;
unsigned int combined_count;
unsigned int selection_size;
unsigned int total_sac_time;
bool is_year;
bool is_trip;
char *location;
} stats_t;
extern stats_t stats_selection;
extern stats_t *stats_yearly;
extern stats_t *stats_monthly;
extern stats_t *stats_by_trip;
extern char *get_time_string(int seconds, int maxdays);
extern char *get_minutes(int seconds);
extern void process_all_dives(struct dive *dive, struct dive **prev_dive);
extern void get_selected_dives_text(char *buffer, int size);
extern void get_gas_used(struct dive *dive, volume_t gases[MAX_CYLINDERS]);
extern void process_selected_dives(void);
void selected_dives_gas_parts(volume_t *o2_tot, volume_t *he_tot);
#ifdef __cplusplus
}
#endif
#endif // STATISTICS_H