mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
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>
This commit is contained in:
parent
4931b5a8e6
commit
2c6b1a99af
4 changed files with 13 additions and 29 deletions
13
core/dive.c
13
core/dive.c
|
@ -454,6 +454,15 @@ double get_weight_units(unsigned int grams, int *frac, const char **units)
|
||||||
return value;
|
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 *alloc_dive(void)
|
||||||
{
|
{
|
||||||
struct dive *dive;
|
struct dive *dive;
|
||||||
|
@ -462,7 +471,7 @@ struct dive *alloc_dive(void)
|
||||||
if (!dive)
|
if (!dive)
|
||||||
exit(1);
|
exit(1);
|
||||||
memset(dive, 0, sizeof(*dive));
|
memset(dive, 0, sizeof(*dive));
|
||||||
dive->id = dive_getUniqID(dive);
|
dive->id = dive_getUniqID();
|
||||||
return dive;
|
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(),
|
/* we should always have a uniq ID as that gets assigned during alloc_dive(),
|
||||||
* but we want to make sure... */
|
* but we want to make sure... */
|
||||||
if (!dive->id)
|
if (!dive->id)
|
||||||
dive->id = dive_getUniqID(dive);
|
dive->id = dive_getUniqID();
|
||||||
|
|
||||||
return dive;
|
return dive;
|
||||||
}
|
}
|
||||||
|
|
|
@ -757,7 +757,7 @@ extern int legacy_format_o2pressures(struct dive *dive, struct divecomputer *dc)
|
||||||
extern void sort_table(struct dive_table *table);
|
extern void sort_table(struct dive_table *table);
|
||||||
extern struct dive *fixup_dive(struct dive *dive);
|
extern struct dive *fixup_dive(struct dive *dive);
|
||||||
extern void fixup_dc_duration(struct divecomputer *dc);
|
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_airtemp(struct divecomputer *dc);
|
||||||
extern unsigned int dc_watertemp(struct divecomputer *dc);
|
extern unsigned int dc_watertemp(struct divecomputer *dc);
|
||||||
extern int split_dive(struct dive *);
|
extern int split_dive(struct dive *);
|
||||||
|
|
|
@ -288,31 +288,6 @@ QList<int> getDivesInTrip(dive_trip_t *trip)
|
||||||
return ret;
|
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)
|
static xmlDocPtr get_stylesheet_doc(const xmlChar *uri, xmlDictPtr, int, void *, xsltLoadType)
|
||||||
{
|
{
|
||||||
QFile f(QLatin1String(":/xslt/") + (const char *)uri);
|
QFile f(QLatin1String(":/xslt/") + (const char *)uri);
|
||||||
|
|
|
@ -982,7 +982,7 @@ void MainWindow::setupForAddAndPlan(const char *model)
|
||||||
// clean out the dive and give it an id and the correct dc model
|
// clean out the dive and give it an id and the correct dc model
|
||||||
clear_dive(&displayed_dive);
|
clear_dive(&displayed_dive);
|
||||||
clear_dive_site(&displayed_dive_site);
|
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.when = QDateTime::currentMSecsSinceEpoch() / 1000L + gettimezoneoffset() + 3600;
|
||||||
displayed_dive.dc.model = strdup(model); // don't translate! this is stored in the XML file
|
displayed_dive.dc.model = strdup(model); // don't translate! this is stored in the XML file
|
||||||
dc_number = 1;
|
dc_number = 1;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue