From bb20ffa377f01e2d10a23c3e6ebb6d06bf8ff5fc Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Thu, 24 Nov 2022 15:09:20 +0100 Subject: shiboken6: Add all comparison operators to class Include Pick-to: 6.4 Task-number: PYSIDE-962 Change-Id: I50e7b325b8e6926da7e9fb81ee90ac41768ed436 Reviewed-by: Cristian Maureira-Fredes Reviewed-by: Shyamnath Premnadh --- sources/shiboken6/ApiExtractor/include.cpp | 9 +++++ sources/shiboken6/ApiExtractor/include.h | 43 +++++++++++++++++----- .../generator/shiboken/headergenerator.cpp | 6 ++- 3 files changed, 46 insertions(+), 12 deletions(-) diff --git a/sources/shiboken6/ApiExtractor/include.cpp b/sources/shiboken6/ApiExtractor/include.cpp index 15d2cadd9..d2d577817 100644 --- a/sources/shiboken6/ApiExtractor/include.cpp +++ b/sources/shiboken6/ApiExtractor/include.cpp @@ -24,6 +24,15 @@ QString Include::toString() const return u"import "_s + m_name + u';'; } +int Include::compare(const Include &rhs) const +{ + if (m_type < rhs.m_type) + return -1; + if (m_type > rhs.m_type) + return 1; + return m_name.compare(rhs.m_name); +} + size_t qHash(const Include& inc) { return qHash(inc.m_name); diff --git a/sources/shiboken6/ApiExtractor/include.h b/sources/shiboken6/ApiExtractor/include.h index fcbaf9b9c..7fd7d3b36 100644 --- a/sources/shiboken6/ApiExtractor/include.h +++ b/sources/shiboken6/ApiExtractor/include.h @@ -42,23 +42,46 @@ public: QString toString() const; - bool operator<(const Include& other) const - { - return m_name < other.m_name; - } - - bool operator==(const Include& other) const - { - return m_type == other.m_type && m_name == other.m_name; - } + friend size_t qHash(const Include &); + int compare(const Include &rhs) const; - friend size_t qHash(const Include&); private: IncludeType m_type = IncludePath; QString m_name; }; size_t qHash(const Include& inc); + +inline bool operator<(const Include &lhs, const Include &rhs) +{ + return lhs.compare(rhs) < 0; +} + +inline bool operator<=(const Include &lhs, const Include &rhs) +{ + return lhs.compare(rhs) <= 0; +} + +inline bool operator==(const Include &lhs, const Include &rhs) +{ + return lhs.compare(rhs) == 0; +} + +inline bool operator!=(const Include &lhs, const Include &rhs) +{ + return lhs.compare(rhs) != 0; +} + +inline bool operator>=(const Include &lhs, const Include &rhs) +{ + return lhs.compare(rhs) >= 0; +} + +inline bool operator>(const Include &lhs, const Include &rhs) +{ + return lhs.compare(rhs) > 0; +} + QTextStream& operator<<(QTextStream& out, const Include& include); TextStream& operator<<(TextStream& out, const Include& include); #ifndef QT_NO_DEBUG_STREAM diff --git a/sources/shiboken6/generator/shiboken/headergenerator.cpp b/sources/shiboken6/generator/shiboken/headergenerator.cpp index 9ed192097..7d2b923ef 100644 --- a/sources/shiboken6/generator/shiboken/headergenerator.cpp +++ b/sources/shiboken6/generator/shiboken/headergenerator.cpp @@ -639,17 +639,19 @@ bool HeaderGenerator::finishGeneration() const bool isPrivate = classType->isPrivate(); auto &includeList = isPrivate ? privateIncludes : includes; auto &forwardList = isPrivate ? privateForwardDeclarations : forwardDeclarations; + const auto classInclude = classType->include(); if (leanHeaders() && canForwardDeclare(metaClass)) forwardList.append(metaClass); else - includeList << classType->include(); + includeList << classInclude; auto &typeFunctionsStr = isPrivate ? privateTypeFunctions : typeFunctions; for (const AbstractMetaEnum &cppEnum : metaClass->enums()) { if (cppEnum.isAnonymous() || cppEnum.isPrivate()) continue; - includeList << cppEnum.typeEntry()->include(); + if (const auto inc = cppEnum.typeEntry()->include(); inc != classInclude) + includeList << inc; writeProtectedEnumSurrogate(protEnumsSurrogates, cppEnum); writeSbkTypeFunction(typeFunctionsStr, cppEnum); } -- cgit v1.2.3