diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2024-07-08 10:37:39 +0200 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2024-07-09 10:30:35 +0200 |
commit | e3b159b241b452ceb1013fd9aebe0d9a25a64ed9 (patch) | |
tree | 7f7588244f325733771804d6d1a3759e627df432 /sources/pyside6/libpyside | |
parent | f5744f1b402a59e8bd8453d659dd8dd84a872711 (diff) |
libpyside: Avoid QByteArray construction getArgsFromSignature()
Task-number: PYSIDE-2810
Change-Id: I54601a5a3f1f7cd648e5e382850ee10fbe240dac
Reviewed-by: Shyamnath Premnadh <Shyamnath.Premnadh@qt.io>
Diffstat (limited to 'sources/pyside6/libpyside')
-rw-r--r-- | sources/pyside6/libpyside/pysidesignal.cpp | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/sources/pyside6/libpyside/pysidesignal.cpp b/sources/pyside6/libpyside/pysidesignal.cpp index 07c5a3b09..5b45da18f 100644 --- a/sources/pyside6/libpyside/pysidesignal.cpp +++ b/sources/pyside6/libpyside/pysidesignal.cpp @@ -1195,20 +1195,27 @@ EmitterData getEmitterData(PySideSignalInstance *signal) QByteArrayList getArgsFromSignature(const char *signature) { - QByteArray qsignature = QByteArray(signature).trimmed(); + QByteArrayView qsignature = QByteArrayView(signature).trimmed(); QByteArrayList result; if (qsignature.contains("()") || qsignature.contains("(void)")) return result; - if (qsignature.endsWith(')')) { - const auto paren = qsignature.indexOf('('); - if (paren >= 0) { - qsignature.chop(1); - qsignature.remove(0, paren + 1); - result = qsignature.split(u','); - for (auto &type : result) - type = type.trimmed(); + if (!qsignature.endsWith(')')) + return result; + const auto paren = qsignature.indexOf('('); + if (paren < 0) + return result; + + qsignature.chop(1); + qsignature = qsignature.sliced(paren + 1); + while (true) { + auto next = qsignature.indexOf(','); + if (next == -1) { + result.append(qsignature.trimmed().toByteArray()); + break; } + result.append(qsignature.sliced(0, next).trimmed().toByteArray()); + qsignature = qsignature.sliced(next + 1); } return result; } |