| 
									
										
										
										
											2017-04-27 20:24:53 +02:00
										 |  |  | // SPDX-License-Identifier: GPL-2.0
 | 
					
						
							| 
									
										
										
										
											2015-02-11 11:22:00 -08:00
										 |  |  | #ifndef DIVESITE_H
 | 
					
						
							|  |  |  | #define DIVESITE_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "units.h"
 | 
					
						
							| 
									
										
										
										
											2015-07-01 12:28:15 -07:00
										 |  |  | #include "taxonomy.h"
 | 
					
						
							| 
									
										
										
										
											2015-02-11 11:22:00 -08:00
										 |  |  | #include <stdlib.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-12 01:59:16 -08:00
										 |  |  | #ifdef __cplusplus
 | 
					
						
							| 
									
										
										
										
											2015-10-07 19:34:02 -03:00
										 |  |  | #include <QString>
 | 
					
						
							| 
									
										
										
										
											2017-10-16 15:52:13 +02:00
										 |  |  | #include <QObject>
 | 
					
						
							| 
									
										
										
										
											2015-02-12 01:59:16 -08:00
										 |  |  | extern "C" { | 
					
						
							| 
									
										
										
										
											2015-02-13 22:53:03 -08:00
										 |  |  | #else
 | 
					
						
							|  |  |  | #include <stdbool.h>
 | 
					
						
							| 
									
										
										
										
											2015-02-12 01:59:16 -08:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-11 11:22:00 -08:00
										 |  |  | struct dive_site | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	uint32_t uuid; | 
					
						
							|  |  |  | 	char *name; | 
					
						
							|  |  |  | 	degrees_t latitude, longitude; | 
					
						
							|  |  |  | 	char *description; | 
					
						
							|  |  |  | 	char *notes; | 
					
						
							| 
									
										
										
										
											2015-07-01 12:28:15 -07:00
										 |  |  | 	struct taxonomy_data taxonomy; | 
					
						
							| 
									
										
										
										
											2015-02-11 11:22:00 -08:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct dive_site_table { | 
					
						
							|  |  |  | 	int nr, allocated; | 
					
						
							|  |  |  | 	struct dive_site **dive_sites; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern struct dive_site_table dive_site_table; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static inline struct dive_site *get_dive_site(int nr) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	if (nr >= dive_site_table.nr || nr < 0) | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	return dive_site_table.dive_sites[nr]; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-12 01:26:57 -08:00
										 |  |  | /* iterate over each dive site */ | 
					
						
							|  |  |  | #define for_each_dive_site(_i, _x) \
 | 
					
						
							|  |  |  | 	for ((_i) = 0; ((_x) = get_dive_site(_i)) != NULL; (_i)++) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-11 11:22:00 -08:00
										 |  |  | static inline struct dive_site *get_dive_site_by_uuid(uint32_t uuid) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2015-02-12 01:26:57 -08:00
										 |  |  | 	int i; | 
					
						
							|  |  |  | 	struct dive_site *ds; | 
					
						
							|  |  |  | 	for_each_dive_site (i, ds) | 
					
						
							|  |  |  | 		if (ds->uuid == uuid) | 
					
						
							| 
									
										
										
										
											2015-02-11 11:22:00 -08:00
										 |  |  | 			return get_dive_site(i); | 
					
						
							|  |  |  | 	return NULL; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-24 11:07:57 -07:00
										 |  |  | void dive_site_table_sort(); | 
					
						
							| 
									
										
										
										
											2015-09-29 12:58:16 -04:00
										 |  |  | struct dive_site *alloc_or_get_dive_site(uint32_t uuid); | 
					
						
							| 
									
										
										
										
											2015-07-18 13:34:05 -07:00
										 |  |  | int nr_of_dives_at_dive_site(uint32_t uuid, bool select_only); | 
					
						
							| 
									
										
										
										
											2015-07-15 21:25:26 -07:00
										 |  |  | bool is_dive_site_used(uint32_t uuid, bool select_only); | 
					
						
							| 
									
										
										
										
											2015-02-13 07:02:26 -08:00
										 |  |  | void delete_dive_site(uint32_t id); | 
					
						
							| 
									
										
										
										
											2015-08-24 10:37:18 -07:00
										 |  |  | uint32_t create_dive_site(const char *name, timestamp_t divetime); | 
					
						
							| 
									
										
										
										
											2015-08-30 01:00:22 +02:00
										 |  |  | uint32_t create_dive_site_from_current_dive(const char *name); | 
					
						
							| 
									
										
										
										
											2015-08-24 10:37:18 -07:00
										 |  |  | uint32_t create_dive_site_with_gps(const char *name, degrees_t latitude, degrees_t longitude, timestamp_t divetime); | 
					
						
							| 
									
										
										
										
											2015-02-13 01:14:33 -08:00
										 |  |  | uint32_t get_dive_site_uuid_by_name(const char *name, struct dive_site **dsp); | 
					
						
							|  |  |  | uint32_t get_dive_site_uuid_by_gps(degrees_t latitude, degrees_t longitude, struct dive_site **dsp); | 
					
						
							| 
									
										
										
										
											2015-08-30 10:10:07 -07:00
										 |  |  | uint32_t get_dive_site_uuid_by_gps_and_name(char *name, degrees_t latitude, degrees_t longitude); | 
					
						
							| 
									
										
										
										
											2015-06-10 11:45:34 -07:00
										 |  |  | uint32_t get_dive_site_uuid_by_gps_proximity(degrees_t latitude, degrees_t longitude, int distance, struct dive_site **dsp); | 
					
						
							| 
									
										
										
										
											2015-02-13 22:53:03 -08:00
										 |  |  | bool dive_site_is_empty(struct dive_site *ds); | 
					
						
							| 
									
										
										
										
											2017-10-02 22:57:26 -07:00
										 |  |  | void copy_dive_site_taxonomy(struct dive_site *orig, struct dive_site *copy); | 
					
						
							| 
									
										
										
										
											2015-06-26 14:40:12 -03:00
										 |  |  | void copy_dive_site(struct dive_site *orig, struct dive_site *copy); | 
					
						
							| 
									
										
										
										
											2017-02-19 14:11:37 -08:00
										 |  |  | void merge_dive_site(struct dive_site *a, struct dive_site *b); | 
					
						
							| 
									
										
										
										
											2015-06-26 15:03:34 -03:00
										 |  |  | void clear_dive_site(struct dive_site *ds); | 
					
						
							| 
									
										
										
										
											2015-07-14 11:35:04 -07:00
										 |  |  | unsigned int get_distance(degrees_t lat1, degrees_t lon1, degrees_t lat2, degrees_t lon2); | 
					
						
							| 
									
										
										
										
											2015-08-24 10:37:18 -07:00
										 |  |  | uint32_t find_or_create_dive_site_with_name(const char *name, timestamp_t divetime); | 
					
						
							| 
									
										
										
										
											2015-08-31 21:45:31 -03:00
										 |  |  | void merge_dive_sites(uint32_t ref, uint32_t *uuids, int count); | 
					
						
							| 
									
										
										
										
											2015-02-12 11:19:05 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-17 08:39:49 -07:00
										 |  |  | #define INVALID_DIVE_SITE_NAME "development use only - not a valid dive site name"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-12 01:59:16 -08:00
										 |  |  | #ifdef __cplusplus
 | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2017-10-16 15:52:13 +02:00
										 |  |  | QString constructLocationTags(struct dive_site *ds, bool for_maintab); | 
					
						
							| 
									
										
										
										
											2015-10-07 19:34:02 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-12 01:59:16 -08:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2015-08-31 21:35:17 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-11 11:22:00 -08:00
										 |  |  | #endif // DIVESITE_H
 |