subsurface/subsurface-core
Linus Torvalds f92e2e752f Split up fixup_dive_dc() into multiple smaller independent functions
fixup_dive_dc() is called for each dive computer when we add a new dive.
It does various housekeeping functions, cleaning up the sample data, and
fixing up dive details as a result of the sample data.

The function has grown to be a monster over time, and particularly the
central "walk every sample" loop has become an unreadable mess.

And the thing is, this isn't even all that performance-critical: it's
only done once per dive and dc, and there is no reason to have a single
illegible and complex loop.

So split up that loop into several smaller pieces that each will loop
individually over the sample data, and do just one thing.  So now we
have separate functions for

 - fixing up the depth samples with interpolation
 - fixing up dive temperature data
 - correcting the cylinder pressure sensor index
 - cleaning up the actual sample pressures

Yes, this way we walk the samples multiple times, but the end result is
that the code is much easier to understand.  There should be no actual
behavioral differences from this cleanup, except for the fact that since
the code is much more understandable, this cleanup also fixed a bug:

In the temperature fixup, we would fix up the overall dive temperatures
based on the dive computer temperatures.  But we would then fix up the
overall dive computer temperature based on the sample temperature
*afterwards*, which wouldn't then be reflected in the overall dive
temperatures.

There was another non-symptomatic bug that became obvious when doing
this cleanup: the code used to calculate a 'depthtime' over the dive
that was never actually used.  That's a historical artifact of old code
that had become dead when the average depth calculations were moved to a
function of their own earlier.

This is preparatory for fixing the overall cylinder pressure stats,
which are currently wrong for dives with multiple dive computers: we
currently take the starting cylinder pressure from the *first* dive
computer that has cylinder pressure information, but we take the ending
cylinder pressure from the *last* dive computer with cylinder pressure
information.

This does not fix that bug, but without this cleanup fixing that would
be a nightmare due to the previous complicated "do everything in one
single loop" model.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-01 20:17:40 -05:00
..
subsurface-qt Silence warnings in SettingsObjectWrapper.cpp 2016-03-07 16:45:16 -08:00
android.cpp Android: go back to using Qt's DataLocation 2015-11-07 10:52:19 -08:00
checkcloudconnection.cpp Switch to compile time connect syntax 2015-12-01 15:34:00 -08:00
checkcloudconnection.h
cloudstorage.cpp Silence warning about unused parameter 2016-03-07 11:00:27 -08:00
cloudstorage.h Fix usage of QString 2016-01-26 09:51:14 -08:00
CMakeLists.txt gas model: split up gas compressibility into a file of its own 2016-03-02 18:08:18 -08:00
cochran.c Silence warnings in cochran.c 2016-03-09 21:46:29 -08:00
cochran.h
color.cpp
color.h
compressibility.r gas model: add proper He compressibility data and do a least-squares fit 2016-03-13 12:43:30 -07:00
configuredivecomputer.cpp
configuredivecomputer.h
configuredivecomputerthreads.cpp Create a constructor with default parameters for some structs 2016-03-07 11:13:11 -08:00
configuredivecomputerthreads.h Remove unused headers 2016-01-22 06:50:06 -08:00
datatrak.c Silence warnings in datatrack.c 2016-03-09 11:44:20 -08:00
datatrak.h
deco.c Don't try to force depth to be unsigned 2016-03-23 09:53:44 -07:00
deco.h Don't try to force depth to be unsigned 2016-03-23 09:53:44 -07:00
device.c Add option to allocate the samples in fake_dc() 2016-02-20 09:36:14 -08:00
device.h Add option to allocate the samples in fake_dc() 2016-02-20 09:36:14 -08:00
devicedetails.cpp Create a constructor with default parameters for some structs 2016-03-07 11:13:11 -08:00
devicedetails.h Create a constructor with default parameters for some structs 2016-03-07 11:13:11 -08:00
display.h
dive.c Split up fixup_dive_dc() into multiple smaller independent functions 2016-04-01 20:17:40 -05:00
dive.h Prevent unintentionally running as root 2016-03-26 20:08:08 -07:00
divecomputer.cpp
divecomputer.h
divelist.c Be smarter about dive renumbering when merging dives 2016-03-30 20:16:19 -05:00
divelist.h
divelogexportlogic.cpp
divelogexportlogic.h
divesite.c
divesite.cpp
divesite.h
divesitehelpers.cpp
divesitehelpers.h
equipment.c Silence warnings in equipment.c 2016-03-09 11:44:24 -08:00
exif.cpp
exif.h
file.c If the cache was valid, we don't want to reload just because of changes 2016-03-29 20:46:12 -05:00
file.h Fix annoyances on file.c 2016-03-07 11:24:10 -08:00
gas-model.c gas model: update to new coefficients, and simplify expressions 2016-03-13 12:43:35 -07:00
gaspressures.c Silence warnings in gaspressures.c 2016-03-09 11:44:28 -08:00
gaspressures.h Revert "Clean up signedness confusion in gaspressures.h" 2016-03-10 07:40:15 -08:00
gettext.h
gettextfromc.cpp
gettextfromc.h
git-access.c Use more informative error message in application log 2016-03-13 18:22:54 -07:00
git-access.h Cloud storage: check the top commit without loading dives 2015-12-27 10:06:33 -08:00
gpslocation.cpp QML UI: add the position source reported to the log 2016-03-24 17:48:20 -07:00
gpslocation.h Random whitespace cleanup 2016-01-11 06:14:45 -08:00
helpers.h Don't use "get_volume_string()" for cylinder size string 2016-02-25 00:58:09 +01:00
imagedownloader.cpp Fix loading images from URLs 2016-03-16 07:46:28 -07:00
imagedownloader.h Fix loading images from URLs 2016-03-16 07:46:28 -07:00
isocialnetworkintegration.cpp Clean up more unused variables 2016-03-07 11:21:44 -08:00
isocialnetworkintegration.h Remove the PluginSystem 2015-11-09 18:00:56 -08:00
libdivecomputer.c Clean up signedness confusion in libdivecomputer.c 2016-03-09 21:47:07 -08:00
libdivecomputer.h Clean up handling of various include file 2016-03-06 11:03:00 -08:00
linux.c Prevent unintentionally running as root 2016-03-26 20:08:08 -07:00
liquivision.c Silence warnings in liquivision.c 2016-03-07 16:34:17 -08:00
load-git.c Silence warnings in load-git.c 2016-03-09 11:44:38 -08:00
macos.c Prevent unintentionally running as root 2016-03-26 20:08:08 -07:00
membuffer.c Silence warnings in membuffer.c 2016-03-09 11:44:41 -08:00
membuffer.h
metrics.cpp QML UI: take device pixel ratio into account when scaling pixmaps on iOS 2016-03-28 17:05:29 -05:00
metrics.h QML UI: take device pixel ratio into account when scaling pixmaps on iOS 2016-03-28 17:05:29 -05:00
ostctools.c simple spelling changes 2015-11-15 12:10:37 -08:00
parse-xml.c Prevent unintentionally running as root 2016-03-26 20:08:08 -07:00
planner.c Don't try to force depth to be unsigned 2016-03-23 09:53:44 -07:00
planner.h
pluginmanager.cpp Make it possible to connect to facebook again 2015-11-08 09:44:40 -08:00
pluginmanager.h Remove empty implementations 2015-11-09 18:00:56 -08:00
pref.h Language Settings Wrapper 2016-01-24 21:26:45 -08:00
prefs-macros.h
profile.c Another attempt to clean up signed / unsigned in profile.c 2016-03-23 10:04:30 -07:00
profile.h Revert "Clean up signedness confusion in profile.c" 2016-03-10 07:37:18 -08:00
qt-gui.h qt-gui.h shouldn't include QApplication 2016-03-06 11:03:00 -08:00
qt-init.cpp
qthelper.cpp QML UI: brute force password saving 2016-03-29 21:43:37 -05:00
qthelper.h Remove unused variable 2016-03-07 11:17:16 -08:00
qthelperfromc.h Remove the non-canonical Subusrface version 2015-12-20 07:59:50 -08:00
qtserialbluetooth.cpp Silence warnings in qtserialbluetooth.cpp 2016-03-09 21:47:41 -08:00
save-git.c Silence warnings in save-git.c 2016-03-09 11:44:48 -08:00
save-html.c Silence warnings in save-html.c 2016-03-09 11:44:51 -08:00
save-html.h Support for imperial depth on worldmap export 2016-01-10 14:13:58 -08:00
save-xml.c Silence warnings in save-xml.c 2016-03-09 11:44:54 -08:00
serial_ftdi.c ftdi: fix memory leak on error 2015-12-27 21:31:13 -08:00
sha1.c
sha1.h
statistics.c Clean up signedness confusion in statistics.c 2016-03-09 21:47:22 -08:00
statistics.h Clean up signedness confusion in statistics.c 2016-03-09 21:47:22 -08:00
strndup.h
strtod.c
subsurfacestartup.c Prevent unintentionally running as root 2016-03-26 20:08:08 -07:00
subsurfacestartup.h
subsurfacesysinfo.cpp
subsurfacesysinfo.h
taxonomy.c
taxonomy.h
time.c Clean up signedness confusion in time.c 2016-03-09 21:47:28 -08:00
uemis-downloader.c Clean up UEMIS downloader 2016-03-09 21:47:36 -08:00
uemis.c Clean up UEMIS downloader 2016-03-09 21:47:36 -08:00
uemis.h Clean up UEMIS downloader 2016-03-09 21:47:36 -08:00
units.h Clean up signedness confusion in dive.c 2016-03-09 21:46:58 -08:00
version.c Introduce separate version number for Subsurface-mobile 2016-03-05 17:00:14 -08:00
version.h Introduce separate version number for Subsurface-mobile 2016-03-05 17:00:14 -08:00
webservice.h
windows.c Prevent unintentionally running as root 2016-03-26 20:08:08 -07:00
windowtitleupdate.cpp Don't crash if we have no WindowTitleUpdater registered 2015-11-07 09:53:17 -08:00
windowtitleupdate.h
worldmap-options.h
worldmap-save.c Silence warnings in worldmap-save.c 2016-03-09 11:44:57 -08:00
worldmap-save.h