mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Dive sites: prepare for dive site ref-counting
Add a dive site table to each dive site to keep track of dives that have been added to a dive site. Add two functions to add dives to / remove dives from dive sites. Since dive sites now contain a dive table, the order of includes had to be changed: "divesite.h" now includes "dive.h" and not vice-versa. This caused some include churn. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
f2cdca7bcc
commit
c22fd9f4fd
38 changed files with 75 additions and 29 deletions
|
|
@ -382,6 +382,29 @@ void purge_empty_dive_sites(struct dive_site_table *ds_table)
|
|||
}
|
||||
}
|
||||
|
||||
void add_dive_to_dive_site(struct dive *d, struct dive_site *ds)
|
||||
{
|
||||
int idx;
|
||||
if (d->dive_site == ds)
|
||||
return;
|
||||
if (d->dive_site)
|
||||
fprintf(stderr, "Warning: adding dive that already belongs to a dive site to a different site\n");
|
||||
idx = dive_table_get_insertion_index(&ds->dives, d);
|
||||
add_to_dive_table(&ds->dives, idx, d);
|
||||
d->dive_site = ds;
|
||||
}
|
||||
|
||||
struct dive_site *unregister_dive_from_dive_site(struct dive *d)
|
||||
{
|
||||
struct dive_site *ds = d->dive_site;
|
||||
if (!ds)
|
||||
return NULL;
|
||||
remove_dive(&ds->dives, d);
|
||||
d->dive_site = NULL;
|
||||
return ds;
|
||||
}
|
||||
|
||||
/* Assign arbitrary UUIDs to dive sites. This is called by before writing the dive log to XML or git. */
|
||||
static int compare_sites(const void *_a, const void *_b)
|
||||
{
|
||||
const struct dive_site *a = (const struct dive_site *)*(void **)_a;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue