map: use value semantics for MapLocation

This makes memory management more simple, as not explicit deletion
is necessary.

A rather large commit, because changing QVector<> to std::vector<>
is propagated up the call chain.

Adds a new range_contains() helper function for collection
types such as std::vector<>. I didn't want to call it
contains(), since we already have a contains function
for strings and let's keep argument overloading simple.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
Berthold Stoeger 2024-05-11 13:21:53 +02:00 committed by bstoeger
parent e39dea3d68
commit 6b835710bc
17 changed files with 84 additions and 75 deletions

View file

@ -22,6 +22,7 @@
#include "commands/command_base.h"
#include "core/errorhelper.h"
#include "core/qthelper.h"
#include "core/range.h"
#include "core/trip.h"
#include "desktop-widgets/divelistview.h"
#include "core/metrics.h"
@ -439,13 +440,13 @@ void DiveListView::selectDiveSitesOnMap(const std::vector<dive *> &dives)
// the dive-site selection is controlled by the filter not
// by the selected dives.
if (!DiveFilter::instance()->diveSiteMode()) {
QVector<dive_site *> selectedSites;
std::vector<dive_site *> selectedSites;
selectedSites.reserve(dives.size());
for (dive *d: dives) {
if (!d->hidden_by_filter && d->dive_site && !selectedSites.contains(d->dive_site))
if (!d->hidden_by_filter && d->dive_site && !range_contains(selectedSites, d->dive_site))
selectedSites.push_back(d->dive_site);
}
MapWidget::instance()->setSelected(selectedSites);
MapWidget::instance()->setSelected(std::move(selectedSites));
}
#endif
}

View file

@ -207,7 +207,7 @@ void DiveLogExportDialog::on_buttonBox_accepted()
if (!filename.contains('.'))
filename.append(".xml");
QByteArray bt = QFile::encodeName(filename);
std::vector<const dive_site *> sites = getDiveSitesToExport(ui->exportSelected->isChecked());
auto sites = getDiveSitesToExport(ui->exportSelected->isChecked());
save_dive_sites_logic(bt.data(), sites.data(), (int)sites.size(), ui->anonymize->isChecked());
}
} else if (ui->exportImageDepths->isChecked()) {

View file

@ -115,14 +115,14 @@ void DiveSiteListView::on_filterText_textChanged(const QString &text)
model->setFilter(text);
}
QVector<dive_site *> DiveSiteListView::selectedDiveSites()
std::vector<dive_site *> DiveSiteListView::selectedDiveSites()
{
const QModelIndexList indices = ui.diveSites->view()->selectionModel()->selectedRows();
QVector<dive_site *> sites;
std::vector<dive_site *> sites;
sites.reserve(indices.size());
for (const QModelIndex &idx: indices) {
struct dive_site *ds = model->getDiveSite(idx);
sites.append(ds);
sites.push_back(ds);
}
return sites;
}

View file

@ -22,7 +22,7 @@ private slots:
private:
Ui::DiveSiteListView ui;
DiveSiteSortedModel *model;
QVector<dive_site *> selectedDiveSites();
std::vector<dive_site *> selectedDiveSites();
void hideEvent(QHideEvent *) override;
void showEvent(QShowEvent *) override;
};

View file

@ -260,7 +260,7 @@ void LocationInformationWidget::initFields(dive_site *ds)
filter_model.set(ds, ds->location);
updateLabels();
enableLocationButtons(dive_site_has_gps_location(ds));
DiveFilter::instance()->startFilterDiveSites(QVector<dive_site *>{ ds });
DiveFilter::instance()->startFilterDiveSites(std::vector<dive_site *>{ ds });
filter_model.invalidate();
} else {
filter_model.set(0, location_t());

View file

@ -79,10 +79,10 @@ bool MapWidget::editMode() const
return isReady && m_mapHelper->editMode();
}
void MapWidget::setSelected(const QVector<dive_site *> &divesites)
void MapWidget::setSelected(std::vector<dive_site *> divesites)
{
CHECK_IS_READY_RETURN_VOID();
m_mapHelper->setSelected(divesites);
m_mapHelper->setSelected(std::move(divesites));
m_mapHelper->centerOnSelectedDiveSite();
}
@ -97,7 +97,7 @@ void MapWidget::selectedDivesChanged(const QList<int> &list)
if (dive *d = get_dive(idx))
selection.push_back(d);
}
setSelection(selection, current_dive, -1);
setSelection(std::move(selection), current_dive, -1);
}
void MapWidget::coordinatesChanged(struct dive_site *ds, const location_t &location)

View file

@ -4,6 +4,7 @@
#include "core/units.h"
#include "core/subsurface-qt/divelistnotifier.h"
#include <vector>
#include <QQuickWidget>
#include <QList>
@ -23,7 +24,7 @@ public:
static MapWidget *instance();
void reload();
void setSelected(const QVector<dive_site *> &divesites);
void setSelected(std::vector<dive_site *> divesites);
bool editMode() const;
public slots: