+/*
+ * So when we re-calculate maxdepth and meandepth, we will
+ * not override the old numbers if they are close to the
+ * new ones.
+ *
+ * Why? Because a dive computer may well actually track the
+ * max depth and mean depth at finer granularity than the
+ * samples it stores. So it's possible that the max and mean
+ * have been reported more correctly originally.
+ *
+ * Only if the values calculated from the samples are clearly
+ * different do we override the normal depth values.
+ *
+ * This considers 1m to be "clearly different". That's
+ * a totally random number.
+ */
+static void update_depth(depth_t *depth, int new)
+{
+ if (new) {
+ int old = depth->mm;
+
+ if (abs(old - new) > 1000)
+ depth->mm = new;
+ }
+}
+
+static void update_duration(duration_t *duration, int new)
+{
+ if (new)
+ duration->seconds = new;
+}
+
+static void update_temperature(temperature_t *temperature, int new)
+{
+ if (new) {
+ int old = temperature->mkelvin;
+
+ if (abs(old - new) > 1000)
+ temperature->mkelvin = new;
+ }
+}
+
+static void fixup_pressure(struct dive *dive, struct sample *sample)
+{
+ unsigned int pressure, index;
+ cylinder_t *cyl;
+
+ pressure = sample->cylinderpressure.mbar;
+ if (!pressure)
+ return;
+ index = sample->cylinderindex;
+ if (index >= MAX_CYLINDERS)
+ return;
+ cyl = dive->cylinder + index;
+ if (!cyl->start.mbar)
+ cyl->start.mbar = pressure;
+ if (!cyl->end.mbar || pressure < cyl->end.mbar)
+ cyl->end.mbar = pressure;
+}
+