diff options
author | Berthold Stoeger <bstoeger@mail.tuwien.ac.at> | 2018-07-17 23:05:03 +0200 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2018-07-17 15:20:52 -0700 |
commit | 2c6b1a99af103232d420a09023e9e0e6ccee9084 (patch) | |
tree | 70f38609c2a7a8e09c986c0bdfbd7d2695072501 | |
parent | 4931b5a8e61ab40d393a13742bec4e26fd4da155 (diff) | |
download | subsurface-2c6b1a99af103232d420a09023e9e0e6ccee9084.tar.gz |
Cleanup: simplify dive_getUniqID()
dive_getUniqID() is used to create unique dive ids, which are
stable during application lifetime. It was passed a dive, checked
that the id was not set (if it was that it is know to the application)
and set a new id (in contradiction to its name!) if it hadn't any.
There were three callers:
alloc_dive(): called the function on a zeroed dive struct.
fixup_dive(): called the function only if the dive had a 0 id.
MainWindow::setupForAddAndPlan(): called the function on a zeroed dive
struct.
Thus, in all three callers the id is guaranteed to be zero and
the whole keeping-track-of-ids logic is moot. Remove the logic,
don't pass a dive struct to dive_getUniqID() and move the function
to the C-backend.
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
-rw-r--r-- | core/dive.c | 13 | ||||
-rw-r--r-- | core/dive.h | 2 | ||||
-rw-r--r-- | core/qthelper.cpp | 25 | ||||
-rw-r--r-- | desktop-widgets/mainwindow.cpp | 2 |
4 files changed, 13 insertions, 29 deletions
diff --git a/core/dive.c b/core/dive.c index 78263dfab..c977183a3 100644 --- a/core/dive.c +++ b/core/dive.c @@ -454,6 +454,15 @@ double get_weight_units(unsigned int grams, int *frac, const char **units) return value; } +// we need this to be uniq. oh, and it has no meaning whatsoever +// - that's why we have the silly initial number and increment by 3 :-) +int dive_getUniqID() +{ + static int maxId = 83529; + maxId += 3; + return maxId; +} + struct dive *alloc_dive(void) { struct dive *dive; @@ -462,7 +471,7 @@ struct dive *alloc_dive(void) if (!dive) exit(1); memset(dive, 0, sizeof(*dive)); - dive->id = dive_getUniqID(dive); + dive->id = dive_getUniqID(); return dive; } @@ -1784,7 +1793,7 @@ struct dive *fixup_dive(struct dive *dive) /* we should always have a uniq ID as that gets assigned during alloc_dive(), * but we want to make sure... */ if (!dive->id) - dive->id = dive_getUniqID(dive); + dive->id = dive_getUniqID(); return dive; } diff --git a/core/dive.h b/core/dive.h index 1e694e271..8458a3ae3 100644 --- a/core/dive.h +++ b/core/dive.h @@ -757,7 +757,7 @@ extern int legacy_format_o2pressures(struct dive *dive, struct divecomputer *dc) extern void sort_table(struct dive_table *table); extern struct dive *fixup_dive(struct dive *dive); extern void fixup_dc_duration(struct divecomputer *dc); -extern int dive_getUniqID(struct dive *d); +extern int dive_getUniqID(); extern unsigned int dc_airtemp(struct divecomputer *dc); extern unsigned int dc_watertemp(struct divecomputer *dc); extern int split_dive(struct dive *); diff --git a/core/qthelper.cpp b/core/qthelper.cpp index 6ee0cb6ae..fd9a8212b 100644 --- a/core/qthelper.cpp +++ b/core/qthelper.cpp @@ -288,31 +288,6 @@ QList<int> getDivesInTrip(dive_trip_t *trip) return ret; } -// we need this to be uniq, but also make sure -// it doesn't change during the life time of a Subsurface session -// oh, and it has no meaning whatsoever - that's why we have the -// silly initial number and increment by 3 :-) -int dive_getUniqID(struct dive *d) -{ - static QSet<int> ids; - static int maxId = 83529; - - int id = d->id; - if (id) { - if (!ids.contains(id)) { - qDebug() << "WTF - only I am allowed to create IDs"; - ids.insert(id); - } - return id; - } - maxId += 3; - id = maxId; - Q_ASSERT(!ids.contains(id)); - ids.insert(id); - return id; -} - - static xmlDocPtr get_stylesheet_doc(const xmlChar *uri, xmlDictPtr, int, void *, xsltLoadType) { QFile f(QLatin1String(":/xslt/") + (const char *)uri); diff --git a/desktop-widgets/mainwindow.cpp b/desktop-widgets/mainwindow.cpp index ff525eb00..a9423e053 100644 --- a/desktop-widgets/mainwindow.cpp +++ b/desktop-widgets/mainwindow.cpp @@ -982,7 +982,7 @@ void MainWindow::setupForAddAndPlan(const char *model) // clean out the dive and give it an id and the correct dc model clear_dive(&displayed_dive); clear_dive_site(&displayed_dive_site); - displayed_dive.id = dive_getUniqID(&displayed_dive); + displayed_dive.id = dive_getUniqID(); displayed_dive.when = QDateTime::currentMSecsSinceEpoch() / 1000L + gettimezoneoffset() + 3600; displayed_dive.dc.model = strdup(model); // don't translate! this is stored in the XML file dc_number = 1; |