]> git.tdb.fi Git - ext/subsurface.git/commitdiff
Don't save cylinder start/end pressures unless set by hand
authorLinus Torvalds <torvalds@linux-foundation.org>
Wed, 9 Nov 2011 15:37:25 +0000 (07:37 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 9 Nov 2011 16:13:17 +0000 (08:13 -0800)
Keep the sample pressure start/end data separate from the overall
cylinder start/end data - and clean the overall cylinder start/end data
if it matches the samples exactly to avoid the redundancy.

This breaks all the SAC calculations etc, which expect the cylinder
pressures to always be in the cylinder data.  I'll fix that up
separately.

The reason for this is that we really want to keep the manually entered
data separate: the pressure plotting doesn't need the confusion, and
considers end-point data (with interpolation) very different from sample
data.  Also, we do not want to pollute the xml save-file with data that
is computed.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
dive.c
dive.h

diff --git a/dive.c b/dive.c
index cb94e7925ce01695659ac1c5de33da192e77ef30..bd1b92619198851b6bdc3f70b162c75f3af7cc48 100644 (file)
--- a/dive.c
+++ b/dive.c
@@ -207,46 +207,21 @@ static void update_temperature(temperature_t *temperature, int new)
        }
 }
 
-/*
- * If you have more than 32 cylinders, you'd better have a 64-bit build.
- * And if you have more than 64 cylinders, you need to use another tool,
- * or fix this up to do something odd.
- */
-static unsigned long fixup_pressure(struct dive *dive, struct sample *sample, unsigned long flags)
+static void fixup_pressure(struct dive *dive, struct sample *sample)
 {
-       unsigned long mask;
        unsigned int pressure, index;
        cylinder_t *cyl;
 
        pressure = sample->cylinderpressure.mbar;
        if (!pressure)
-               return flags;
+               return;
        index = sample->cylinderindex;
        if (index >= MAX_CYLINDERS)
-               return flags;
+               return;
        cyl = dive->cylinder + index;
-       if (!cyl->start.mbar)
-               cyl->start.mbar = pressure;
-       /*
-        * If we already have an end pressure, without
-        * ever having seen a sample for this cylinder,
-        * that means that somebody set the end pressure
-        * by hand
-        */
-       mask = 1ul << index;
-       if (cyl->end.mbar) {
-               if (!(flags & mask))
-                       return flags;
-       }
-       flags |= mask;
-
-       /* we need to handle the user entering beginning and end tank pressures
-        * - maybe even IF we have samples. But for now if we have air pressure
-        * data in the samples, we use that instead of the minimum
-        * if (!cyl->end.mbar || pressure < cyl->end.mbar)
-        */
-       cyl->end.mbar = pressure;
-       return flags;
+       if (!cyl->sample_start.mbar)
+               cyl->sample_start.mbar = pressure;
+       cyl->sample_end.mbar = pressure;
 }
 
 struct dive *fixup_dive(struct dive *dive)
@@ -258,7 +233,6 @@ struct dive *fixup_dive(struct dive *dive)
        int maxdepth = 0, mintemp = 0;
        int lastdepth = 0;
        int lasttemp = 0;
-       unsigned long flags = 0;
 
        for (i = 0; i < dive->samples; i++) {
                struct sample *sample = dive->sample + i;
@@ -276,7 +250,7 @@ struct dive *fixup_dive(struct dive *dive)
                                maxdepth = depth;
                }
 
-               flags = fixup_pressure(dive, sample, flags);
+               fixup_pressure(dive, sample);
 
                if (temp) {
                        /*
@@ -311,8 +285,12 @@ struct dive *fixup_dive(struct dive *dive)
        add_people(dive->divemaster);
        add_location(dive->location);
        for (i = 0; i < MAX_CYLINDERS; i++) {
-               cylinder_type_t *type = &dive->cylinder[i].type;
-               add_cylinder_description(type);
+               cylinder_t *cyl = dive->cylinder + i;
+               add_cylinder_description(&cyl->type);
+               if (cyl->sample_start.mbar == cyl->start.mbar)
+                       cyl->start.mbar = 0;
+               if (cyl->sample_end.mbar == cyl->end.mbar)
+                       cyl->end.mbar = 0;
        }
 
        return dive;
diff --git a/dive.h b/dive.h
index 36a406c255c690da80da3af767c9cfd035e5d08b..0116a1cf78a3d07ac4da2ccbe725de15f7e35d9e 100644 (file)
--- a/dive.h
+++ b/dive.h
@@ -84,7 +84,7 @@ typedef struct {
 typedef struct {
        cylinder_type_t type;
        struct gasmix gasmix;
-       pressure_t start, end;
+       pressure_t start, end, sample_start, sample_end;
 } cylinder_t;
 
 extern int get_pressure_units(unsigned int mb, const char **units);