Split the cylinder pressure analysis into a second loop

For the dive computers that give cylinder change events, we want to
re-write the cylinder index and pressure information with the event
information before we start analyzing the pressures.  So instead of
filling the plot info and analyzing in one loop, split it up into two
phases.  We'll do the "fix up cylinder pressure info based on events" in
between those phases.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Linus Torvalds 2011-10-23 17:18:30 +03:00
parent 41a1cf4b19
commit 2b2b6775de

View file

@ -887,9 +887,6 @@ static struct plot_info *create_plot_info(struct dive *dive)
sec = 0;
lastindex = 0;
lastdepth = -1;
for (cyl = 0; cyl < MAX_CYLINDERS; cyl++) /* initialize the start pressures */
track_pr[cyl] = pr_track_alloc(dive->cylinder[cyl].start.mbar, -1);
current = track_pr[dive->sample[0].cylinderindex];
for (i = 0; i < dive->samples; i++) {
int depth;
struct sample *sample = dive->sample+i;
@ -897,9 +894,27 @@ static struct plot_info *create_plot_info(struct dive *dive)
entry = pi->entry + i + 2;
sec = entry->sec = sample->time.seconds;
depth = entry->depth = sample->depth.mm;
entry->same_cylinder = sample->cylinderindex == cylinderindex;
entry->cylinderindex = cylinderindex = sample->cylinderindex;
entry->cylinderindex = sample->cylinderindex;
SENSOR_PRESSURE(entry) = sample->cylinderpressure.mbar;
entry->temperature = sample->temperature.mkelvin;
if (depth || lastdepth)
lastindex = i+2;
lastdepth = depth;
if (depth > pi->maxdepth)
pi->maxdepth = depth;
}
for (cyl = 0; cyl < MAX_CYLINDERS; cyl++) /* initialize the start pressures */
track_pr[cyl] = pr_track_alloc(dive->cylinder[cyl].start.mbar, -1);
current = track_pr[dive->sample[0].cylinderindex];
for (i = 0; i < dive->samples; i++) {
entry = pi->entry + i + 2;
entry->same_cylinder = entry->cylinderindex == cylinderindex;
cylinderindex = entry->cylinderindex;
/* track the segments per cylinder and their pressure/time integral */
if (!entry->same_cylinder) {
current->end = SENSOR_PRESSURE(entry-1);
@ -921,15 +936,8 @@ static struct plot_info *create_plot_info(struct dive *dive)
current->pressure_time += (entry->sec - (entry-1)->sec) *
(1 + entry->depth / 10000.0);
missing_pr |= !SENSOR_PRESSURE(entry);
entry->temperature = sample->temperature.mkelvin;
if (depth || lastdepth)
lastindex = i+2;
lastdepth = depth;
if (depth > pi->maxdepth)
pi->maxdepth = depth;
}
current->t_end = entry->sec;
for (cyl = 0; cyl < MAX_CYLINDERS; cyl++) { /* initialize the end pressures */
int pr = dive->cylinder[cyl].end.mbar;