summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAurélien Brooke <aurelien@bahiasoft.fr>2022-12-18 10:49:43 +0100
committerAurélien Brooke <aurelien@bahiasoft.fr>2022-12-19 08:50:15 +0100
commitb15f62e3234a85d7220fc1533b6a224522dd4735 (patch)
tree396ac5fea8548e2b68e5371f49d035b09128d984 /src
parent43a7aad707ece710fce1ace0c2c24aee23ddfa2d (diff)
Fix incorrect usages of std::make_move_iterator
In several places, std::make_move_iterator was used to move from a const vector, which is not possible and fell back to copy. Use the existing Qt3DCore::moveAtEnd utility to ensure a move operation is actually happening. * When readability permits, pass directly a return value as second parameter; * Otherwise, std::move from a mutable vector. Change-Id: I56c8925bbdeab95257d0a7fa89cffcda53fd6451 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src')
-rw-r--r--src/core/aspects/qabstractaspect.cpp5
-rw-r--r--src/core/qscheduler.cpp7
-rw-r--r--src/input/frontend/qinputaspect.cpp6
-rw-r--r--src/render/frontend/qrenderaspect.cpp10
-rw-r--r--src/render/jobs/pickboundingvolumeutils.cpp4
-rw-r--r--src/render/jobs/raycastingjob.cpp24
6 files changed, 21 insertions, 35 deletions
diff --git a/src/core/aspects/qabstractaspect.cpp b/src/core/aspects/qabstractaspect.cpp
index 64a93849a..67cbc2f80 100644
--- a/src/core/aspects/qabstractaspect.cpp
+++ b/src/core/aspects/qabstractaspect.cpp
@@ -17,6 +17,7 @@
#include <Qt3DCore/private/qnode_p.h>
#include <Qt3DCore/private/qscene_p.h>
#include <Qt3DCore/private/qnode_p.h>
+#include <Qt3DCore/private/vector_helper_p.h>
QT_BEGIN_NAMESPACE
@@ -303,9 +304,7 @@ std::vector<QAspectJobPtr> QAbstractAspectPrivate::jobsToExecute(qint64 time)
{
QMutexLocker lock(&m_singleShotMutex);
- res.insert(res.end(),
- std::make_move_iterator(m_singleShotJobs.begin()),
- std::make_move_iterator(m_singleShotJobs.end()));
+ Qt3DCore::moveAtEnd(res, std::move(m_singleShotJobs));
m_singleShotJobs.clear();
}
diff --git a/src/core/qscheduler.cpp b/src/core/qscheduler.cpp
index 31d01ebd5..62985445e 100644
--- a/src/core/qscheduler.cpp
+++ b/src/core/qscheduler.cpp
@@ -9,6 +9,7 @@
#include <Qt3DCore/private/qaspectmanager_p.h>
#include <Qt3DCore/private/qaspectjob_p.h>
#include <Qt3DCore/private/qabstractaspectjobmanager_p.h>
+#include <Qt3DCore/private/vector_helper_p.h>
#include <QtCore/QCoreApplication>
#include <QtCore/QDateTime>
@@ -86,10 +87,8 @@ int QScheduler::scheduleAndWaitForFrameAspectJobs(qint64 time, bool dumpJobs)
// For now just queue them up as they are
const QList<QAbstractAspect *> &aspects = m_aspectManager->aspects();
for (QAbstractAspect *aspect : aspects) {
- const std::vector<QAspectJobPtr> aspectJobs = QAbstractAspectPrivate::get(aspect)->jobsToExecute(time);
- jobQueue.insert(jobQueue.end(),
- std::make_move_iterator(aspectJobs.begin()),
- std::make_move_iterator(aspectJobs.end()));
+ std::vector<QAspectJobPtr> aspectJobs = QAbstractAspectPrivate::get(aspect)->jobsToExecute(time);
+ Qt3DCore::moveAtEnd(jobQueue, std::move(aspectJobs));
}
if (jobQueue.empty())
diff --git a/src/input/frontend/qinputaspect.cpp b/src/input/frontend/qinputaspect.cpp
index f6a08d9c9..4106b690a 100644
--- a/src/input/frontend/qinputaspect.cpp
+++ b/src/input/frontend/qinputaspect.cpp
@@ -54,8 +54,8 @@
#include <Qt3DInput/private/updateaxisactionjob_p.h>
#include <Qt3DCore/private/qeventfilterservice_p.h>
#include <Qt3DCore/private/qservicelocator_p.h>
-
#include <Qt3DCore/private/qaspectmanager_p.h>
+#include <Qt3DCore/private/vector_helper_p.h>
#ifdef HAVE_QGAMEPAD
# include <Qt3DInput/private/qgamepadinput_p.h>
@@ -202,8 +202,8 @@ std::vector<QAspectJobPtr> QInputAspect::jobsToExecute(qint64 time)
const auto integrations = d->m_inputHandler->inputDeviceIntegrations();
for (QInputDeviceIntegration *integration : integrations) {
- const std::vector<QAspectJobPtr> integrationJobs = integration->jobsToExecute(time);
- jobs.insert(jobs.end(), std::make_move_iterator(integrationJobs.begin()), std::make_move_iterator(integrationJobs.end()));
+ std::vector<QAspectJobPtr> integrationJobs = integration->jobsToExecute(time);
+ Qt3DCore::moveAtEnd(jobs, std::move(integrationJobs));
}
const QList<Qt3DCore::QNodeId> proxiesToLoad = d->m_inputHandler->physicalDeviceProxyManager()->takePendingProxiesToLoad();
diff --git a/src/render/frontend/qrenderaspect.cpp b/src/render/frontend/qrenderaspect.cpp
index 1626128c9..b8508cef1 100644
--- a/src/render/frontend/qrenderaspect.cpp
+++ b/src/render/frontend/qrenderaspect.cpp
@@ -148,6 +148,7 @@
#include <Qt3DCore/private/qaspectmanager_p.h>
#include <Qt3DCore/private/qeventfilterservice_p.h>
#include <Qt3DCore/private/calcboundingvolumejob_p.h>
+#include <Qt3DCore/private/vector_helper_p.h>
#include <QThread>
#include <QOpenGLContext>
@@ -667,11 +668,9 @@ std::vector<Qt3DCore::QAspectJobPtr> QRenderAspect::jobsToExecute(qint64 time)
jobs.push_back(job);
}
- const std::vector<QAspectJobPtr> geometryJobs = d->createGeometryRendererJobs();
- jobs.insert(jobs.end(), std::make_move_iterator(geometryJobs.begin()), std::make_move_iterator(geometryJobs.end()));
+ Qt3DCore::moveAtEnd(jobs, d->createGeometryRendererJobs());
- const std::vector<QAspectJobPtr> preRenderingJobs = d->createPreRendererJobs();
- jobs.insert(jobs.end(), std::make_move_iterator(preRenderingJobs.begin()), std::make_move_iterator(preRenderingJobs.end()));
+ Qt3DCore::moveAtEnd(jobs, d->createPreRendererJobs());
// Don't spawn any rendering jobs, if the renderer decides to skip this frame
// Note: this only affects rendering jobs (jobs that load buffers,
@@ -723,8 +722,7 @@ std::vector<Qt3DCore::QAspectJobPtr> QRenderAspect::jobsToExecute(qint64 time)
if (layersDirty)
jobs.push_back(d->m_updateEntityLayersJob);
- const std::vector<QAspectJobPtr> renderBinJobs = d->m_renderer->renderBinJobs();
- jobs.insert(jobs.end(), std::make_move_iterator(renderBinJobs.begin()), std::make_move_iterator(renderBinJobs.end()));
+ Qt3DCore::moveAtEnd(jobs, d->m_renderer->renderBinJobs());
}
return jobs;
diff --git a/src/render/jobs/pickboundingvolumeutils.cpp b/src/render/jobs/pickboundingvolumeutils.cpp
index 00d8ecec8..ffdf0361f 100644
--- a/src/render/jobs/pickboundingvolumeutils.cpp
+++ b/src/render/jobs/pickboundingvolumeutils.cpp
@@ -442,9 +442,7 @@ struct HighestPriorityHitReducer
HitList reduceToAllHits(HitList &results, const HitList &intermediate)
{
if (!intermediate.empty())
- results.insert(results.end(),
- std::make_move_iterator(intermediate.begin()),
- std::make_move_iterator(intermediate.end()));
+ results.insert(results.end(), intermediate.begin(), intermediate.end());
return results;
}
diff --git a/src/render/jobs/raycastingjob.cpp b/src/render/jobs/raycastingjob.cpp
index 5a6fb311a..50931b031 100644
--- a/src/render/jobs/raycastingjob.cpp
+++ b/src/render/jobs/raycastingjob.cpp
@@ -174,10 +174,8 @@ bool RayCastingJob::pick(const QList<QPair<Entity *, RayCaster *>> &entities)
gathererFunctor.m_manager = m_manager;
gathererFunctor.m_ray = ray;
gathererFunctor.m_objectPickersRequired = false;
- const PickingUtils::HitList &hits = gathererFunctor.computeHits(entityPicker.entities(), QPickingSettings::AllPicks);
- sphereHits.insert(sphereHits.end(),
- std::make_move_iterator(hits.begin()),
- std::make_move_iterator(hits.end()));
+ PickingUtils::HitList hits = gathererFunctor.computeHits(entityPicker.entities(), QPickingSettings::AllPicks);
+ Qt3DCore::moveAtEnd(sphereHits, std::move(hits));
}
if (pickConfiguration.edgePickingRequested) {
PickingUtils::LineCollisionGathererFunctor gathererFunctor;
@@ -185,10 +183,8 @@ bool RayCastingJob::pick(const QList<QPair<Entity *, RayCaster *>> &entities)
gathererFunctor.m_ray = ray;
gathererFunctor.m_pickWorldSpaceTolerance = pickConfiguration.pickWorldSpaceTolerance;
gathererFunctor.m_objectPickersRequired = false;
- const PickingUtils::HitList &hits = gathererFunctor.computeHits(entityPicker.entities(), QPickingSettings::AllPicks);
- sphereHits.insert(sphereHits.end(),
- std::make_move_iterator(hits.begin()),
- std::make_move_iterator(hits.end()));
+ PickingUtils::HitList hits = gathererFunctor.computeHits(entityPicker.entities(), QPickingSettings::AllPicks);
+ Qt3DCore::moveAtEnd(sphereHits, std::move(hits));
PickingUtils::AbstractCollisionGathererFunctor::sortHits(sphereHits);
}
if (pickConfiguration.pointPickingRequested) {
@@ -197,17 +193,13 @@ bool RayCastingJob::pick(const QList<QPair<Entity *, RayCaster *>> &entities)
gathererFunctor.m_ray = ray;
gathererFunctor.m_pickWorldSpaceTolerance = pickConfiguration.pickWorldSpaceTolerance;
gathererFunctor.m_objectPickersRequired = false;
- const PickingUtils::HitList &hits = gathererFunctor.computeHits(entityPicker.entities(), QPickingSettings::AllPicks);
- sphereHits.insert(sphereHits.end(),
- std::make_move_iterator(hits.begin()),
- std::make_move_iterator(hits.end()));
+ PickingUtils::HitList hits = gathererFunctor.computeHits(entityPicker.entities(), QPickingSettings::AllPicks);
+ Qt3DCore::moveAtEnd(sphereHits, std::move(hits));
PickingUtils::AbstractCollisionGathererFunctor::sortHits(sphereHits);
}
if (!pickConfiguration.primitivePickingRequested) {
- const PickingUtils::HitList &hits = entityPicker.hits();
- sphereHits.insert(sphereHits.end(),
- std::make_move_iterator(hits.begin()),
- std::make_move_iterator(hits.end()));
+ PickingUtils::HitList hits = entityPicker.hits();
+ Qt3DCore::moveAtEnd(sphereHits, std::move(hits));
PickingUtils::AbstractCollisionGathererFunctor::sortHits(sphereHits);
}
}