Add dive site data structure

This leaves location and gps coordinates in the struct dive to allow a
step by step migration.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Dirk Hohndel 2015-02-11 11:22:00 -08:00
parent 9edb7811ef
commit dcfda29da6
4 changed files with 52 additions and 0 deletions

1
dive.h
View file

@ -319,6 +319,7 @@ struct dive {
bool downloaded;
timestamp_t when;
char *location;
uint32_t dive_site_uuid;
char *notes;
char *divemaster, *buddy;
int rating;

2
divesite.c Normal file
View file

@ -0,0 +1,2 @@
/* divesite.c */
#include "divesite.h"

47
divesite.h Normal file
View file

@ -0,0 +1,47 @@
#ifndef DIVESITE_H
#define DIVESITE_H
#include "units.h"
#include <stdlib.h>
struct dive_site
{
uint32_t uuid;
char *name;
degrees_t latitude, longitude;
char *description;
char *notes;
};
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];
}
static inline struct dive_site *get_dive_site_by_uuid(uint32_t uuid)
{
for (int i = 0; i < dive_site_table.nr; i++)
if (get_dive_site(i)->uuid == uuid)
return get_dive_site(i);
return NULL;
}
/* there could be multiple sites of the same name - return the first one */
static inline struct dive_site *get_dive_site_by_name(const char *name)
{
for (int i = 0; i < dive_site_table.nr; i++)
if (get_dive_site(i)->name == name)
return get_dive_site(i);
return NULL;
}
#endif // DIVESITE_H

View file

@ -29,6 +29,7 @@ HEADERS = \
display.h \
dive.h \
divelist.h \
divesite.h \
file.h \
gettextfromc.h \
gettext.h \
@ -119,6 +120,7 @@ SOURCES = \
device.c \
dive.c \
divelist.c \
divesite.c \
equipment.c \
file.c \
gettextfromc.cpp \