Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
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
9void writeCommonPrologue(QTextStream &stream)
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
18QString typeToTypeName(const QString &name)
19{
20 QString ret = name;
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{
39 QString ret;
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) {
64 QString ret;
65
66 for (int i = 0; i < args.size(); i++) {
67 const Tracepoint::Argument &arg = args[i];
68 const Tracepoint::Field &field = fields[i];
69 if (field.backendType == Tracepoint::Field::FlagType)
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) {
86 QString ret;
87
88 for (int i = 0; i < args.size(); i++) {
89 const Tracepoint::Argument &arg = args[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;
93 } else if (field.backendType == Tracepoint::Field::EnumeratedType) {
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}
Definition qlist.h:80
void writeCommonPrologue(QTextStream &stream)
Definition helpers.cpp:9
QString typeToTypeName(const QString &type)
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
#define QStringLiteral(str)
Definition qstring.h:1826