]> git.tdb.fi Git - ext/subsurface.git/commitdiff
More consistency improvements
authorDirk Hohndel <dirk@hohndel.org>
Wed, 2 Nov 2011 02:56:14 +0000 (19:56 -0700)
committerDirk Hohndel <dirk@hohndel.org>
Wed, 2 Nov 2011 02:58:19 +0000 (19:58 -0700)
Treat SAC and OTU consistently:
- SAC is now a member of struct dive
- it's calculated / populated at the same time with a helper function with
  consistent API

Create get_volume_units function that returns volumes (e.g. used in SAC
rates) based on preferred units - make sure we have these conversions just
once in the code.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
dive.c
dive.h
divelist.c

diff --git a/dive.c b/dive.c
index c913e9476798e518861d2cdf7c47185caba0dfb6..53a874b9b0950356500fa0835a8b4c9e3b4b9deb 100644 (file)
--- a/dive.c
+++ b/dive.c
@@ -46,6 +46,31 @@ double get_temp_units(unsigned int mk, const char **units)
        return deg;
 }
 
+double get_volume_units(unsigned int ml, int *frac, const char **units)
+{
+       int decimals;
+       double vol;
+       const char *unit;
+
+       switch (output_units.volume) {
+       case LITER:
+               vol = ml / 1000.0;
+               unit = "l";
+               decimals = 1;
+               break;
+       case CUFT:
+               vol = ml_to_cuft(ml);
+               unit = "cuft";
+               decimals = 2;
+               break;
+       }
+       if (frac)
+               *frac = decimals;
+       if (units)
+               *units = unit;
+       return vol;
+}
+
 double get_depth_units(unsigned int mm, int *frac, const char **units)
 {
        int decimals;
diff --git a/dive.h b/dive.h
index 97654dc5279fbf1ee9d044c9dddba9dae845b789..5eec6f170da66bbbcbdcd6dbe140d26309976af7 100644 (file)
--- a/dive.h
+++ b/dive.h
@@ -87,8 +87,14 @@ typedef struct {
 } cylinder_t;
 
 extern double get_depth_units(unsigned int mm, int *frac, const char **units);
+extern double get_volume_units(unsigned int mm, int *frac, const char **units);
 extern double get_temp_units(unsigned int mm, const char **units);
 
+static inline double ml_to_cuft(int ml)
+{
+       return ml / 28317.0;
+}
+
 static inline double mm_to_feet(int mm)
 {
        return mm * 0.00328084;
@@ -177,7 +183,7 @@ struct dive {
        depth_t visibility;
        temperature_t airtemp, watertemp;
        cylinder_t cylinder[MAX_CYLINDERS];
-       int otu;
+       int sac, otu;
        struct event *events;
        int samples, alloc_samples;
        struct sample sample[];
index 3ddfb6582dea8aedb2a44ef6e257f7452e42f0e7..ca984b4eb169ed90b520ce0541ae3670c3765daf 100644 (file)
@@ -315,23 +315,22 @@ static double calculate_airuse(struct dive *dive)
        return airuse;
 }
 
-static void get_sac(struct dive *dive, int *val)
+static int calculate_sac(struct dive *dive)
 {
        double airuse, pressure, sac;
 
-       *val = 0;
        airuse = calculate_airuse(dive);
        if (!airuse)
-               return;
+               return 0;
        if (!dive->duration.seconds)
-               return;
+               return 0;
 
        /* Mean pressure in atm: 1 atm per 10m */
        pressure = 1 + (dive->meandepth.mm / 10000.0);
        sac = airuse / pressure * 60 / dive->duration.seconds;
 
        /* milliliters per minute.. */
-       *val = sac * 1000;
+       return sac * 1000;
 }
 
 static void get_string(char **str, const char *s)
@@ -364,12 +363,10 @@ static void fill_one_dive(struct dive *dive,
                          GtkTreeModel *model,
                          GtkTreeIter *iter)
 {
-       int sac;
        char *location, *cylinder;
 
        get_cylinder(dive, &cylinder);
        get_location(dive, &location);
-       get_sac(dive, &sac);
 
        /*
         * We only set the fields that changed: the strings.
@@ -379,7 +376,7 @@ static void fill_one_dive(struct dive *dive,
                DIVE_NR, dive->number,
                DIVE_LOCATION, location,
                DIVE_CYLINDER, cylinder,
-               DIVE_SAC, sac,
+               DIVE_SAC, dive->sac,
                DIVE_OTU, dive->otu,
                -1);
 }
@@ -471,6 +468,7 @@ static void fill_dive_list(void)
                struct dive *dive = dive_table.dives[i];
 
                dive->otu = calculate_otu(dive);
+               dive->sac = calculate_sac(dive);
                gtk_list_store_append(store, &iter);
                gtk_list_store_set(store, &iter,
                        DIVE_INDEX, i,