From 5cb51e4afeb74e456755acc09f78313ef14b5c92 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Mon, 2 Sep 2024 15:33:58 +0200 Subject: [PATCH] QDirListing: simplify const_iterator There's no need to carry the same QDirListingPrivate* around twice. Remove const_iterator's direct QDirListingPrivate* member and re-use the one from its DirEntry member. Requires adding a private const_iterator::atEnd() helper function, because while const_iterator and its member functions are implicit friends of DirEntry, friend functions of const_iterator are not. Improves readability, too. Found in API-review. Change-Id: I82b9273950e174d7598ee531fbd5dfb472911b71 Reviewed-by: Thiago Macieira Reviewed-by: Ahmad Samir (cherry picked from commit 0ede7f541dfc6cba163e1452aee7239818a42c1b) Reviewed-by: Qt Cherry-pick Bot --- src/corelib/io/qdirlisting.cpp | 4 ++-- src/corelib/io/qdirlisting.h | 10 ++++------ 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/corelib/io/qdirlisting.cpp b/src/corelib/io/qdirlisting.cpp index a753dad13bd..db8e4ea4e29 100644 --- a/src/corelib/io/qdirlisting.cpp +++ b/src/corelib/io/qdirlisting.cpp @@ -725,8 +725,8 @@ QDirListing::const_iterator QDirListing::begin() const */ QDirListing::const_iterator &QDirListing::const_iterator::operator++() { - dirListPtr->advance(); - if (!dirListPtr->hasIterators()) + dirEntry.dirListPtr->advance(); + if (!dirEntry.dirListPtr->hasIterators()) *this = {}; // All done, make `this` equal to the end() iterator return *this; } diff --git a/src/corelib/io/qdirlisting.h b/src/corelib/io/qdirlisting.h index d4900556a3f..9d83411728c 100644 --- a/src/corelib/io/qdirlisting.h +++ b/src/corelib/io/qdirlisting.h @@ -103,8 +103,7 @@ public: class const_iterator { friend class QDirListing; - const_iterator(QDirListingPrivate *dp) : dirListPtr(dp) { dirEntry.dirListPtr = dp; } - QDirListingPrivate *dirListPtr = nullptr; + explicit const_iterator(QDirListingPrivate *dp) { dirEntry.dirListPtr = dp; } DirEntry dirEntry; public: using iterator_category = std::input_iterator_tag; @@ -118,10 +117,9 @@ public: pointer operator->() const { return &dirEntry; } Q_CORE_EXPORT const_iterator &operator++(); const_iterator operator++(int) { auto tmp = *this; operator++(); return tmp; }; - friend bool operator==(const const_iterator &lhs, sentinel) noexcept - { - return lhs.dirListPtr == nullptr; - } + private: + bool atEnd() const noexcept { return dirEntry.dirListPtr == nullptr; } + friend bool operator==(const const_iterator &lhs, sentinel) noexcept { return lhs.atEnd(); } #ifndef __cpp_impl_three_way_comparison friend bool operator!=(const const_iterator &lhs, sentinel) noexcept { return !operator==(lhs, sentinel{}); }