mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
planner: C++-ify a bit more
Use constructor and member functions. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
74c8bd34a0
commit
0745c50e58
4 changed files with 79 additions and 82 deletions
|
@ -74,11 +74,9 @@ diveplan::~diveplan()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
bool diveplan_empty(const struct diveplan &diveplan)
|
bool diveplan::is_empty() const
|
||||||
{
|
{
|
||||||
return std::none_of(diveplan.dp.begin(), diveplan.dp.end(),
|
return std::none_of(dp.begin(), dp.end(), [](const divedatapoint &dp) { return dp.time != 0; });
|
||||||
[](const divedatapoint &dp)
|
|
||||||
{ return dp.time != 0; });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* get the cylinder index at a certain time during the dive */
|
/* get the cylinder index at a certain time during the dive */
|
||||||
|
@ -303,17 +301,15 @@ static void create_dive_from_plan(struct diveplan &diveplan, struct dive *dive,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct divedatapoint create_dp(int time_incr, int depth, int cylinderid, int po2)
|
divedatapoint::divedatapoint(int time_incr, int depth, int cylinderid, int po2, bool entered) :
|
||||||
|
time(time_incr),
|
||||||
|
depth{ .mm = depth },
|
||||||
|
cylinderid(cylinderid),
|
||||||
|
minimum_gas{ .mbar = 0 },
|
||||||
|
setpoint(po2),
|
||||||
|
entered(entered),
|
||||||
|
divemode(OC)
|
||||||
{
|
{
|
||||||
struct divedatapoint dp;
|
|
||||||
|
|
||||||
dp.time = time_incr;
|
|
||||||
dp.depth.mm = depth;
|
|
||||||
dp.cylinderid = cylinderid;
|
|
||||||
dp.minimum_gas.mbar = 0;
|
|
||||||
dp.setpoint = po2;
|
|
||||||
dp.entered = false;
|
|
||||||
return dp;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void add_to_end_of_diveplan(struct diveplan &diveplan, const struct divedatapoint &dp)
|
static void add_to_end_of_diveplan(struct diveplan &diveplan, const struct divedatapoint &dp)
|
||||||
|
@ -328,8 +324,7 @@ static void add_to_end_of_diveplan(struct diveplan &diveplan, const struct dived
|
||||||
|
|
||||||
void plan_add_segment(struct diveplan &diveplan, int duration, int depth, int cylinderid, int po2, bool entered, enum divemode_t divemode)
|
void plan_add_segment(struct diveplan &diveplan, int duration, int depth, int cylinderid, int po2, bool entered, enum divemode_t divemode)
|
||||||
{
|
{
|
||||||
struct divedatapoint dp = create_dp(duration, depth, cylinderid, divemode == CCR ? po2 : 0);
|
struct divedatapoint dp(duration, depth, cylinderid, divemode == CCR ? po2 : 0, entered);
|
||||||
dp.entered = entered;
|
|
||||||
dp.divemode = divemode;
|
dp.divemode = divemode;
|
||||||
add_to_end_of_diveplan(diveplan, dp);
|
add_to_end_of_diveplan(diveplan, dp);
|
||||||
}
|
}
|
||||||
|
@ -786,7 +781,7 @@ bool plan(struct deco_state *ds, struct diveplan &diveplan, struct dive *dive, i
|
||||||
} while (depth > 0);
|
} while (depth > 0);
|
||||||
plan_add_segment(diveplan, clock - previous_point_time, 0, current_cylinder, po2, false, divemode);
|
plan_add_segment(diveplan, clock - previous_point_time, 0, current_cylinder, po2, false, divemode);
|
||||||
create_dive_from_plan(diveplan, dive, dc, is_planner);
|
create_dive_from_plan(diveplan, dive, dc, is_planner);
|
||||||
add_plan_to_notes(diveplan, dive, show_disclaimer, error);
|
diveplan.add_plan_to_notes(*dive, show_disclaimer, error);
|
||||||
fixup_dc_duration(*dc);
|
fixup_dc_duration(*dc);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
@ -1068,7 +1063,7 @@ bool plan(struct deco_state *ds, struct diveplan &diveplan, struct dive *dive, i
|
||||||
plan_add_segment(diveplan, prefs.surface_segment, 0, current_cylinder, 0, false, OC);
|
plan_add_segment(diveplan, prefs.surface_segment, 0, current_cylinder, 0, false, OC);
|
||||||
}
|
}
|
||||||
create_dive_from_plan(diveplan, dive, dc, is_planner);
|
create_dive_from_plan(diveplan, dive, dc, is_planner);
|
||||||
add_plan_to_notes(diveplan, dive, show_disclaimer, error);
|
diveplan.add_plan_to_notes(*dive, show_disclaimer, error);
|
||||||
fixup_dc_duration(*dc);
|
fixup_dc_duration(*dc);
|
||||||
|
|
||||||
return decodive;
|
return decodive;
|
||||||
|
|
|
@ -9,15 +9,27 @@
|
||||||
|
|
||||||
/* this should be converted to use our types */
|
/* this should be converted to use our types */
|
||||||
struct divedatapoint {
|
struct divedatapoint {
|
||||||
int time;
|
int time = 0;
|
||||||
depth_t depth;
|
depth_t depth;
|
||||||
int cylinderid;
|
int cylinderid = 0;
|
||||||
pressure_t minimum_gas;
|
pressure_t minimum_gas;
|
||||||
int setpoint;
|
int setpoint = 0;
|
||||||
bool entered;
|
bool entered = false;
|
||||||
enum divemode_t divemode;
|
enum divemode_t divemode = OC;
|
||||||
|
|
||||||
|
divedatapoint() = default;
|
||||||
|
divedatapoint(const divedatapoint &) = default;
|
||||||
|
divedatapoint(divedatapoint &&) = default;
|
||||||
|
divedatapoint &operator=(const divedatapoint &) = default;
|
||||||
|
divedatapoint(int time_incr, int depth, int cylinderid, int po2, bool entered);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
PLAN_OK,
|
||||||
|
PLAN_ERROR_TIMEOUT,
|
||||||
|
PLAN_ERROR_INAPPROPRIATE_GAS,
|
||||||
|
} planner_error_t;
|
||||||
|
|
||||||
struct diveplan {
|
struct diveplan {
|
||||||
diveplan();
|
diveplan();
|
||||||
~diveplan();
|
~diveplan();
|
||||||
|
@ -33,19 +45,15 @@ struct diveplan {
|
||||||
std::vector<divedatapoint> dp;
|
std::vector<divedatapoint> dp;
|
||||||
int eff_gflow = 0, eff_gfhigh = 0;
|
int eff_gflow = 0, eff_gfhigh = 0;
|
||||||
int surface_interval = 0;
|
int surface_interval = 0;
|
||||||
|
|
||||||
|
bool is_empty() const;
|
||||||
|
void add_plan_to_notes(struct dive &dive, bool show_disclaimer, planner_error_t error);
|
||||||
|
int duration() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct deco_state_cache;
|
struct deco_state_cache;
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
PLAN_OK,
|
|
||||||
PLAN_ERROR_TIMEOUT,
|
|
||||||
PLAN_ERROR_INAPPROPRIATE_GAS,
|
|
||||||
} planner_error_t;
|
|
||||||
|
|
||||||
extern int get_cylinderid_at_time(struct dive *dive, struct divecomputer *dc, duration_t time);
|
extern int get_cylinderid_at_time(struct dive *dive, struct divecomputer *dc, duration_t time);
|
||||||
extern bool diveplan_empty(const struct diveplan &diveplan);
|
|
||||||
extern void add_plan_to_notes(struct diveplan &diveplan, struct dive *dive, bool show_disclaimer, planner_error_t error);
|
|
||||||
extern const char *get_planner_disclaimer();
|
extern const char *get_planner_disclaimer();
|
||||||
|
|
||||||
void plan_add_segment(struct diveplan &diveplan, int duration, int depth, int cylinderid, int po2, bool entered, enum divemode_t divemode);
|
void plan_add_segment(struct diveplan &diveplan, int duration, int depth, int cylinderid, int po2, bool entered, enum divemode_t divemode);
|
||||||
|
|
|
@ -25,11 +25,11 @@
|
||||||
#include "subsurface-string.h"
|
#include "subsurface-string.h"
|
||||||
#include "version.h"
|
#include "version.h"
|
||||||
|
|
||||||
static int diveplan_duration(const struct diveplan &diveplan)
|
int diveplan::duration() const
|
||||||
{
|
{
|
||||||
int duration = 0;
|
int duration = 0;
|
||||||
int lastdepth = 0;
|
int lastdepth = 0;
|
||||||
for (auto &dp: diveplan.dp) {
|
for (auto &dp: this->dp) {
|
||||||
if (dp.time > duration && (dp.depth.mm > SURFACE_THRESHOLD || lastdepth > SURFACE_THRESHOLD)) {
|
if (dp.time > duration && (dp.depth.mm > SURFACE_THRESHOLD || lastdepth > SURFACE_THRESHOLD)) {
|
||||||
duration = dp.time;
|
duration = dp.time;
|
||||||
lastdepth = dp.depth.mm;
|
lastdepth = dp.depth.mm;
|
||||||
|
@ -94,7 +94,7 @@ extern std::string get_planner_disclaimer_formatted()
|
||||||
return format_string_std(get_planner_disclaimer(), deco);
|
return format_string_std(get_planner_disclaimer(), deco);
|
||||||
}
|
}
|
||||||
|
|
||||||
void add_plan_to_notes(struct diveplan &diveplan, struct dive *dive, bool show_disclaimer, planner_error_t error)
|
void diveplan::add_plan_to_notes(struct dive &dive, bool show_disclaimer, planner_error_t error)
|
||||||
{
|
{
|
||||||
std::string buf;
|
std::string buf;
|
||||||
std::string icdbuf;
|
std::string icdbuf;
|
||||||
|
@ -115,7 +115,7 @@ void add_plan_to_notes(struct diveplan &diveplan, struct dive *dive, bool show_d
|
||||||
struct divedatapoint *lastbottomdp = nullptr;
|
struct divedatapoint *lastbottomdp = nullptr;
|
||||||
struct icd_data icdvalues;
|
struct icd_data icdvalues;
|
||||||
|
|
||||||
if (diveplan.dp.empty())
|
if (dp.empty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (error != PLAN_OK) {
|
if (error != PLAN_OK) {
|
||||||
|
@ -139,7 +139,7 @@ void add_plan_to_notes(struct diveplan &diveplan, struct dive *dive, bool show_d
|
||||||
buf += format_string_std("<span style='color: red;'>%s </span> %s<br/>",
|
buf += format_string_std("<span style='color: red;'>%s </span> %s<br/>",
|
||||||
translate("gettextFromC", "Warning:"), message);
|
translate("gettextFromC", "Warning:"), message);
|
||||||
|
|
||||||
dive->notes = std::move(buf);
|
dive.notes = std::move(buf);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -151,14 +151,14 @@ void add_plan_to_notes(struct diveplan &diveplan, struct dive *dive, bool show_d
|
||||||
}
|
}
|
||||||
|
|
||||||
buf += "<div>\n<b>";
|
buf += "<div>\n<b>";
|
||||||
if (diveplan.surface_interval < 0) {
|
if (surface_interval < 0) {
|
||||||
buf += format_string_std("%s (%s) %s",
|
buf += format_string_std("%s (%s) %s",
|
||||||
translate("gettextFromC", "Subsurface"),
|
translate("gettextFromC", "Subsurface"),
|
||||||
subsurface_canonical_version(),
|
subsurface_canonical_version(),
|
||||||
translate("gettextFromC", "dive plan</b> (overlapping dives detected)"));
|
translate("gettextFromC", "dive plan</b> (overlapping dives detected)"));
|
||||||
dive->notes = std::move(buf);
|
dive.notes = std::move(buf);
|
||||||
return;
|
return;
|
||||||
} else if (diveplan.surface_interval >= 48 * 60 *60) {
|
} else if (surface_interval >= 48 * 60 *60) {
|
||||||
buf += format_string_std("%s (%s) %s %s",
|
buf += format_string_std("%s (%s) %s %s",
|
||||||
translate("gettextFromC", "Subsurface"),
|
translate("gettextFromC", "Subsurface"),
|
||||||
subsurface_canonical_version(),
|
subsurface_canonical_version(),
|
||||||
|
@ -169,7 +169,7 @@ void add_plan_to_notes(struct diveplan &diveplan, struct dive *dive, bool show_d
|
||||||
translate("gettextFromC", "Subsurface"),
|
translate("gettextFromC", "Subsurface"),
|
||||||
subsurface_canonical_version(),
|
subsurface_canonical_version(),
|
||||||
translate("gettextFromC", "dive plan</b> (surface interval "),
|
translate("gettextFromC", "dive plan</b> (surface interval "),
|
||||||
FRACTION_TUPLE(diveplan.surface_interval / 60, 60),
|
FRACTION_TUPLE(surface_interval / 60, 60),
|
||||||
translate("gettextFromC", "created on"),
|
translate("gettextFromC", "created on"),
|
||||||
get_current_date().c_str());
|
get_current_date().c_str());
|
||||||
}
|
}
|
||||||
|
@ -177,10 +177,10 @@ void add_plan_to_notes(struct diveplan &diveplan, struct dive *dive, bool show_d
|
||||||
|
|
||||||
if (prefs.display_variations && decoMode(true) != RECREATIONAL)
|
if (prefs.display_variations && decoMode(true) != RECREATIONAL)
|
||||||
buf += casprintf_loc(translate("gettextFromC", "Runtime: %dmin%s"),
|
buf += casprintf_loc(translate("gettextFromC", "Runtime: %dmin%s"),
|
||||||
diveplan_duration(diveplan), "VARIATIONS");
|
duration(), "VARIATIONS");
|
||||||
else
|
else
|
||||||
buf += casprintf_loc(translate("gettextFromC", "Runtime: %dmin%s"),
|
buf += casprintf_loc(translate("gettextFromC", "Runtime: %dmin%s"),
|
||||||
diveplan_duration(diveplan), "");
|
duration(), "");
|
||||||
buf += "<br/>\n</div>\n";
|
buf += "<br/>\n</div>\n";
|
||||||
|
|
||||||
if (!plan_verbatim) {
|
if (!plan_verbatim) {
|
||||||
|
@ -193,7 +193,7 @@ void add_plan_to_notes(struct diveplan &diveplan, struct dive *dive, bool show_d
|
||||||
translate("gettextFromC", "gas"));
|
translate("gettextFromC", "gas"));
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto dp = diveplan.dp.begin(); dp != diveplan.dp.end(); ++dp) {
|
for (auto dp = this->dp.begin(); dp != this->dp.end(); ++dp) {
|
||||||
auto nextdp = std::next(dp);
|
auto nextdp = std::next(dp);
|
||||||
struct gasmix gasmix, newgasmix = {};
|
struct gasmix gasmix, newgasmix = {};
|
||||||
const char *depth_unit;
|
const char *depth_unit;
|
||||||
|
@ -203,14 +203,14 @@ void add_plan_to_notes(struct diveplan &diveplan, struct dive *dive, bool show_d
|
||||||
|
|
||||||
if (dp->time == 0)
|
if (dp->time == 0)
|
||||||
continue;
|
continue;
|
||||||
gasmix = dive->get_cylinder(dp->cylinderid)->gasmix;
|
gasmix = dive.get_cylinder(dp->cylinderid)->gasmix;
|
||||||
depthvalue = get_depth_units(dp->depth.mm, &decimals, &depth_unit);
|
depthvalue = get_depth_units(dp->depth.mm, &decimals, &depth_unit);
|
||||||
/* analyze the dive points ahead */
|
/* analyze the dive points ahead */
|
||||||
while (nextdp != diveplan.dp.end() && nextdp->time == 0)
|
while (nextdp != this->dp.end() && nextdp->time == 0)
|
||||||
++nextdp;
|
++nextdp;
|
||||||
bool atend = nextdp == diveplan.dp.end();
|
bool atend = nextdp == this->dp.end();
|
||||||
if (!atend)
|
if (!atend)
|
||||||
newgasmix = dive->get_cylinder(nextdp->cylinderid)->gasmix;
|
newgasmix = dive.get_cylinder(nextdp->cylinderid)->gasmix;
|
||||||
gaschange_after = (!atend && (gasmix_distance(gasmix, newgasmix)));
|
gaschange_after = (!atend && (gasmix_distance(gasmix, newgasmix)));
|
||||||
gaschange_before = (gasmix_distance(lastprintgasmix, gasmix));
|
gaschange_before = (gasmix_distance(lastprintgasmix, gasmix));
|
||||||
rebreatherchange_after = (!atend && (dp->setpoint != nextdp->setpoint || dp->divemode != nextdp->divemode));
|
rebreatherchange_after = (!atend && (dp->setpoint != nextdp->setpoint || dp->divemode != nextdp->divemode));
|
||||||
|
@ -348,7 +348,7 @@ void add_plan_to_notes(struct diveplan &diveplan, struct dive *dive, bool show_d
|
||||||
if (isobaric_counterdiffusion(lastprintgasmix, newgasmix, &icdvalues)) // Do icd calulations
|
if (isobaric_counterdiffusion(lastprintgasmix, newgasmix, &icdvalues)) // Do icd calulations
|
||||||
icdwarning = true;
|
icdwarning = true;
|
||||||
if (icdvalues.dN2 > 0) { // If the gas change involved helium as well as an increase in nitrogen..
|
if (icdvalues.dN2 > 0) { // If the gas change involved helium as well as an increase in nitrogen..
|
||||||
icdbuf += icd_entry(&icdvalues, icdtableheader, dp->time, dive->depth_to_mbar(dp->depth.mm), lastprintgasmix, newgasmix); // .. then print calculations to buffer.
|
icdbuf += icd_entry(&icdvalues, icdtableheader, dp->time, dive.depth_to_mbar(dp->depth.mm), lastprintgasmix, newgasmix); // .. then print calculations to buffer.
|
||||||
icdtableheader = false;
|
icdtableheader = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -369,7 +369,7 @@ void add_plan_to_notes(struct diveplan &diveplan, struct dive *dive, bool show_d
|
||||||
if (isobaric_counterdiffusion(lastprintgasmix, gasmix, &icdvalues)) // Do icd calculations
|
if (isobaric_counterdiffusion(lastprintgasmix, gasmix, &icdvalues)) // Do icd calculations
|
||||||
icdwarning = true;
|
icdwarning = true;
|
||||||
if (icdvalues.dN2 > 0) { // If the gas change involved helium as well as an increase in nitrogen..
|
if (icdvalues.dN2 > 0) { // If the gas change involved helium as well as an increase in nitrogen..
|
||||||
icdbuf += icd_entry(&icdvalues, icdtableheader, lasttime, dive->depth_to_mbar(dp->depth.mm), lastprintgasmix, gasmix); // .. then print data to buffer.
|
icdbuf += icd_entry(&icdvalues, icdtableheader, lasttime, dive.depth_to_mbar(dp->depth.mm), lastprintgasmix, gasmix); // .. then print data to buffer.
|
||||||
icdtableheader = false;
|
icdtableheader = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -400,7 +400,7 @@ void add_plan_to_notes(struct diveplan &diveplan, struct dive *dive, bool show_d
|
||||||
if (isobaric_counterdiffusion(lastprintgasmix, newgasmix, &icdvalues)) // Do icd calculations
|
if (isobaric_counterdiffusion(lastprintgasmix, newgasmix, &icdvalues)) // Do icd calculations
|
||||||
icdwarning = true;
|
icdwarning = true;
|
||||||
if (icdvalues.dN2 > 0) { // If the gas change involved helium as well as an increase in nitrogen..
|
if (icdvalues.dN2 > 0) { // If the gas change involved helium as well as an increase in nitrogen..
|
||||||
icdbuf += icd_entry(&icdvalues, icdtableheader, dp->time, dive->depth_to_mbar(dp->depth.mm), lastprintgasmix, newgasmix); // ... then print data to buffer.
|
icdbuf += icd_entry(&icdvalues, icdtableheader, dp->time, dive.depth_to_mbar(dp->depth.mm), lastprintgasmix, newgasmix); // ... then print data to buffer.
|
||||||
icdtableheader = false;
|
icdtableheader = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -421,34 +421,34 @@ void add_plan_to_notes(struct diveplan &diveplan, struct dive *dive, bool show_d
|
||||||
buf += "</tbody>\n</table>\n<br/>\n";
|
buf += "</tbody>\n</table>\n<br/>\n";
|
||||||
|
|
||||||
/* Print the CNS and OTU next.*/
|
/* Print the CNS and OTU next.*/
|
||||||
dive->cns = 0;
|
dive.cns = 0;
|
||||||
dive->maxcns = 0;
|
dive.maxcns = 0;
|
||||||
divelog.dives.update_cylinder_related_info(*dive);
|
divelog.dives.update_cylinder_related_info(dive);
|
||||||
buf += casprintf_loc("<div>\n%s: %i%%", translate("gettextFromC", "CNS"), dive->cns);
|
buf += casprintf_loc("<div>\n%s: %i%%", translate("gettextFromC", "CNS"), dive.cns);
|
||||||
buf += casprintf_loc("<br/>\n%s: %i<br/>\n</div>\n", translate("gettextFromC", "OTU"), dive->otu);
|
buf += casprintf_loc("<br/>\n%s: %i<br/>\n</div>\n", translate("gettextFromC", "OTU"), dive.otu);
|
||||||
|
|
||||||
/* Print the settings for the diveplan next. */
|
/* Print the settings for the diveplan next. */
|
||||||
buf += "<div>\n";
|
buf += "<div>\n";
|
||||||
if (decoMode(true) == BUEHLMANN) {
|
if (decoMode(true) == BUEHLMANN) {
|
||||||
buf += casprintf_loc(translate("gettextFromC", "Deco model: Bühlmann ZHL-16C with GFLow = %d%% and GFHigh = %d%%"), diveplan.gflow, diveplan.gfhigh);
|
buf += casprintf_loc(translate("gettextFromC", "Deco model: Bühlmann ZHL-16C with GFLow = %d%% and GFHigh = %d%%"), gflow, gfhigh);
|
||||||
} else if (decoMode(true) == VPMB) {
|
} else if (decoMode(true) == VPMB) {
|
||||||
if (diveplan.vpmb_conservatism == 0)
|
if (vpmb_conservatism == 0)
|
||||||
buf += translate("gettextFromC", "Deco model: VPM-B at nominal conservatism");
|
buf += translate("gettextFromC", "Deco model: VPM-B at nominal conservatism");
|
||||||
else
|
else
|
||||||
buf += casprintf_loc(translate("gettextFromC", "Deco model: VPM-B at +%d conservatism"), diveplan.vpmb_conservatism);
|
buf += casprintf_loc(translate("gettextFromC", "Deco model: VPM-B at +%d conservatism"), vpmb_conservatism);
|
||||||
if (diveplan.eff_gflow)
|
if (eff_gflow)
|
||||||
buf += casprintf_loc( translate("gettextFromC", ", effective GF=%d/%d"), diveplan.eff_gflow, diveplan.eff_gfhigh);
|
buf += casprintf_loc( translate("gettextFromC", ", effective GF=%d/%d"), eff_gflow, eff_gfhigh);
|
||||||
} else if (decoMode(true) == RECREATIONAL) {
|
} else if (decoMode(true) == RECREATIONAL) {
|
||||||
buf += casprintf_loc(translate("gettextFromC", "Deco model: Recreational mode based on Bühlmann ZHL-16B with GFLow = %d%% and GFHigh = %d%%"),
|
buf += casprintf_loc(translate("gettextFromC", "Deco model: Recreational mode based on Bühlmann ZHL-16B with GFLow = %d%% and GFHigh = %d%%"),
|
||||||
diveplan.gflow, diveplan.gfhigh);
|
gflow, gfhigh);
|
||||||
}
|
}
|
||||||
buf += "<br/>\n";
|
buf += "<br/>\n";
|
||||||
|
|
||||||
{
|
{
|
||||||
const char *depth_unit;
|
const char *depth_unit;
|
||||||
int altitude = (int) get_depth_units((int) (pressure_to_altitude(diveplan.surface_pressure)), NULL, &depth_unit);
|
int altitude = (int) get_depth_units((int) (pressure_to_altitude(surface_pressure)), NULL, &depth_unit);
|
||||||
|
|
||||||
buf += casprintf_loc(translate("gettextFromC", "ATM pressure: %dmbar (%d%s)<br/>\n</div>\n"), diveplan.surface_pressure, altitude, depth_unit);
|
buf += casprintf_loc(translate("gettextFromC", "ATM pressure: %dmbar (%d%s)<br/>\n</div>\n"), surface_pressure, altitude, depth_unit);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get SAC values and units for printing it in gas consumption */
|
/* Get SAC values and units for printing it in gas consumption */
|
||||||
|
@ -465,7 +465,7 @@ void add_plan_to_notes(struct diveplan &diveplan, struct dive *dive, bool show_d
|
||||||
|
|
||||||
/* Print the gas consumption next.*/
|
/* Print the gas consumption next.*/
|
||||||
std::string temp;
|
std::string temp;
|
||||||
if (dive->dcs[0].divemode == CCR)
|
if (dive.dcs[0].divemode == CCR)
|
||||||
temp = translate("gettextFromC", "Gas consumption (CCR legs excluded):");
|
temp = translate("gettextFromC", "Gas consumption (CCR legs excluded):");
|
||||||
else
|
else
|
||||||
temp = casprintf_loc("%s %.*f|%.*f%s/min):", translate("gettextFromC", "Gas consumption (based on SAC"),
|
temp = casprintf_loc("%s %.*f|%.*f%s/min):", translate("gettextFromC", "Gas consumption (based on SAC"),
|
||||||
|
@ -474,7 +474,7 @@ void add_plan_to_notes(struct diveplan &diveplan, struct dive *dive, bool show_d
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Print gas consumption: This loop covers all cylinders */
|
/* Print gas consumption: This loop covers all cylinders */
|
||||||
for (auto [gasidx, cyl]: enumerated_range(dive->cylinders)) {
|
for (auto [gasidx, cyl]: enumerated_range(dive.cylinders)) {
|
||||||
double volume, pressure, deco_volume, deco_pressure, mingas_volume, mingas_pressure, mingas_d_pressure, mingas_depth;
|
double volume, pressure, deco_volume, deco_pressure, mingas_volume, mingas_pressure, mingas_d_pressure, mingas_depth;
|
||||||
const char *unit, *pressure_unit, *depth_unit;
|
const char *unit, *pressure_unit, *depth_unit;
|
||||||
std::string temp;
|
std::string temp;
|
||||||
|
@ -509,11 +509,11 @@ void add_plan_to_notes(struct diveplan &diveplan, struct dive *dive, bool show_d
|
||||||
/* not for recreational mode and if no other warning was set before. */
|
/* not for recreational mode and if no other warning was set before. */
|
||||||
else
|
else
|
||||||
if (lastbottomdp && gasidx == lastbottomdp->cylinderid
|
if (lastbottomdp && gasidx == lastbottomdp->cylinderid
|
||||||
&& dive->dcs[0].divemode == OC && decoMode(true) != RECREATIONAL) {
|
&& dive.dcs[0].divemode == OC && decoMode(true) != RECREATIONAL) {
|
||||||
/* Calculate minimum gas volume. */
|
/* Calculate minimum gas volume. */
|
||||||
volume_t mingasv;
|
volume_t mingasv;
|
||||||
mingasv.mliter = lrint(prefs.sacfactor / 100.0 * prefs.problemsolvingtime * prefs.bottomsac
|
mingasv.mliter = lrint(prefs.sacfactor / 100.0 * prefs.problemsolvingtime * prefs.bottomsac
|
||||||
* dive->depth_to_bar(lastbottomdp->depth.mm)
|
* dive.depth_to_bar(lastbottomdp->depth.mm)
|
||||||
+ prefs.sacfactor / 100.0 * cyl.deco_gas_used.mliter);
|
+ prefs.sacfactor / 100.0 * cyl.deco_gas_used.mliter);
|
||||||
/* Calculate minimum gas pressure for cyclinder. */
|
/* Calculate minimum gas pressure for cyclinder. */
|
||||||
lastbottomdp->minimum_gas.mbar = lrint(isothermal_pressure(cyl.gasmix, 1.0,
|
lastbottomdp->minimum_gas.mbar = lrint(isothermal_pressure(cyl.gasmix, 1.0,
|
||||||
|
@ -584,15 +584,15 @@ void add_plan_to_notes(struct diveplan &diveplan, struct dive *dive, bool show_d
|
||||||
bool o2warning_exist = false;
|
bool o2warning_exist = false;
|
||||||
double amb;
|
double amb;
|
||||||
|
|
||||||
divemode_loop loop(dive->dcs[0]);
|
divemode_loop loop(dive.dcs[0]);
|
||||||
if (dive->dcs[0].divemode != CCR) {
|
if (dive.dcs[0].divemode != CCR) {
|
||||||
for (auto &dp: diveplan.dp) {
|
for (auto &dp: this->dp) {
|
||||||
if (dp.time != 0) {
|
if (dp.time != 0) {
|
||||||
std::string temp;
|
std::string temp;
|
||||||
struct gasmix gasmix = dive->get_cylinder(dp.cylinderid)->gasmix;
|
struct gasmix gasmix = dive.get_cylinder(dp.cylinderid)->gasmix;
|
||||||
|
|
||||||
divemode_t current_divemode = loop.at(dp.time);
|
divemode_t current_divemode = loop.at(dp.time);
|
||||||
amb = dive->depth_to_atm(dp.depth.mm);
|
amb = dive.depth_to_atm(dp.depth.mm);
|
||||||
gas_pressures pressures = fill_pressures(amb, gasmix, (current_divemode == OC) ? 0.0 : amb * gasmix.o2.permille / 1000.0, current_divemode);
|
gas_pressures pressures = fill_pressures(amb, gasmix, (current_divemode == OC) ? 0.0 : amb * gasmix.o2.permille / 1000.0, current_divemode);
|
||||||
|
|
||||||
if (pressures.o2 > (dp.entered ? prefs.bottompo2 : prefs.decopo2) / 1000.0) {
|
if (pressures.o2 > (dp.entered ? prefs.bottompo2 : prefs.decopo2) / 1000.0) {
|
||||||
|
@ -622,8 +622,8 @@ void add_plan_to_notes(struct diveplan &diveplan, struct dive *dive, bool show_d
|
||||||
if (o2warning_exist)
|
if (o2warning_exist)
|
||||||
buf += "</div>\n";
|
buf += "</div>\n";
|
||||||
}
|
}
|
||||||
dive->notes = std::move(buf);
|
dive.notes = std::move(buf);
|
||||||
#ifdef DEBUG_PLANNER_NOTES
|
#ifdef DEBUG_PLANNER_NOTES
|
||||||
printf("<!DOCTYPE html>\n<html>\n\t<head><title>plannernotes</title><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/></head>\n\t<body>\n%s\t</body>\n</html>\n", dive->notes);
|
printf("<!DOCTYPE html>\n<html>\n\t<head><title>plannernotes</title><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/></head>\n\t<body>\n%s\t</body>\n</html>\n", dive.notes);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -881,13 +881,7 @@ int DivePlannerPointsModel::addStop(int milimeters, int seconds, int cylinderid_
|
||||||
|
|
||||||
// add the new stop
|
// add the new stop
|
||||||
beginInsertRows(QModelIndex(), row, row);
|
beginInsertRows(QModelIndex(), row, row);
|
||||||
divedatapoint point;
|
divedatapoint point(seconds, milimeters, cylinderid, ccpoint, entered);
|
||||||
point.depth.mm = milimeters;
|
|
||||||
point.time = seconds;
|
|
||||||
point.cylinderid = cylinderid;
|
|
||||||
point.setpoint = ccpoint;
|
|
||||||
point.minimum_gas.mbar = 0;
|
|
||||||
point.entered = entered;
|
|
||||||
point.divemode = divemode;
|
point.divemode = divemode;
|
||||||
divepoints.insert(divepoints.begin() + row, point);
|
divepoints.insert(divepoints.begin() + row, point);
|
||||||
endInsertRows();
|
endInsertRows();
|
||||||
|
@ -1121,7 +1115,7 @@ void DivePlannerPointsModel::updateDiveProfile()
|
||||||
if (!d)
|
if (!d)
|
||||||
return;
|
return;
|
||||||
createTemporaryPlan();
|
createTemporaryPlan();
|
||||||
if (diveplan_empty(diveplan))
|
if (diveplan.is_empty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
deco_state_cache cache;
|
deco_state_cache cache;
|
||||||
|
|
Loading…
Add table
Reference in a new issue