diff options
| author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2025-02-11 16:43:13 +0100 |
|---|---|---|
| committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2025-02-17 10:45:05 +0100 |
| commit | cc29a1767dd8323c66c5c3235c2f168cd4ab9be7 (patch) | |
| tree | b94d810d3f69afb3b09d8fbe8038e87d0229bcc2 /sources/shiboken6/ApiExtractor/codesnip.cpp | |
| parent | d312000596bd50bdd630fa8a3ea87e42a94a9954 (diff) | |
shiboken6: Make function modifications equality-comparable and hash-able
This enables putting functions and their modifications into a
QHash for identifying identical code.
Task-number: PYSIDE-2701
Change-Id: I612a10db2d565c36859c9fee05bb5569c7a64ca9
Reviewed-by: Christian Tismer <tismer@stackless.com>
Diffstat (limited to 'sources/shiboken6/ApiExtractor/codesnip.cpp')
| -rw-r--r-- | sources/shiboken6/ApiExtractor/codesnip.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/sources/shiboken6/ApiExtractor/codesnip.cpp b/sources/shiboken6/ApiExtractor/codesnip.cpp index 255b9a392..40847a016 100644 --- a/sources/shiboken6/ApiExtractor/codesnip.cpp +++ b/sources/shiboken6/ApiExtractor/codesnip.cpp @@ -33,6 +33,11 @@ QString TemplateInstance::expandCode() const return result; } +bool comparesEqual(const TemplateInstance &lhs, const TemplateInstance &rhs) noexcept +{ + return lhs.m_name == rhs.m_name && lhs.replaceRules == rhs.replaceRules; +} + // ---------------------- CodeSnipFragment static QString fragmentToCodeHelper(const QString &c) @@ -65,6 +70,21 @@ static bool isEmptyFragment(const CodeSnipFragment &codeFrag) return std::visit([](auto f) { return isEmptyFragmentHelper(f); }, codeFrag); } +static size_t hashHelper(const QString &c, size_t seed) noexcept +{ + return qHash(c, seed); +} + +static size_t hashHelper(const TemplateInstance &t, size_t seed) noexcept +{ + return qHash(t, seed); +} + +size_t qHash(const CodeSnipFragment &codeFrag, size_t seed) noexcept +{ + return std::visit([seed](auto f) { return hashHelper(f, seed); }, codeFrag); +} + static void formatDebugHelper(QDebug &d, const QString &code) { const auto lines = QStringView{code}.split(u'\n'); @@ -115,6 +135,12 @@ QRegularExpression CodeSnipAbstract::placeHolderRegex(int index) return QRegularExpression(u'%' + QString::number(index) + "\\b"_L1); } +bool comparesEqual(const CodeSnip &lhs, const CodeSnip &rhs) noexcept +{ + return lhs.language == rhs.language && lhs.position == rhs.position + && lhs.codeList() == rhs.codeList(); +} + void purgeEmptyCodeSnips(QList<CodeSnip> *list) { for (auto it = list->begin(); it != list->end(); ) { |
