mirror of
				https://github.com/subsurface/subsurface.git
				synced 2025-02-19 22:16:15 +00:00 
			
		
		
		
	core: pass depth_t to get_depth_units()
Commit is longer than expected, because a few of the callers were converted to use depth_t instead of int. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
		
							parent
							
								
									1d14b03935
								
							
						
					
					
						commit
						992e258524
					
				
					 21 changed files with 82 additions and 84 deletions
				
			
		|  | @ -180,8 +180,8 @@ void export_TeX(const char *filename, bool selected_only, bool plain, ExportCall | |||
| 		dive->mintemp.mkelvin ? put_format(&buf, "\\def\\%smintemp{%.1f\\%stemperatureunit}\n", ssrf, get_temp_units(dive->mintemp.mkelvin, &unit), ssrf) : put_format(&buf, "\\def\\%ssrfmintemp{}\n", ssrf); | ||||
| 		dive->watertemp.mkelvin ? put_format(&buf, "\\def\\%swatertemp{%.1f\\%stemperatureunit}\n", ssrf, get_temp_units(dive->watertemp.mkelvin, &unit), ssrf) : put_format(&buf, "\\def\\%swatertemp{}\n", ssrf); | ||||
| 		dive->airtemp.mkelvin ? put_format(&buf, "\\def\\%sairtemp{%.1f\\%stemperatureunit}\n", ssrf, get_temp_units(dive->airtemp.mkelvin, &unit), ssrf) : put_format(&buf, "\\def\\%sairtemp{}\n", ssrf); | ||||
| 		dive->maxdepth.mm ? put_format(&buf, "\\def\\%smaximumdepth{%.1f\\%sdepthunit}\n", ssrf, get_depth_units(dive->maxdepth.mm, NULL, &unit), ssrf) : put_format(&buf, "\\def\\%smaximumdepth{}\n", ssrf); | ||||
| 		dive->meandepth.mm ? put_format(&buf, "\\def\\%smeandepth{%.1f\\%sdepthunit}\n", ssrf, get_depth_units(dive->meandepth.mm, NULL, &unit), ssrf) : put_format(&buf, "\\def\\%smeandepth{}\n", ssrf); | ||||
| 		dive->maxdepth.mm ? put_format(&buf, "\\def\\%smaximumdepth{%.1f\\%sdepthunit}\n", ssrf, get_depth_units(dive->maxdepth, NULL, &unit), ssrf) : put_format(&buf, "\\def\\%smaximumdepth{}\n", ssrf); | ||||
| 		dive->meandepth.mm ? put_format(&buf, "\\def\\%smeandepth{%.1f\\%sdepthunit}\n", ssrf, get_depth_units(dive->meandepth, NULL, &unit), ssrf) : put_format(&buf, "\\def\\%smeandepth{}\n", ssrf); | ||||
| 
 | ||||
| 		std::string tags = taglist_get_tagstring(dive->tags); | ||||
| 		put_format(&buf, "\\def\\%stype{%s}\n", ssrf, tags.c_str()); | ||||
|  | @ -242,7 +242,7 @@ void export_TeX(const char *filename, bool selected_only, bool plain, ExportCall | |||
| 		put_format(&buf, "\\def\\%sspot{}\n", ssrf); | ||||
| 		put_format(&buf, "\\def\\%sentrance{}\n", ssrf); | ||||
| 		put_format(&buf, "\\def\\%splace{%s}\n", ssrf, site ? site->name.c_str() : ""); | ||||
| 		dive->maxdepth.mm ? put_format(&buf, "\\def\\%sdepth{%.1f\\%sdepthunit}\n", ssrf, get_depth_units(dive->maxdepth.mm, NULL, &unit), ssrf) : put_format(&buf, "\\def\\%sdepth{}\n", ssrf); | ||||
| 		dive->maxdepth.mm ? put_format(&buf, "\\def\\%sdepth{%.1f\\%sdepthunit}\n", ssrf, get_depth_units(dive->maxdepth, NULL, &unit), ssrf) : put_format(&buf, "\\def\\%sdepth{}\n", ssrf); | ||||
| 
 | ||||
| 		put_format(&buf, "\\%spage\n", ssrf); | ||||
| 	} | ||||
|  | @ -280,7 +280,7 @@ void export_depths(const char *filename, bool selected_only) | |||
| 					break; | ||||
| 				depth = s.depth; | ||||
| 			} | ||||
| 			put_format(&buf, "%s\t%.1f", picture.filename.c_str(), get_depth_units(depth.mm, NULL, &unit)); | ||||
| 			put_format(&buf, "%s\t%.1f", picture.filename.c_str(), get_depth_units(depth, NULL, &unit)); | ||||
| 			put_format(&buf, "%s\n", unit); | ||||
| 		} | ||||
| 	} | ||||
|  |  | |||
|  | @ -154,7 +154,7 @@ void PlannerShared::set_decopo2(double value) | |||
| 
 | ||||
| int PlannerShared::bestmixend() | ||||
| { | ||||
| 	return lrint(get_depth_units(prefs.bestmixend.mm, NULL, NULL)); | ||||
| 	return lrint(get_depth_units(prefs.bestmixend, NULL, NULL)); | ||||
| } | ||||
| void PlannerShared::set_bestmixend(int value) | ||||
| { | ||||
|  |  | |||
|  | @ -169,7 +169,7 @@ bool ConfigureDiveComputer::saveXMLBackup(const QString &fileName, const DeviceD | |||
| 
 | ||||
| 	writer.writeStartElement("AlarmDepth"); | ||||
| 	writer.writeAttribute("enabled", QString::number(details.alarmDepthEnabled)); | ||||
| 	writer.writeCharacters(QString::number(details.alarmDepth)); | ||||
| 	writer.writeCharacters(QString::number(details.alarmDepth.mm)); | ||||
| 	writer.writeEndElement(); | ||||
| 
 | ||||
| 	writer.writeEndElement(); | ||||
|  | @ -474,7 +474,7 @@ bool ConfigureDiveComputer::restoreXMLBackup(const QString &fileName, DeviceDeta | |||
| 			if (settingName == "AlarmDepth") { | ||||
| 				if (attributes.hasAttribute("enabled")) | ||||
| 					details.alarmDepthEnabled = attributes.value("enabled").toString().toInt(); | ||||
| 				details.alarmDepth = keyString.toInt(); | ||||
| 				details.alarmDepth.mm = keyString.toInt(); | ||||
| 			} | ||||
| 
 | ||||
| 			if (settingName == "AlarmTime") { | ||||
|  |  | |||
|  | @ -176,7 +176,7 @@ static dc_status_t read_suunto_vyper_settings(dc_device_t *device, DeviceDetails | |||
| 		return rc; | ||||
| 	// in ft * 128.0
 | ||||
| 	int depth = feet_to_mm(data[0] << 8 ^ data[1]) / 128; | ||||
| 	deviceDetails.maxDepth = depth; | ||||
| 	deviceDetails.maxDepth.mm = depth; | ||||
| 	EMIT_PROGRESS(); | ||||
| 
 | ||||
| 	rc = dc_device_read(device, SUUNTO_VYPER_TOTAL_TIME, data, 2); | ||||
|  | @ -272,7 +272,7 @@ static dc_status_t read_suunto_vyper_settings(dc_device_t *device, DeviceDetails | |||
| 	if (rc != DC_STATUS_SUCCESS) | ||||
| 		return rc; | ||||
| 	depth = feet_to_mm(data[0] << 8 ^ data[1]) / 128; | ||||
| 	deviceDetails.alarmDepth = depth; | ||||
| 	deviceDetails.alarmDepth.mm = depth; | ||||
| 	EMIT_PROGRESS(); | ||||
| 
 | ||||
| 	return DC_STATUS_SUCCESS; | ||||
|  | @ -354,8 +354,8 @@ static dc_status_t write_suunto_vyper_settings(dc_device_t *device, DeviceDetail | |||
| 		return rc; | ||||
| 	EMIT_PROGRESS(); | ||||
| 
 | ||||
| 	data2[0] = (int)(mm_to_feet(deviceDetails.alarmDepth) * 128) >> 8; | ||||
| 	data2[1] = (int)(mm_to_feet(deviceDetails.alarmDepth) * 128) & 0x0FF; | ||||
| 	data2[0] = (int)(mm_to_feet(deviceDetails.alarmDepth.mm) * 128) >> 8; | ||||
| 	data2[1] = (int)(mm_to_feet(deviceDetails.alarmDepth.mm) * 128) & 0x0FF; | ||||
| 	rc = dc_device_write(device, SUUNTO_VYPER_ALARM_DEPTH, data2, 2); | ||||
| 	EMIT_PROGRESS(); | ||||
| 	return rc; | ||||
|  |  | |||
|  | @ -41,7 +41,6 @@ DeviceDetails::DeviceDetails() : | |||
| 	pressureSensorOffset(0), | ||||
| 	flipScreen(0), | ||||
| 	safetyStop(0), | ||||
| 	maxDepth(0), | ||||
| 	totalTime(0), | ||||
| 	numberOfDives(0), | ||||
| 	altitude(0), | ||||
|  | @ -52,7 +51,6 @@ DeviceDetails::DeviceDetails() : | |||
| 	alarmTimeEnabled(false), | ||||
| 	alarmTime(0), | ||||
| 	alarmDepthEnabled(false), | ||||
| 	alarmDepth(0), | ||||
| 	leftButtonSensitivity(0), | ||||
| 	rightButtonSensitivity(0), | ||||
| 	buttonSensitivity(0), | ||||
|  |  | |||
|  | @ -5,6 +5,7 @@ | |||
| #include <QObject> | ||||
| #include <QDateTime> | ||||
| #include "libdivecomputer.h" | ||||
| #include "units.h" | ||||
| 
 | ||||
| struct gas { | ||||
| 	unsigned char oxygen; | ||||
|  | @ -73,7 +74,7 @@ public: | |||
| 	int pressureSensorOffset; | ||||
| 	bool flipScreen; | ||||
| 	bool safetyStop; | ||||
| 	int maxDepth; | ||||
| 	depth_t maxDepth; | ||||
| 	int totalTime; | ||||
| 	int numberOfDives; | ||||
| 	int altitude; | ||||
|  | @ -84,7 +85,7 @@ public: | |||
| 	bool alarmTimeEnabled; | ||||
| 	int alarmTime; | ||||
| 	bool alarmDepthEnabled; | ||||
| 	int alarmDepth; | ||||
| 	depth_t alarmDepth; | ||||
| 	int leftButtonSensitivity; | ||||
| 	int rightButtonSensitivity; | ||||
| 	int buttonSensitivity; | ||||
|  |  | |||
|  | @ -456,17 +456,17 @@ static std::vector<depth_t> sort_stops(const std::vector<depth_t> &dstops, size_ | |||
| 	return stoplevels; | ||||
| } | ||||
| 
 | ||||
| int ascent_velocity(depth_t depth, int avg_depth, int) | ||||
| int ascent_velocity(depth_t depth, depth_t avg_depth, int) | ||||
| { | ||||
| 	/* We need to make this configurable */ | ||||
| 
 | ||||
| 	/* As an example (and possibly reasonable default) this is the Tech 1 provedure according
 | ||||
| 	 * to http://www.globalunderwaterexplorers.org/files/Standards_and_Procedures/SOP_Manual_Ver2.0.2.pdf */
 | ||||
| 
 | ||||
| 	if (depth.mm * 4 > avg_depth * 3) { | ||||
| 	if (depth.mm * 4 > avg_depth.mm * 3) { | ||||
| 		return prefs.ascrate75; | ||||
| 	} else { | ||||
| 		if (depth.mm * 2 > avg_depth) { | ||||
| 		if (depth.mm * 2 > avg_depth.mm) { | ||||
| 			return prefs.ascrate50; | ||||
| 		} else { | ||||
| 			if (depth.mm > 6000) | ||||
|  | @ -477,7 +477,7 @@ int ascent_velocity(depth_t depth, int avg_depth, int) | |||
| 	} | ||||
| } | ||||
| 
 | ||||
| static void track_ascent_gas(depth_t depth, struct dive *dive, int cylinder_id, int avg_depth, int bottom_time, bool safety_stop, enum divemode_t divemode) | ||||
| static void track_ascent_gas(depth_t depth, struct dive *dive, int cylinder_id, depth_t avg_depth, int bottom_time, bool safety_stop, enum divemode_t divemode) | ||||
| { | ||||
| 	cylinder_t *cylinder = dive->get_cylinder(cylinder_id); | ||||
| 	while (depth.mm > 0) { | ||||
|  | @ -494,7 +494,7 @@ static void track_ascent_gas(depth_t depth, struct dive *dive, int cylinder_id, | |||
| } | ||||
| 
 | ||||
| // Determine whether ascending to the next stop will break the ceiling.  Return true if the ascent is ok, false if it isn't.
 | ||||
| static bool trial_ascent(struct deco_state *ds, int wait_time, depth_t trial_depth, depth_t stoplevel, int avg_depth, int bottom_time, struct gasmix gasmix, int po2, double surface_pressure, struct dive *dive, enum divemode_t divemode) | ||||
| static bool trial_ascent(struct deco_state *ds, int wait_time, depth_t trial_depth, depth_t stoplevel, depth_t avg_depth, int bottom_time, struct gasmix gasmix, int po2, double surface_pressure, struct dive *dive, enum divemode_t divemode) | ||||
| { | ||||
| 
 | ||||
| 	bool clear_to_ascend = true; | ||||
|  | @ -562,7 +562,7 @@ static bool enough_gas(const struct dive *dive, int current_cylinder) | |||
|  * leap is a guess for the maximum but there is no guarantee that leap is an upper limit. | ||||
|  * So we always test at the upper bundary, not in the middle! | ||||
|  */ | ||||
| static int wait_until(struct deco_state *ds, struct dive *dive, int clock, int min, int leap, int stepsize, depth_t depth, depth_t target_depth, int avg_depth, int bottom_time, struct gasmix gasmix, int po2, double surface_pressure, enum divemode_t divemode) | ||||
| static int wait_until(struct deco_state *ds, struct dive *dive, int clock, int min, int leap, int stepsize, depth_t depth, depth_t target_depth, depth_t avg_depth, int bottom_time, struct gasmix gasmix, int po2, double surface_pressure, enum divemode_t divemode) | ||||
| { | ||||
| 	// When a deco stop exceeds two days, there is something wrong...
 | ||||
| 	if (min >= 48 * 3600) | ||||
|  | @ -579,28 +579,26 @@ static int wait_until(struct deco_state *ds, struct dive *dive, int clock, int m | |||
| 	return wait_until(ds, dive, clock, min, leap / 2, stepsize, depth, target_depth, avg_depth, bottom_time, gasmix, po2, surface_pressure, divemode); | ||||
| } | ||||
| 
 | ||||
| static void average_max_depth(const struct diveplan &dive, int *avg_depth, int *max_depth) | ||||
| // returns an (average_depth, maximum_depth) pair
 | ||||
| static std::pair<depth_t, depth_t> average_max_depth(const struct diveplan &dive) | ||||
| { | ||||
| 	int integral = 0; | ||||
| 	depth_t integral; // Strictly speaking not a depth, but depth × time. Might want to define a custom time for that.
 | ||||
| 	depth_t last_depth, max_depth; | ||||
| 	int last_time = 0; | ||||
| 	int last_depth = 0; | ||||
| 
 | ||||
| 	*max_depth = 0; | ||||
| 
 | ||||
| 	for (auto &dp: dive.dp) { | ||||
| 		if (dp.time) { | ||||
| 			/* Ignore gas indication samples */ | ||||
| 			integral += (dp.depth.mm + last_depth) * (dp.time - last_time) / 2; | ||||
| 			integral += (dp.depth + last_depth) * (dp.time - last_time) / 2; | ||||
| 			last_time = dp.time; | ||||
| 			last_depth = dp.depth.mm; | ||||
| 			if (dp.depth.mm > *max_depth) | ||||
| 				*max_depth = dp.depth.mm; | ||||
| 			last_depth = dp.depth; | ||||
| 			if (dp.depth.mm > max_depth.mm) | ||||
| 				max_depth = dp.depth; | ||||
| 		} | ||||
| 	} | ||||
| 	if (last_time) | ||||
| 		*avg_depth = integral / last_time; | ||||
| 	else | ||||
| 		*avg_depth = *max_depth = 0; | ||||
| 		return { integral / last_time, max_depth }; | ||||
| 	return { 0_m, 0_m }; | ||||
| } | ||||
| 
 | ||||
| std::vector<decostop> plan(struct deco_state *ds, struct diveplan &diveplan, struct dive *dive, int dcNr, int timestep, deco_state_cache &cache, bool is_planner, bool show_disclaimer) | ||||
|  | @ -619,7 +617,6 @@ std::vector<decostop> plan(struct deco_state *ds, struct diveplan &diveplan, str | |||
| 	bool stopping = false; | ||||
| 	bool pendinggaschange = false; | ||||
| 	int clock, previous_point_time; | ||||
| 	int avg_depth, max_depth; | ||||
| 	int last_ascend_rate; | ||||
| 	int best_first_ascend_cylinder = -1; | ||||
| 	struct gasmix gas, bottom_gas; | ||||
|  | @ -678,7 +675,7 @@ std::vector<decostop> plan(struct deco_state *ds, struct diveplan &diveplan, str | |||
| 
 | ||||
| 	po2 = sample.setpoint.mbar; | ||||
| 	depth_t depth = sample.depth; | ||||
| 	average_max_depth(diveplan, &avg_depth, &max_depth); | ||||
| 	auto [avg_depth, max_depth] = average_max_depth(diveplan); | ||||
| 	last_ascend_rate = ascent_velocity(depth, avg_depth, bottom_time); | ||||
| 
 | ||||
| 	/* if all we wanted was the dive just get us back to the surface */ | ||||
|  | @ -723,7 +720,7 @@ std::vector<decostop> plan(struct deco_state *ds, struct diveplan &diveplan, str | |||
| 	nuclear_regeneration(ds, clock); | ||||
| 	vpmb_start_gradient(ds); | ||||
| 	if (decoMode(true) == RECREATIONAL) { | ||||
| 		bool safety_stop = prefs.safetystop && max_depth >= 10000; | ||||
| 		bool safety_stop = prefs.safetystop && max_depth.mm >= 10000; | ||||
| 		track_ascent_gas(depth, dive, current_cylinder, avg_depth, bottom_time, safety_stop, divemode); | ||||
| 		// How long can we stay at the current depth and still directly ascent to the surface?
 | ||||
| 		do { | ||||
|  |  | |||
|  | @ -58,7 +58,7 @@ struct diveplan { | |||
| struct deco_state_cache; | ||||
| 
 | ||||
| extern int get_cylinderid_at_time(struct dive *dive, struct divecomputer *dc, duration_t time); | ||||
| extern int ascent_velocity(depth_t depth, int avg_depth, int); | ||||
| extern int ascent_velocity(depth_t depth, depth_t avg_depth, int); | ||||
| extern const char *get_planner_disclaimer(); | ||||
| 
 | ||||
| void plan_add_segment(struct diveplan &diveplan, int duration, depth_t depth, int cylinderid, int po2, bool entered, enum divemode_t divemode); | ||||
|  |  | |||
|  | @ -202,7 +202,7 @@ void diveplan::add_plan_to_notes(struct dive &dive, bool show_disclaimer, planne | |||
| 		if (dp->time == 0) | ||||
| 			continue; | ||||
| 		gasmix = dive.get_cylinder(dp->cylinderid)->gasmix; | ||||
| 		depthvalue = get_depth_units(dp->depth.mm, &decimals, &depth_unit); | ||||
| 		depthvalue = get_depth_units(dp->depth, &decimals, &depth_unit); | ||||
| 		/* analyze the dive points ahead */ | ||||
| 		while (nextdp != this->dp.end() && nextdp->time == 0) | ||||
| 			++nextdp; | ||||
|  | @ -443,7 +443,7 @@ void diveplan::add_plan_to_notes(struct dive &dive, bool show_disclaimer, planne | |||
| 
 | ||||
| 	{ | ||||
| 		const char *depth_unit; | ||||
| 		int altitude = (int) get_depth_units(pressure_to_altitude(surface_pressure).mm, NULL, &depth_unit); | ||||
| 		int altitude = (int) get_depth_units(pressure_to_altitude(surface_pressure), NULL, &depth_unit); | ||||
| 
 | ||||
| 		buf += casprintf_loc(translate("gettextFromC", "ATM pressure: %dmbar (%d%s)<br/>\n</div>\n"), surface_pressure, altitude, depth_unit); | ||||
| 	} | ||||
|  | @ -519,7 +519,7 @@ void diveplan::add_plan_to_notes(struct dive &dive, bool show_disclaimer, planne | |||
| 					mingas_volume = get_volume_units(mingasv.mliter, NULL, &unit); | ||||
| 					mingas_pressure = get_pressure_units(lastbottomdp->minimum_gas.mbar, &pressure_unit); | ||||
| 					mingas_d_pressure = get_pressure_units(lrint((double)cyl.end.mbar + deco_pressure_mbar - lastbottomdp->minimum_gas.mbar), &pressure_unit); | ||||
| 					mingas_depth = get_depth_units(lastbottomdp->depth.mm, NULL, &depth_unit); | ||||
| 					mingas_depth = get_depth_units(lastbottomdp->depth, NULL, &depth_unit); | ||||
| 					/* Print it to results */ | ||||
| 					if (cyl.start.mbar > lastbottomdp->minimum_gas.mbar) { | ||||
| 						mingas = casprintf_loc("<br/>\n — <span style='color: %s;'>%s</span> (%s %.1fx%s/+%d%s@%.0f%s): " | ||||
|  | @ -595,7 +595,7 @@ void diveplan::add_plan_to_notes(struct dive &dive, bool show_disclaimer, planne | |||
| 					if (pressures.o2 > (dp.entered ? prefs.bottompo2 : prefs.decopo2) / 1000.0) { | ||||
| 						const char *depth_unit; | ||||
| 						int decimals; | ||||
| 						double depth_value = get_depth_units(dp.depth.mm, &decimals, &depth_unit); | ||||
| 						double depth_value = get_depth_units(dp.depth, &decimals, &depth_unit); | ||||
| 						if (!o2warning_exist) | ||||
| 							buf += "<div>\n"; | ||||
| 						o2warning_exist = true; | ||||
|  | @ -605,7 +605,7 @@ void diveplan::add_plan_to_notes(struct dive &dive, bool show_disclaimer, planne | |||
| 					} else if (pressures.o2 < 0.16) { | ||||
| 						const char *depth_unit; | ||||
| 						int decimals; | ||||
| 						double depth_value = get_depth_units(dp.depth.mm, &decimals, &depth_unit); | ||||
| 						double depth_value = get_depth_units(dp.depth, &decimals, &depth_unit); | ||||
| 						if (!o2warning_exist) | ||||
| 							buf += "<div>"; | ||||
| 						o2warning_exist = true; | ||||
|  |  | |||
|  | @ -326,7 +326,7 @@ static void insert_entry(struct plot_info &pi, int time, depth_t depth, int sac) | |||
| 	entry = prev; | ||||
| 	entry.sec = time; | ||||
| 	entry.depth = depth; | ||||
| 	entry.running_sum = prev.running_sum + (time - prev.sec) * (depth + prev.depth).mm / 2; | ||||
| 	entry.running_sum = prev.running_sum + (depth + prev.depth) * (time - prev.sec) / 2; | ||||
| 	entry.sac = sac; | ||||
| 	entry.ndl = -1; | ||||
| 	entry.bearing = -1; | ||||
|  | @ -401,7 +401,7 @@ static void populate_plot_entries(const struct dive *dive, const struct divecomp | |||
| 		entry.sec = time; | ||||
| 		entry.depth = sample.depth; | ||||
| 
 | ||||
| 		entry.running_sum = prev.running_sum + (time - prev.sec) * (sample.depth.mm + prev.depth.mm) / 2; | ||||
| 		entry.running_sum = prev.running_sum + (sample.depth + prev.depth) * (time - prev.sec) / 2; | ||||
| 		entry.stopdepth = sample.stopdepth; | ||||
| 		entry.stoptime = sample.stoptime.seconds; | ||||
| 		entry.ndl = sample.ndl.seconds; | ||||
|  | @ -1268,7 +1268,7 @@ static std::vector<std::string> plot_string(const struct dive *d, const struct p | |||
| 	const struct plot_data &entry = pi.entry[idx]; | ||||
| 	std::vector<std::string> res; | ||||
| 
 | ||||
| 	depthvalue = get_depth_units(entry.depth.mm, NULL, &depth_unit); | ||||
| 	depthvalue = get_depth_units(entry.depth, NULL, &depth_unit); | ||||
| 	res.push_back(casprintf_loc(translate("gettextFromC", "@: %d:%02d"), FRACTION_TUPLE(entry.sec, 60))); | ||||
| 	res.push_back(casprintf_loc(translate("gettextFromC", "D: %.1f%s"), depthvalue, depth_unit)); | ||||
| 	for (cyl = 0; cyl < pi.nr_cylinders; cyl++) { | ||||
|  | @ -1303,23 +1303,23 @@ static std::vector<std::string> plot_string(const struct dive *d, const struct p | |||
| 	if (prefs.pp_graphs.phe && entry.pressures.he > 0) | ||||
| 		res.push_back(casprintf_loc(translate("gettextFromC", "pHe: %.2fbar"), entry.pressures.he)); | ||||
| 	if (prefs.mod && entry.mod.mm > 0) { | ||||
| 		mod.mm = lrint(get_depth_units(entry.mod.mm, NULL, &depth_unit)); | ||||
| 		mod.mm = lrint(get_depth_units(entry.mod, NULL, &depth_unit)); | ||||
| 		res.push_back(casprintf_loc(translate("gettextFromC", "MOD: %d%s"), mod.mm, depth_unit)); | ||||
| 	} | ||||
| 	eadd.mm = lrint(get_depth_units(entry.eadd.mm, NULL, &depth_unit)); | ||||
| 	eadd.mm = lrint(get_depth_units(entry.eadd, NULL, &depth_unit)); | ||||
| 
 | ||||
| 	if (prefs.ead) { | ||||
| 		switch (pi.dive_type) { | ||||
| 		case plot_info::NITROX: | ||||
| 			if (entry.ead.mm > 0) { | ||||
| 				ead.mm = lrint(get_depth_units(entry.ead.mm, NULL, &depth_unit)); | ||||
| 				ead.mm = lrint(get_depth_units(entry.ead, NULL, &depth_unit)); | ||||
| 				res.push_back(casprintf_loc(translate("gettextFromC", "EAD: %d%s"), ead.mm, depth_unit)); | ||||
| 				res.push_back(casprintf_loc(translate("gettextFromC", "EADD: %d%s / %.1fg/ℓ"), eadd.mm, depth_unit, entry.density)); | ||||
| 				break; | ||||
| 			} | ||||
| 		case plot_info::TRIMIX: | ||||
| 			if (entry.end.mm > 0) { | ||||
| 				end.mm = lrint(get_depth_units(entry.end.mm, NULL, &depth_unit)); | ||||
| 				end.mm = lrint(get_depth_units(entry.end, NULL, &depth_unit)); | ||||
| 				res.push_back(casprintf_loc(translate("gettextFromC", "END: %d%s"), end.mm, depth_unit)); | ||||
| 				res.push_back(casprintf_loc(translate("gettextFromC", "EADD: %d%s / %.1fg/ℓ"), eadd.mm, depth_unit, entry.density)); | ||||
| 				break; | ||||
|  | @ -1334,7 +1334,7 @@ static std::vector<std::string> plot_string(const struct dive *d, const struct p | |||
| 		} | ||||
| 	} | ||||
| 	if (entry.stopdepth.mm > 0) { | ||||
| 		depthvalue = get_depth_units(entry.stopdepth.mm, NULL, &depth_unit); | ||||
| 		depthvalue = get_depth_units(entry.stopdepth, NULL, &depth_unit); | ||||
| 		if (entry.ndl > 0) { | ||||
| 			/* this is a safety stop as we still have ndl */ | ||||
| 			if (entry.stoptime) | ||||
|  | @ -1360,7 +1360,7 @@ static std::vector<std::string> plot_string(const struct dive *d, const struct p | |||
| 	if (entry.tts) | ||||
| 		res.push_back(casprintf_loc(translate("gettextFromC", "TTS: %umin"), div_up(entry.tts, 60))); | ||||
| 	if (entry.stopdepth_calc.mm > 0 && entry.stoptime_calc) { | ||||
| 		depthvalue = get_depth_units(entry.stopdepth_calc.mm, NULL, &depth_unit); | ||||
| 		depthvalue = get_depth_units(entry.stopdepth_calc, NULL, &depth_unit); | ||||
| 		res.push_back(casprintf_loc(translate("gettextFromC", "Deco: %umin @ %.0f%s (calc)"), div_up(entry.stoptime_calc, 60), | ||||
| 				  depthvalue, depth_unit)); | ||||
| 	} else if (entry.in_deco_calc) { | ||||
|  | @ -1390,13 +1390,13 @@ static std::vector<std::string> plot_string(const struct dive *d, const struct p | |||
| 		if (entry.surface_gf > 0.0) | ||||
| 			res.push_back(casprintf_loc(translate("gettextFromC", "Surface GF %.0f%%"), entry.surface_gf)); | ||||
| 		if (entry.ceiling.mm > 0) { | ||||
| 			depthvalue = get_depth_units(entry.ceiling.mm, NULL, &depth_unit); | ||||
| 			depthvalue = get_depth_units(entry.ceiling, NULL, &depth_unit); | ||||
| 			res.push_back(casprintf_loc(translate("gettextFromC", "Calculated ceiling %.1f%s"), depthvalue, depth_unit)); | ||||
| 			if (prefs.calcalltissues) { | ||||
| 				int k; | ||||
| 				for (k = 0; k < 16; k++) { | ||||
| 					if (entry.ceilings[k].mm > 0) { | ||||
| 						depthvalue = get_depth_units(entry.ceilings[k].mm, NULL, &depth_unit); | ||||
| 						depthvalue = get_depth_units(entry.ceilings[k], NULL, &depth_unit); | ||||
| 						res.push_back(casprintf_loc(translate("gettextFromC", "Tissue %.0fmin: %.1f%s"), buehlmann_N2_t_halflife[k], depthvalue, depth_unit)); | ||||
| 					} | ||||
| 				} | ||||
|  | @ -1409,7 +1409,7 @@ static std::vector<std::string> plot_string(const struct dive *d, const struct p | |||
| 		res.push_back(casprintf_loc(translate("gettextFromC", "heart rate: %d"), entry.heartbeat)); | ||||
| 	if (entry.bearing >= 0) | ||||
| 		res.push_back(casprintf_loc(translate("gettextFromC", "bearing: %d"), entry.bearing)); | ||||
| 	if (entry.running_sum) { | ||||
| 	if (entry.running_sum.mm > 0) { | ||||
| 		depthvalue = get_depth_units(entry.running_sum / entry.sec, NULL, &depth_unit); | ||||
| 		res.push_back(casprintf_loc(translate("gettextFromC", "mean depth to here %.1f%s"), depthvalue, depth_unit)); | ||||
| 	} | ||||
|  | @ -1458,7 +1458,8 @@ std::vector<std::string> compare_samples(const struct dive *d, const struct plot | |||
| 	int max_asc_speed = 0; | ||||
| 	int max_desc_speed = 0; | ||||
| 
 | ||||
| 	int delta_depth = abs(start.depth.mm - stop.depth.mm); | ||||
| 	depth_t delta_depth = start.depth - stop.depth; | ||||
| 	delta_depth.mm = std::abs(delta_depth.mm); | ||||
| 	int delta_time = abs(start.sec - stop.sec); | ||||
| 	depth_t avg_depth; | ||||
| 	depth_t max_depth; | ||||
|  | @ -1527,13 +1528,13 @@ std::vector<std::string> compare_samples(const struct dive *d, const struct plot | |||
| 	depthvalue = get_depth_units(delta_depth, NULL, &depth_unit); | ||||
| 	l += space + casprintf_loc(translate("gettextFromC", "ΔD:%.1f%s"), depthvalue, depth_unit); | ||||
| 
 | ||||
| 	depthvalue = get_depth_units(min_depth.mm, NULL, &depth_unit); | ||||
| 	depthvalue = get_depth_units(min_depth, NULL, &depth_unit); | ||||
| 	l += space + casprintf_loc(translate("gettextFromC", "↓D:%.1f%s"), depthvalue, depth_unit); | ||||
| 
 | ||||
| 	depthvalue = get_depth_units(max_depth.mm, NULL, &depth_unit); | ||||
| 	depthvalue = get_depth_units(max_depth, NULL, &depth_unit); | ||||
| 	l += space + casprintf_loc(translate("gettextFromC", "↑D:%.1f%s"), depthvalue, depth_unit); | ||||
| 
 | ||||
| 	depthvalue = get_depth_units(avg_depth.mm, NULL, &depth_unit); | ||||
| 	depthvalue = get_depth_units(avg_depth, NULL, &depth_unit); | ||||
| 	l += space + casprintf_loc(translate("gettextFromC", "øD:%.1f%s"), depthvalue, depth_unit); | ||||
| 	res.push_back(l); | ||||
| 
 | ||||
|  |  | |||
|  | @ -53,7 +53,7 @@ struct plot_data { | |||
| 	int cns = 0; | ||||
| 	depth_t smoothed; | ||||
| 	int sac = 0; | ||||
| 	int running_sum = 0; | ||||
| 	depth_t running_sum; // strictly speaking not a depth, but depth × time. Might define a custom type for that based on a longer integer.
 | ||||
| 	struct gas_pressures pressures; | ||||
| 	// TODO: make pressure_t default to 0
 | ||||
| 	pressure_t o2pressure;  // for rebreathers, this is consensus measured po2, or setpoint otherwise. 0 for OC.
 | ||||
|  |  | |||
|  | @ -281,7 +281,7 @@ void put_HTML_depth(struct membuffer *b, const struct dive &dive, const char *pr | |||
| 		put_format(b, "%s--%s", pre, post); | ||||
| 		return; | ||||
| 	} | ||||
| 	value = get_depth_units(dive.maxdepth.mm, NULL, &unit); | ||||
| 	value = get_depth_units(dive.maxdepth, NULL, &unit); | ||||
| 
 | ||||
| 	switch (units_p->length) { | ||||
| 	case units::METERS: | ||||
|  |  | |||
|  | @ -83,7 +83,7 @@ static void put_pd(struct membuffer *b, const struct plot_info &pi, int idx) | |||
| 	put_int(b, entry.cns); | ||||
| 	put_int(b, entry.smoothed.mm); | ||||
| 	put_int(b, entry.sac); | ||||
| 	put_int(b, entry.running_sum); | ||||
| 	put_int(b, entry.running_sum.mm); | ||||
| 	put_double(b, entry.pressures.o2); | ||||
| 	put_double(b, entry.pressures.n2); | ||||
| 	put_double(b, entry.pressures.he); | ||||
|  | @ -199,7 +199,7 @@ static std::string format_st_event(const plot_data &entry, const plot_data &next | |||
| 	std::string format_string = prefs.subtitles_format_string; | ||||
| 	 | ||||
| 	replace_all(format_string, "[time]", format_string_std("%d:%02d", FRACTION_TUPLE(entry.sec, 60))); | ||||
| 	value = get_depth_units(entry.depth.mm, &decimals, &unit); | ||||
| 	value = get_depth_units(entry.depth, &decimals, &unit); | ||||
| 	replace_all(format_string, "[depth]", format_string_std("%02.2f %s", value, unit)); | ||||
| 	 | ||||
| 	if (entry.temperature) { | ||||
|  | @ -210,7 +210,7 @@ static std::string format_st_event(const plot_data &entry, const plot_data &next | |||
| 	} | ||||
| 
 | ||||
| 	if (entry.ceiling.mm > 0) { | ||||
| 		value = get_depth_units(entry.ceiling.mm, &decimals, &unit); | ||||
| 		value = get_depth_units(entry.ceiling, &decimals, &unit); | ||||
| 		replace_all(format_string,"[ceiling]", format_string_std("%02.2f %s", value, unit)); | ||||
| 	} else { | ||||
| 		replace_all(format_string, "[ceiling]", "");	 | ||||
|  | @ -245,7 +245,7 @@ static std::string format_st_event(const plot_data &entry, const plot_data &next | |||
| 	} | ||||
| 	 | ||||
| 	if (entry.stopdepth.mm > 0) { | ||||
| 		value = get_depth_units(entry.stopdepth.mm, &decimals, &unit); | ||||
| 		value = get_depth_units(entry.stopdepth, &decimals, &unit); | ||||
| 		replace_all(format_string, "[stopdepth]", format_string_std("%02.2f %s", value, unit)); | ||||
| 	} else { | ||||
| 		replace_all(format_string, "[stopdepth]", "");	 | ||||
|  | @ -297,28 +297,28 @@ static std::string format_st_event(const plot_data &entry, const plot_data &next | |||
| 	} | ||||
| 	 | ||||
| 	if (entry.mod.mm > 0) { | ||||
| 		value = get_depth_units(entry.mod.mm, &decimals, &unit); | ||||
| 		value = get_depth_units(entry.mod, &decimals, &unit); | ||||
| 		replace_all(format_string, "[mod]", format_string_std("%02.2f %s", value, unit)); | ||||
| 	} else { | ||||
| 		replace_all(format_string, "[mod]", "");	 | ||||
| 	} | ||||
| 	 | ||||
| 	if (entry.ead.mm > 0) { | ||||
| 		value = get_depth_units(entry.ead.mm, &decimals, &unit); | ||||
| 		value = get_depth_units(entry.ead, &decimals, &unit); | ||||
| 		replace_all(format_string, "[ead]", format_string_std("%02.2f %s", value, unit)); | ||||
| 	} else { | ||||
| 		replace_all(format_string, "[ead]", "");	 | ||||
| 	} | ||||
| 
 | ||||
| 	if (entry.end.mm > 0) { | ||||
| 		value = get_depth_units(entry.end.mm, &decimals, &unit); | ||||
| 		value = get_depth_units(entry.end, &decimals, &unit); | ||||
| 		replace_all(format_string, "[end]", format_string_std("%02.2f %s", value, unit)); | ||||
| 	} else { | ||||
| 		replace_all(format_string, "[end]", "");	 | ||||
| 	} | ||||
| 	 | ||||
| 	if (entry.eadd.mm > 0) { | ||||
| 		value = get_depth_units(entry.eadd.mm, &decimals, &unit); | ||||
| 		value = get_depth_units(entry.eadd, &decimals, &unit); | ||||
| 		replace_all(format_string, "[eadd]", format_string_std("%02.2f %s", value, unit)); | ||||
| 	} else { | ||||
| 		replace_all(format_string, "[eadd]", "");	 | ||||
|  | @ -359,7 +359,7 @@ static std::string format_st_event(const plot_data &entry, const plot_data &next | |||
| 	} | ||||
| 	 | ||||
| 	if (entry.stopdepth_calc.mm > 0) { | ||||
| 		value = get_depth_units(entry.stopdepth_calc.mm, &decimals, &unit); | ||||
| 		value = get_depth_units(entry.stopdepth_calc, &decimals, &unit); | ||||
| 		replace_all(format_string, "[stopdepth_calc]", format_string_std("%02.2f %s", value, unit)); | ||||
| 	} else { | ||||
| 		replace_all(format_string, "[stopdepth_calc]", "");	 | ||||
|  |  | |||
|  | @ -95,7 +95,7 @@ depth_t units_to_depth(double depth) | |||
| 	return internaldepth; | ||||
| } | ||||
| 
 | ||||
| double get_depth_units(int mm, int *frac, const char **units) | ||||
| double get_depth_units(depth_t depth, int *frac, const char **units) | ||||
| { | ||||
| 	int decimals; | ||||
| 	double d; | ||||
|  | @ -105,12 +105,12 @@ double get_depth_units(int mm, int *frac, const char **units) | |||
| 	switch (units_p->length) { | ||||
| 	case units::METERS: | ||||
| 	default: | ||||
| 		d = mm / 1000.0; | ||||
| 		d = depth.mm / 1000.0; | ||||
| 		unit = translate("gettextFromC", "m"); | ||||
| 		decimals = d < 20; | ||||
| 		break; | ||||
| 	case units::FEET: | ||||
| 		d = mm_to_feet(mm); | ||||
| 		d = mm_to_feet(depth.mm); | ||||
| 		unit = translate("gettextFromC", "ft"); | ||||
| 		decimals = 0; | ||||
| 		break; | ||||
|  |  | |||
|  | @ -498,7 +498,7 @@ extern const struct units SI_units, IMPERIAL_units; | |||
| extern const struct units *get_units(); | ||||
| 
 | ||||
| extern int get_pressure_units(int mb, const char **units); | ||||
| extern double get_depth_units(int mm, int *frac, const char **units); | ||||
| extern double get_depth_units(depth_t mm, int *frac, const char **units); | ||||
| extern double get_volume_units(unsigned int ml, int *frac, const char **units); | ||||
| extern double get_temp_units(unsigned int mk, const char **units); | ||||
| extern double get_weight_units(unsigned int grams, int *frac, const char **units); | ||||
|  |  | |||
|  | @ -753,7 +753,7 @@ void ConfigureDiveComputerDialog::populateDeviceDetailsSuuntoVyper() | |||
| 	deviceDetails.lightEnabled = ui.lightCheckBox->isChecked(); | ||||
| 	deviceDetails.light = ui.lightSpinBox->value(); | ||||
| 	deviceDetails.alarmDepthEnabled = ui.alarmDepthCheckBox->isChecked(); | ||||
| 	deviceDetails.alarmDepth = units_to_depth(ui.alarmDepthDoubleSpinBox->value()).mm; | ||||
| 	deviceDetails.alarmDepth = units_to_depth(ui.alarmDepthDoubleSpinBox->value()); | ||||
| 	deviceDetails.alarmTimeEnabled = ui.alarmTimeCheckBox->isChecked(); | ||||
| 	deviceDetails.alarmTime = ui.alarmTimeSpinBox->value(); | ||||
| } | ||||
|  |  | |||
|  | @ -163,7 +163,7 @@ void DivePlannerWidget::settingsChanged() | |||
| 	} | ||||
| 	ui.tableWidget->view()->setItemDelegateForColumn(DivePlannerPointsModel::DEPTH, new SpinBoxDelegate(0, maxDepth, 1, this)); | ||||
| 	ui.atmHeight->blockSignals(true); | ||||
| 	ui.atmHeight->setValue((int) get_depth_units(pressure_to_altitude(DivePlannerPointsModel::instance()->getSurfacePressure()).mm, NULL, NULL)); | ||||
| 	ui.atmHeight->setValue((int) get_depth_units(pressure_to_altitude(DivePlannerPointsModel::instance()->getSurfacePressure()), NULL, NULL)); | ||||
| 	ui.atmHeight->blockSignals(false); | ||||
| 
 | ||||
| 	ui.dateEdit->setDisplayFormat(QString::fromStdString(prefs.date_format)); | ||||
|  | @ -175,7 +175,7 @@ void DivePlannerWidget::atmPressureChanged(int pressure_in_mbar) | |||
| 	pressure_t pressure { .mbar = pressure_in_mbar }; | ||||
| 	DivePlannerPointsModel::instance()->setSurfacePressure(pressure); | ||||
| 	ui.atmHeight->blockSignals(true); | ||||
| 	ui.atmHeight->setValue((int) get_depth_units(pressure_to_altitude(pressure).mm, NULL, NULL)); | ||||
| 	ui.atmHeight->setValue((int) get_depth_units(pressure_to_altitude(pressure), NULL, NULL)); | ||||
| 	ui.atmHeight->blockSignals(false); | ||||
| } | ||||
| 
 | ||||
|  | @ -457,7 +457,7 @@ void PlannerSettingsWidget::updateUnitsUI() | |||
| 	ui.ascRateStops->setValue(plannerModel->ascratestopsDisplay()); | ||||
| 	ui.ascRateLast6m->setValue(plannerModel->ascratelast6mDisplay()); | ||||
| 	ui.descRate->setValue(lrint(plannerModel->descrateDisplay())); | ||||
| 	ui.bestmixEND->setValue(lrint(get_depth_units(prefs.bestmixend.mm, NULL, NULL))); | ||||
| 	ui.bestmixEND->setValue(lrint(get_depth_units(prefs.bestmixend, NULL, NULL))); | ||||
| } | ||||
| 
 | ||||
| PlannerSettingsWidget::~PlannerSettingsWidget() | ||||
|  |  | |||
|  | @ -142,7 +142,8 @@ void DiveEventItem::setupToolTipString(struct gasmix lastgasmix) | |||
| 			name += QString(": %1bar").arg((double)value / 1000, 0, 'f', 1); | ||||
| 		} else if (type == SAMPLE_EVENT_CEILING && ev.name == "planned waypoint above ceiling") { | ||||
| 			const char *depth_unit; | ||||
| 			double depth_value = get_depth_units(value*1000, NULL, &depth_unit); | ||||
| 			depth_t depth { .mm = value * 1000 }; | ||||
| 			double depth_value = get_depth_units(depth, NULL, &depth_unit); | ||||
| 			name += QString(": %1%2").arg((int) round(depth_value)).arg(depth_unit); | ||||
| 		} else { | ||||
| 			name += QString(": %1").arg(value); | ||||
|  |  | |||
|  | @ -450,9 +450,9 @@ std::pair<double,double> DiveMeanDepthItem::getMeanDepth(int i) const | |||
| { | ||||
| 	for ( ; i >= 0; --i) { | ||||
| 		const plot_data &entry = pInfo.entry[i]; | ||||
| 		if (entry.running_sum > 0) | ||||
| 		if (entry.running_sum.mm > 0) | ||||
| 			return { static_cast<double>(entry.sec), | ||||
| 				 static_cast<double>(entry.running_sum) / entry.sec }; | ||||
| 				 static_cast<double>(entry.running_sum.mm) / entry.sec }; | ||||
| 	} | ||||
| 	return { 0.0, 0.0 }; | ||||
| } | ||||
|  | @ -462,9 +462,9 @@ std::pair<double,double> DiveMeanDepthItem::getNextMeanDepth(int first) const | |||
| 	int last = pInfo.nr; | ||||
| 	for (int i = first + 1; i < last;  ++i) { | ||||
| 		const plot_data &entry = pInfo.entry[i]; | ||||
| 		if (entry.running_sum > 0) | ||||
| 		if (entry.running_sum.mm > 0) | ||||
| 			return { static_cast<double>(entry.sec), | ||||
| 				 static_cast<double>(entry.running_sum) / entry.sec }; | ||||
| 				 static_cast<double>(entry.running_sum.mm) / entry.sec }; | ||||
| 	} | ||||
| 	return getMeanDepth(first); | ||||
| } | ||||
|  |  | |||
|  | @ -117,7 +117,7 @@ ProfileScene::ProfileScene(double dpr, bool printMode, bool isGrayscale) : | |||
| 							[](const plot_data &item) { return (double)item.temperature; }, | ||||
| 							1, dpr)), | ||||
| 	meanDepthItem(createItem<DiveMeanDepthItem>(*profileYAxis, | ||||
| 						    [](const plot_data &item) { return (double)item.running_sum; }, | ||||
| 						    [](const plot_data &item) { return (double)item.running_sum.mm; }, | ||||
| 						    1, dpr)), | ||||
| 	gasPressureItem(createItem<DiveGasPressureItem>(*cylinderPressureAxis, | ||||
| 							[](const plot_data &item) { return 0.0; }, // unused
 | ||||
|  |  | |||
|  | @ -296,7 +296,7 @@ QVariant DivePlannerPointsModel::data(const QModelIndex &index, int role) const | |||
| 		case CCSETPOINT: | ||||
| 			return (divemode == CCR) ? (double)(p.setpoint / 1000.0) : QVariant(); | ||||
| 		case DEPTH: | ||||
| 			return int_cast<int>(get_depth_units(p.depth.mm, NULL, NULL)); | ||||
| 			return int_cast<int>(get_depth_units(p.depth, NULL, NULL)); | ||||
| 		case RUNTIME: | ||||
| 			return p.time / 60; | ||||
| 		case DURATION: | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue