diff options
author | Tim Segers <tsegers@pm.me> | 2022-10-03 11:17:11 +0200 |
---|---|---|
committer | Tim Segers <tsegers@pm.me> | 2022-10-03 11:17:11 +0200 |
commit | e2ff193809aeb9cbc4cda896a48ecbefa4adb00c (patch) | |
tree | af384704f7bcf1d025183b58e04c14877f1d1f43 /schedule.c | |
parent | 723d76f2912faeac891156ee061eb57fc2700f51 (diff) | |
download | opendeco-e2ff193809aeb9cbc4cda896a48ecbefa4adb00c.tar.gz |
Allow NULL instead of empty waypoint callback function
Diffstat (limited to 'schedule.c')
-rw-r--r-- | schedule.c | 23 |
1 files changed, 15 insertions, 8 deletions
@@ -68,7 +68,8 @@ void simulate_dive(decostate_t *ds, waypoint_t *waypoints, const int nof_waypoin runtime += add_segment_const(ds, d, t, g); } - wp_cb(ds, (waypoint_t){.depth = d, .time = t, .gas = g}, SEG_DIVE); + if (wp_cb) + wp_cb(ds, (waypoint_t){.depth = d, .time = t, .gas = g}, SEG_DIVE); } } @@ -168,14 +169,19 @@ decoinfo_t calc_deco(decostate_t *ds, const double start_depth, const gas_t *sta * callback should be called. */ waypoint_time = fabs(last_waypoint_depth - depth) / asc_per_min; - wp_cb(ds, (waypoint_t){.depth = depth, .time = waypoint_time, .gas = gas}, SEG_TRAVEL); + + if (wp_cb) + wp_cb(ds, (waypoint_t){.depth = depth, .time = waypoint_time, .gas = gas}, SEG_TRAVEL); + last_waypoint_depth = depth; /* switch gas */ gas = next; ret.tts += add_segment_const(ds, switch_depth, 1, gas); - wp_cb(ds, (waypoint_t){.depth = depth, .time = 1, .gas = gas}, SEG_GAS_SWITCH); + + if (wp_cb) + wp_cb(ds, (waypoint_t){.depth = depth, .time = 1, .gas = gas}, SEG_GAS_SWITCH); continue; } @@ -195,11 +201,10 @@ decoinfo_t calc_deco(decostate_t *ds, const double start_depth, const gas_t *sta * callback should be called. */ waypoint_time = fabs(last_waypoint_depth - depth) / asc_per_min; + enum segtype_t segtype = depth <= SURFACE_PRESSURE ? SEG_SURFACE : SEG_TRAVEL; - if (depth <= SURFACE_PRESSURE) - wp_cb(ds, (waypoint_t){.depth = depth, .time = waypoint_time, .gas = gas}, SEG_SURFACE); - else - wp_cb(ds, (waypoint_t){.depth = depth, .time = waypoint_time, .gas = gas}, SEG_TRAVEL); + if (wp_cb) + wp_cb(ds, (waypoint_t){.depth = depth, .time = waypoint_time, .gas = gas}, segtype); break; } @@ -221,7 +226,9 @@ decoinfo_t calc_deco(decostate_t *ds, const double start_depth, const gas_t *sta stoplen += add_segment_const(ds, depth, 1, gas); ret.tts += stoplen; - wp_cb(ds, (waypoint_t){.depth = depth, .time = stoplen, .gas = gas}, SEG_DECO_STOP); + + if (wp_cb) + wp_cb(ds, (waypoint_t){.depth = depth, .time = stoplen, .gas = gas}, SEG_DECO_STOP); } return ret; |