From 9962d47b56eb15aba9339b22845566535c168483 Mon Sep 17 00:00:00 2001 From: Berthold Stoeger Date: Fri, 17 Apr 2020 22:43:43 +0200 Subject: [PATCH] media: turn DivePictureModel::pictures into std::vector QVector doesn't have a function to insert a range of pictures, which we will need for undo of image adding/deletion. Moreover, std::vector gives us stronger guarantees. For example, if capacity is large enough, it guarantees that there will be no reallocation and thus iterators stay valid. I have not found such a guarantee in the Qt docs. Signed-off-by: Berthold Stoeger --- qt-models/divepicturemodel.cpp | 12 ++++++------ qt-models/divepicturemodel.h | 3 +-- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/qt-models/divepicturemodel.cpp b/qt-models/divepicturemodel.cpp index 548f8e7be..351396e5f 100644 --- a/qt-models/divepicturemodel.cpp +++ b/qt-models/divepicturemodel.cpp @@ -52,7 +52,7 @@ void DivePictureModel::updateThumbnails() void DivePictureModel::updateDivePictures() { beginResetModel(); - if (!pictures.isEmpty()) { + if (!pictures.empty()) { pictures.clear(); Thumbnailer::instance()->clearWorkQueue(); } @@ -61,7 +61,7 @@ void DivePictureModel::updateDivePictures() struct dive *dive; for_each_dive (i, dive) { if (dive->selected) { - int first = pictures.count(); + size_t first = pictures.size(); FOR_EACH_PICTURE(dive) pictures.push_back({ dive, picture->filename, {}, picture->offset.seconds, {.seconds = 0}}); @@ -141,11 +141,11 @@ void DivePictureModel::removePictures(const QVector &fileUrlsIn) copy_dive(current_dive, &displayed_dive); mark_divelist_changed(true); - for (int i = 0; i < pictures.size(); ++i) { + for (size_t i = 0; i < pictures.size(); ++i) { // Find range [i j) of pictures to remove if (std::find(fileUrls.begin(), fileUrls.end(), pictures[i].filename) == fileUrls.end()) continue; - int j; + size_t j; for (j = i + 1; j < pictures.size(); ++j) { if (std::find(fileUrls.begin(), fileUrls.end(), pictures[j].filename) == fileUrls.end()) break; @@ -162,12 +162,12 @@ void DivePictureModel::removePictures(const QVector &fileUrlsIn) int DivePictureModel::rowCount(const QModelIndex&) const { - return pictures.count(); + return (int)pictures.size(); } int DivePictureModel::findPictureId(const std::string &filename) { - for (int i = 0; i < pictures.size(); ++i) + for (int i = 0; i < (int)pictures.size(); ++i) if (pictures[i].filename == filename) return i; return -1; diff --git a/qt-models/divepicturemodel.h b/qt-models/divepicturemodel.h index 523d552e3..395dbedd1 100644 --- a/qt-models/divepicturemodel.h +++ b/qt-models/divepicturemodel.h @@ -6,7 +6,6 @@ #include #include -#include // We use std::string instead of QString to use the same character-encoding // as in the C core (UTF-8). This is crucial to guarantee the same sort-order. @@ -36,7 +35,7 @@ public slots: void pictureOffsetChanged(dive *d, const QString filename, offset_t offset); private: DivePictureModel(); - QVector pictures; + std::vector pictures; int findPictureId(const std::string &filename); // Return -1 if not found double zoomLevel; // -1.0: minimum, 0.0: standard, 1.0: maximum int size;