]> git.tdb.fi Git - ext/subsurface.git/commitdiff
Split the cylinder pressure analysis into a second loop
authorLinus Torvalds <torvalds@linux-foundation.org>
Sun, 23 Oct 2011 14:18:30 +0000 (17:18 +0300)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sun, 23 Oct 2011 15:01:16 +0000 (18:01 +0300)
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>
profile.c

index 7832dccafd36242c7835f45ae1ac9e115a3d13e4..bdce4261d000322e1a3713f561ce9c22049aad55 100644 (file)
--- a/profile.c
+++ b/profile.c
@@ -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;