From 6f25713408797bb5563af730ca991bc5ec474e33 Mon Sep 17 00:00:00 2001 From: Dirk Hohndel Date: Fri, 9 Jan 2015 14:35:31 -0800 Subject: Add more infrastructure for a separate dive table This will allow us to download the dives from the dive computer into a separate table just for that purpose and not into the main dive_table. I really dislike the code that's in place that dates back to the very earliest code written for Subsurface. Dumping the dives straight into the main dive_table seems really stupid to me. Signed-off-by: Dirk Hohndel --- dive.h | 10 ++++++++++ parse-xml.c | 12 +++++++++++- qt-ui/subsurfacewebservices.cpp | 9 --------- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/dive.h b/dive.h index 5648f7ed5..d99f90073 100644 --- a/dive.h +++ b/dive.h @@ -506,6 +506,13 @@ static inline struct dive *get_dive(int nr) return dive_table.dives[nr]; } +static inline struct dive *get_dive_from_table(int nr, struct dive_table *dt) +{ + if (nr >= dt->nr || nr < 0) + return NULL; + return dt->dives[nr]; +} + static inline unsigned int number_of_computers(struct dive *dive) { unsigned int total_number = 0; @@ -677,12 +684,15 @@ extern timestamp_t utc_mktime(struct tm *tm); extern void utc_mkdate(timestamp_t, struct tm *tm); extern struct dive *alloc_dive(void); +extern void record_dive_to_table(struct dive *dive, struct dive_table *table); extern void record_dive(struct dive *dive); extern void clear_dive(struct dive *dive); extern void copy_dive(struct dive *s, struct dive *d); extern void selective_copy_dive(struct dive *s, struct dive *d, struct dive_components what, bool clear); extern struct dive *clone_dive(struct dive *s); +extern void clear_table(struct dive_table *table); + extern struct sample *prepare_sample(struct divecomputer *dc); extern void finish_sample(struct divecomputer *dc); diff --git a/parse-xml.c b/parse-xml.c index fe13f66f2..bd6e21bec 100644 --- a/parse-xml.c +++ b/parse-xml.c @@ -48,10 +48,20 @@ int trimspace(char *buffer) { return size; // return string length } +/* + * Clear a dive_table + */ +void clear_table(struct dive_table *table) +{ + for (int i = 0; i < table->nr; i++) + free(table->dives[i]); + table->nr = 0; +} + /* * Add a dive into the dive_table array */ -static void record_dive_to_table(struct dive *dive, struct dive_table *table) +void record_dive_to_table(struct dive *dive, struct dive_table *table) { assert(table != NULL); int nr = table->nr, allocated = table->allocated; diff --git a/qt-ui/subsurfacewebservices.cpp b/qt-ui/subsurfacewebservices.cpp index 646e0ebb3..c98413d12 100644 --- a/qt-ui/subsurfacewebservices.cpp +++ b/qt-ui/subsurfacewebservices.cpp @@ -99,15 +99,6 @@ static bool merge_locations_into_dives(void) return changed > 0; } -//TODO: C-code. -static void clear_table(struct dive_table *table) -{ - int i; - for (i = 0; i < table->nr; i++) - free(table->dives[i]); - table->nr = 0; -} - // TODO: This looks like should be ported to C code. or a big part of it. bool DivelogsDeWebServices::prepare_dives_for_divelogs(const QString &tempfile, const bool selected) { -- cgit v1.2.3-70-g09d2