Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
helpers.cpp
Go to the documentation of this file.
1// Copyright (C) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Rafael Roquetto <rafael.roquetto@kdab.com>
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
3
4#include "helpers.h"
5#include <qdebug.h>
6
7using namespace Qt::StringLiterals;
8
10{
11 stream << R"CPP(
12#ifndef Q_TRACEPOINT
13#error "Q_TRACEPOINT not set for the module, Q_TRACE not enabled."
14#endif
15)CPP";
16}
17
19{
21 return ret.replace(QStringLiteral("::"), QStringLiteral("_"));
22}
23
24QString includeGuard(const QString &filename)
25{
26 QString guard = filename.toUpper();
27
28 for (int i = 0; i < guard.size(); ++i) {
29 if (!guard.at(i).isLetterOrNumber())
30 guard[i] = u'_';
31 }
32
33 return guard;
34}
35
36template<typename T>
37static QString joinArguments(const QList<Tracepoint::Argument> &args, T joinFunction)
38{
40 bool first = true;
41
42 for (const Tracepoint::Argument &arg : args) {
43 if (!first)
44 ret += ", "_L1;
45
46 ret += joinFunction(arg);
47
48 first = false;
49 }
51 return ret;
52}
53
54QString formatFunctionSignature(const QList<Tracepoint::Argument> &args)
55{
56 return joinArguments(args, [](const Tracepoint::Argument &arg) {
57 return QStringLiteral("%1 %2").arg(arg.type).arg(arg.name);
58 });
59}
60
61QString formatParameterList(const Provider &provider, const QList<Tracepoint::Argument> &args, const QList<Tracepoint::Field> &fields, ParamType type)
62{
63 if (type == LTTNG) {
65
66 for (int i = 0; i < args.size(); i++) {
68 const Tracepoint::Field &field = fields[i];
70 ret += ", trace_convert_"_L1 + typeToTypeName(arg.type) + "("_L1 + arg.name + ")"_L1;
71 else
72 ret += ", "_L1 + arg.name;
73 }
74 return ret;
75 }
76
77 auto findEnumeration = [](const QList<TraceEnum> &enums, const QString &name) {
78 for (const auto &e : enums) {
79 if (e.name == name)
80 return e;
81 }
82 return TraceEnum();
83 };
84
85 if (type == CTF) {
87
88 for (int i = 0; i < args.size(); i++) {
90 const Tracepoint::Field &field = fields[i];
91 if (arg.arrayLen > 1) {
92 ret += ", trace::toByteArrayFromArray("_L1 + arg.name + ", "_L1 + QString::number(arg.arrayLen) + ") "_L1;
94 const TraceEnum &e = findEnumeration(provider.enumerations, arg.type);
95 QString integerType;
96 if (e.valueSize == 8)
97 integerType = QStringLiteral("quint8");
98 else if (e.valueSize == 16)
99 integerType = QStringLiteral("quint16");
100 else
101 integerType = QStringLiteral("quint32");
102 ret += ", trace::toByteArrayFromEnum<"_L1 + integerType + ">("_L1 + arg.name + ")"_L1;
103 } else if (field.backendType == Tracepoint::Field::FlagType) {
104 ret += ", trace::toByteArrayFromFlags("_L1 + arg.name + ")"_L1;
105 } else if (field.backendType == Tracepoint::Field::String) {
106 ret += ", trace::toByteArrayFromCString("_L1 + arg.name + ")"_L1;
107 } else {
108 ret += ", "_L1 + arg.name;
109 }
110 }
111 return ret;
112 }
113
114 return joinArguments(args, [](const Tracepoint::Argument &arg) { return arg.name; });
115}
qsizetype size() const noexcept
Definition qlist.h:397
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
QString & replace(qsizetype i, qsizetype len, QChar after)
Definition qstring.cpp:3824
qsizetype size() const noexcept
Returns the number of characters in this string.
Definition qstring.h:186
const QChar at(qsizetype i) const
Returns the character at the given index position in the string.
Definition qstring.h:1226
static QString number(int, int base=10)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition qstring.cpp:8084
QString toUpper() const &
Definition qstring.h:439
\inmodule QtCore
void writeCommonPrologue(QTextStream &stream)
Definition helpers.cpp:9
QString typeToTypeName(const QString &name)
Definition helpers.cpp:14
QString includeGuard(const QString &filename)
Definition helpers.cpp:20
QString formatFunctionSignature(const QList< Tracepoint::Argument > &args)
Definition helpers.cpp:50
QString formatParameterList(const Provider &provider, const QList< Tracepoint::Argument > &args, const QList< Tracepoint::Field > &fields, ParamType type)
Definition helpers.cpp:57
static QString joinArguments(const QList< Tracepoint::Argument > &args, T joinFunction)
Definition helpers.cpp:33
ParamType
Definition helpers.h:13
@ LTTNG
Definition helpers.h:14
@ CTF
Definition helpers.h:16
EGLStreamKHR stream
return ret
GLenum type
GLuint name
GLint first
SSL_CTX int void * arg
#define QStringLiteral(str)
QJSValueList args
QList< TraceEnum > enumerations
Definition provider.h:86
int valueSize
Definition provider.h:63