mirror of
				https://github.com/subsurface/subsurface.git
				synced 2025-02-19 22:16:15 +00:00 
			
		
		
		
	Cleanup: simplify dive_getUniqID()
dive_getUniqID() is used to create unique dive ids, which are stable during application lifetime. It was passed a dive, checked that the id was not set (if it was that it is know to the application) and set a new id (in contradiction to its name!) if it hadn't any. There were three callers: alloc_dive(): called the function on a zeroed dive struct. fixup_dive(): called the function only if the dive had a 0 id. MainWindow::setupForAddAndPlan(): called the function on a zeroed dive struct. Thus, in all three callers the id is guaranteed to be zero and the whole keeping-track-of-ids logic is moot. Remove the logic, don't pass a dive struct to dive_getUniqID() and move the function to the C-backend. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
		
							parent
							
								
									4931b5a8e6
								
							
						
					
					
						commit
						2c6b1a99af
					
				
					 4 changed files with 13 additions and 29 deletions
				
			
		
							
								
								
									
										13
									
								
								core/dive.c
									
										
									
									
									
								
							
							
						
						
									
										13
									
								
								core/dive.c
									
										
									
									
									
								
							|  | @ -454,6 +454,15 @@ double get_weight_units(unsigned int grams, int *frac, const char **units) | ||||||
| 	return value; | 	return value; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // we need this to be uniq. oh, and it has no meaning whatsoever
 | ||||||
|  | // - that's why we have the silly initial number and increment by 3 :-)
 | ||||||
|  | int dive_getUniqID() | ||||||
|  | { | ||||||
|  | 	static int maxId = 83529; | ||||||
|  | 	maxId += 3; | ||||||
|  | 	return maxId; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| struct dive *alloc_dive(void) | struct dive *alloc_dive(void) | ||||||
| { | { | ||||||
| 	struct dive *dive; | 	struct dive *dive; | ||||||
|  | @ -462,7 +471,7 @@ struct dive *alloc_dive(void) | ||||||
| 	if (!dive) | 	if (!dive) | ||||||
| 		exit(1); | 		exit(1); | ||||||
| 	memset(dive, 0, sizeof(*dive)); | 	memset(dive, 0, sizeof(*dive)); | ||||||
| 	dive->id = dive_getUniqID(dive); | 	dive->id = dive_getUniqID(); | ||||||
| 	return dive; | 	return dive; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -1784,7 +1793,7 @@ struct dive *fixup_dive(struct dive *dive) | ||||||
| 	/* we should always have a uniq ID as that gets assigned during alloc_dive(),
 | 	/* we should always have a uniq ID as that gets assigned during alloc_dive(),
 | ||||||
| 	 * but we want to make sure... */ | 	 * but we want to make sure... */ | ||||||
| 	if (!dive->id) | 	if (!dive->id) | ||||||
| 		dive->id = dive_getUniqID(dive); | 		dive->id = dive_getUniqID(); | ||||||
| 
 | 
 | ||||||
| 	return dive; | 	return dive; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -757,7 +757,7 @@ extern int legacy_format_o2pressures(struct dive *dive, struct divecomputer *dc) | ||||||
| extern void sort_table(struct dive_table *table); | extern void sort_table(struct dive_table *table); | ||||||
| extern struct dive *fixup_dive(struct dive *dive); | extern struct dive *fixup_dive(struct dive *dive); | ||||||
| extern void fixup_dc_duration(struct divecomputer *dc); | extern void fixup_dc_duration(struct divecomputer *dc); | ||||||
| extern int dive_getUniqID(struct dive *d); | extern int dive_getUniqID(); | ||||||
| extern unsigned int dc_airtemp(struct divecomputer *dc); | extern unsigned int dc_airtemp(struct divecomputer *dc); | ||||||
| extern unsigned int dc_watertemp(struct divecomputer *dc); | extern unsigned int dc_watertemp(struct divecomputer *dc); | ||||||
| extern int split_dive(struct dive *); | extern int split_dive(struct dive *); | ||||||
|  |  | ||||||
|  | @ -288,31 +288,6 @@ QList<int> getDivesInTrip(dive_trip_t *trip) | ||||||
| 	return ret; | 	return ret; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // we need this to be uniq, but also make sure
 |  | ||||||
| // it doesn't change during the life time of a Subsurface session
 |  | ||||||
| // oh, and it has no meaning whatsoever - that's why we have the
 |  | ||||||
| // silly initial number and increment by 3 :-)
 |  | ||||||
| int dive_getUniqID(struct dive *d) |  | ||||||
| { |  | ||||||
| 	static QSet<int> ids; |  | ||||||
| 	static int maxId = 83529; |  | ||||||
| 
 |  | ||||||
| 	int id = d->id; |  | ||||||
| 	if (id) { |  | ||||||
| 		if (!ids.contains(id)) { |  | ||||||
| 			qDebug() << "WTF - only I am allowed to create IDs"; |  | ||||||
| 			ids.insert(id); |  | ||||||
| 		} |  | ||||||
| 		return id; |  | ||||||
| 	} |  | ||||||
| 	maxId += 3; |  | ||||||
| 	id = maxId; |  | ||||||
| 	Q_ASSERT(!ids.contains(id)); |  | ||||||
| 	ids.insert(id); |  | ||||||
| 	return id; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| static xmlDocPtr get_stylesheet_doc(const xmlChar *uri, xmlDictPtr, int, void *, xsltLoadType) | static xmlDocPtr get_stylesheet_doc(const xmlChar *uri, xmlDictPtr, int, void *, xsltLoadType) | ||||||
| { | { | ||||||
| 	QFile f(QLatin1String(":/xslt/") + (const char *)uri); | 	QFile f(QLatin1String(":/xslt/") + (const char *)uri); | ||||||
|  |  | ||||||
|  | @ -982,7 +982,7 @@ void MainWindow::setupForAddAndPlan(const char *model) | ||||||
| 	// clean out the dive and give it an id and the correct dc model
 | 	// clean out the dive and give it an id and the correct dc model
 | ||||||
| 	clear_dive(&displayed_dive); | 	clear_dive(&displayed_dive); | ||||||
| 	clear_dive_site(&displayed_dive_site); | 	clear_dive_site(&displayed_dive_site); | ||||||
| 	displayed_dive.id = dive_getUniqID(&displayed_dive); | 	displayed_dive.id = dive_getUniqID(); | ||||||
| 	displayed_dive.when = QDateTime::currentMSecsSinceEpoch() / 1000L + gettimezoneoffset() + 3600; | 	displayed_dive.when = QDateTime::currentMSecsSinceEpoch() / 1000L + gettimezoneoffset() + 3600; | ||||||
| 	displayed_dive.dc.model = strdup(model); // don't translate! this is stored in the XML file
 | 	displayed_dive.dc.model = strdup(model); // don't translate! this is stored in the XML file
 | ||||||
| 	dc_number = 1; | 	dc_number = 1; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue