aboutsummaryrefslogtreecommitdiffstats
path: root/sources/shiboken6/ApiExtractor/codesnip.cpp
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2025-02-11 16:43:13 +0100
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2025-02-17 10:45:05 +0100
commitcc29a1767dd8323c66c5c3235c2f168cd4ab9be7 (patch)
treeb94d810d3f69afb3b09d8fbe8038e87d0229bcc2 /sources/shiboken6/ApiExtractor/codesnip.cpp
parentd312000596bd50bdd630fa8a3ea87e42a94a9954 (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.cpp26
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(); ) {