When saving only selected dives, only include referenced dive computers

Since we should have far fewer dive computers than dives this straight
forward algorithm shouldn't cause any performance issues.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Dirk Hohndel 2015-06-10 07:24:34 -07:00
parent 2365531c68
commit 1ee447b5a9
4 changed files with 28 additions and 6 deletions

View file

@ -90,14 +90,36 @@ extern "C" bool compareDC(const DiveComputerNode &a, const DiveComputerNode &b)
}
extern "C" void call_for_each_dc (void *f, void (*callback)(void *, const char *, uint32_t,
const char *, const char *, const char *))
const char *, const char *, const char *),
bool select_only)
{
QList<DiveComputerNode> values = dcList.dcMap.values();
qSort(values.begin(), values.end(), compareDC);
for (int i = 0; i < values.size(); i++) {
const DiveComputerNode *node = &values.at(i);
callback(f, node->model.toUtf8().data(), node->deviceId, node->nickName.toUtf8().data(),
node->serialNumber.toUtf8().data(), node->firmware.toUtf8().data());
bool found = false;
if (select_only) {
int j;
struct dive *d;
for_each_dive (j, d) {
struct divecomputer *dc;
if (!d->selected)
continue;
for_each_dc(d, dc) {
if (dc->deviceid == node->deviceId) {
found = true;
break;
}
}
if (found)
break;
}
} else {
found = true;
}
if (found)
callback(f, node->model.toUtf8().data(), node->deviceId, node->nickName.toUtf8().data(),
node->serialNumber.toUtf8().data(), node->firmware.toUtf8().data());
}
}