mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Dive site: add dive site ref-counting
Instead of setting dive->dive_site directly, call the add_dive_to_dive_site() and unregister_dive_from_dive_site() functions. In the parser this turned out to be a bit tricky. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
c22fd9f4fd
commit
e2df38d868
19 changed files with 121 additions and 75 deletions
|
@ -339,7 +339,8 @@ void merge_dive_sites(struct dive_site *ref, struct dive_site *dive_sites[], int
|
|||
for_each_dive(curr_dive, d) {
|
||||
if (d->dive_site != dive_sites[i] )
|
||||
continue;
|
||||
d->dive_site = ref;
|
||||
unregister_dive_from_dive_site(d);
|
||||
add_dive_to_dive_site(d, ref);
|
||||
invalidate_dive_cache(d);
|
||||
}
|
||||
}
|
||||
|
@ -377,7 +378,7 @@ void purge_empty_dive_sites(struct dive_site_table *ds_table)
|
|||
continue;
|
||||
for_each_dive(j, d) {
|
||||
if (d->dive_site == ds)
|
||||
d->dive_site = NULL;
|
||||
unregister_dive_from_dive_site(d);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -387,8 +388,10 @@ 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)
|
||||
if (d->dive_site) {
|
||||
fprintf(stderr, "Warning: adding dive that already belongs to a dive site to a different site\n");
|
||||
unregister_dive_from_dive_site(d);
|
||||
}
|
||||
idx = dive_table_get_insertion_index(&ds->dives, d);
|
||||
add_to_dive_table(&ds->dives, idx, d);
|
||||
d->dive_site = ds;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue