diff options
author | Dirk Hohndel <dirk@hohndel.org> | 2015-02-12 11:19:05 -0800 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2015-02-12 11:19:05 -0800 |
commit | e720c82aa1abac491ee48f39a69fe88620115bfc (patch) | |
tree | 60bf01530c1417288938ff74633a4ea45abc7dae /divesite.c | |
parent | dcfda29da6d5539c602935f3518749942dad2153 (diff) | |
download | subsurface-e720c82aa1abac491ee48f39a69fe88620115bfc.tar.gz |
Some dive site helper functions
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'divesite.c')
-rw-r--r-- | divesite.c | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/divesite.c b/divesite.c index 1d3bb1c0d..21efaf2e6 100644 --- a/divesite.c +++ b/divesite.c @@ -1,2 +1,59 @@ /* divesite.c */ #include "divesite.h" +#include "dive.h" + +struct dive_site_table dive_site_table; + +/* try to create a uniqe ID - fingers crossed */ +static uint32_t dive_site_getUniqId() +{ + uint32_t id = 0; + + while (id == 0 || get_dive_site_by_uuid(id)) + id = random() + random(); + + return id; +} + +struct dive_site *alloc_dive_site() +{ + int nr = dive_site_table.nr, allocated = dive_site_table.allocated; + struct dive_site **sites = dive_site_table.dive_sites; + + if (nr >= allocated) { + allocated = (nr + 32) * 3 / 2; + sites = realloc(sites, allocated * sizeof(struct dive_site *)); + if (!sites) + exit(1); + dive_site_table.dive_sites = sites; + dive_site_table.allocated = allocated; + } + struct dive_site *ds = calloc(1, sizeof(*ds)); + if (!ds) + exit(1); + sites[nr] = ds; + dive_site_table.nr = nr + 1; + return ds; +} + +/* allocate a new site and add it to the table */ +uint32_t create_dive_site(const char *name, degrees_t latitude, degrees_t longitude) +{ + struct dive_site *ds = alloc_dive_site(); + ds->uuid = dive_site_getUniqId(); + ds->name = copy_string(name); + ds->latitude = latitude; + ds->longitude = longitude; + + return ds->uuid; +} + +/* this either returns the uuid for a site with that name or creates an entry */ +uint32_t dive_site_uuid_by_name(const char *name) +{ + uint32_t id = get_dive_site_uuid_by_name(name); + if (id == 0) + id = create_dive_site(name, (degrees_t){0}, (degrees_t){0}); + + return id; +} |