QWaylandScanner: port from QList to std::vector
QList is going away in Qt 6, and CoW is not needed, as containers and elements are only ever moved, not copied, and NRVO is in effect everywhere. Change-Id: Ie738da3619f0b8048fbd07e5911db0960133d553 Reviewed-by: Johan Helsing <johan.helsing@qt.io>
This commit is contained in:
parent
ff42bda500
commit
738d8a57b1
@ -40,7 +40,8 @@
|
|||||||
#include <QCoreApplication>
|
#include <QCoreApplication>
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
#include <QXmlStreamReader>
|
#include <QXmlStreamReader>
|
||||||
#include <QtCore/QList>
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
class Scanner
|
class Scanner
|
||||||
{
|
{
|
||||||
@ -63,7 +64,7 @@ private:
|
|||||||
struct WaylandEnum {
|
struct WaylandEnum {
|
||||||
QByteArray name;
|
QByteArray name;
|
||||||
|
|
||||||
QList<WaylandEnumEntry> entries;
|
std::vector<WaylandEnumEntry> entries;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct WaylandArgument {
|
struct WaylandArgument {
|
||||||
@ -78,16 +79,16 @@ private:
|
|||||||
bool request;
|
bool request;
|
||||||
QByteArray name;
|
QByteArray name;
|
||||||
QByteArray type;
|
QByteArray type;
|
||||||
QList<WaylandArgument> arguments;
|
std::vector<WaylandArgument> arguments;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct WaylandInterface {
|
struct WaylandInterface {
|
||||||
QByteArray name;
|
QByteArray name;
|
||||||
int version;
|
int version;
|
||||||
|
|
||||||
QList<WaylandEnum> enums;
|
std::vector<WaylandEnum> enums;
|
||||||
QList<WaylandEvent> events;
|
std::vector<WaylandEvent> events;
|
||||||
QList<WaylandEvent> requests;
|
std::vector<WaylandEvent> requests;
|
||||||
};
|
};
|
||||||
|
|
||||||
bool isServerSide();
|
bool isServerSide();
|
||||||
@ -101,11 +102,11 @@ private:
|
|||||||
Scanner::WaylandInterface readInterface(QXmlStreamReader &xml);
|
Scanner::WaylandInterface readInterface(QXmlStreamReader &xml);
|
||||||
QByteArray waylandToCType(const QByteArray &waylandType, const QByteArray &interface);
|
QByteArray waylandToCType(const QByteArray &waylandType, const QByteArray &interface);
|
||||||
QByteArray waylandToQtType(const QByteArray &waylandType, const QByteArray &interface, bool cStyleArray);
|
QByteArray waylandToQtType(const QByteArray &waylandType, const QByteArray &interface, bool cStyleArray);
|
||||||
const Scanner::WaylandArgument *newIdArgument(const QList<WaylandArgument> &arguments);
|
const Scanner::WaylandArgument *newIdArgument(const std::vector<WaylandArgument> &arguments);
|
||||||
|
|
||||||
void printEvent(const WaylandEvent &e, bool omitNames = false, bool withResource = false);
|
void printEvent(const WaylandEvent &e, bool omitNames = false, bool withResource = false);
|
||||||
void printEventHandlerSignature(const WaylandEvent &e, const char *interfaceName, bool deepIndent = true);
|
void printEventHandlerSignature(const WaylandEvent &e, const char *interfaceName, bool deepIndent = true);
|
||||||
void printEnums(const QList<WaylandEnum> &enums);
|
void printEnums(const std::vector<WaylandEnum> &enums);
|
||||||
|
|
||||||
QByteArray stripInterfaceName(const QByteArray &name);
|
QByteArray stripInterfaceName(const QByteArray &name);
|
||||||
bool ignoreInterface(const QByteArray &name);
|
bool ignoreInterface(const QByteArray &name);
|
||||||
@ -204,7 +205,7 @@ Scanner::WaylandEvent Scanner::readEvent(QXmlStreamReader &xml, bool request)
|
|||||||
.summary = byteArrayValue(xml, "summary"),
|
.summary = byteArrayValue(xml, "summary"),
|
||||||
.allowNull = boolValue(xml, "allowNull"),
|
.allowNull = boolValue(xml, "allowNull"),
|
||||||
};
|
};
|
||||||
event.arguments << argument;
|
event.arguments.push_back(std::move(argument));
|
||||||
}
|
}
|
||||||
|
|
||||||
xml.skipCurrentElement();
|
xml.skipCurrentElement();
|
||||||
@ -226,7 +227,7 @@ Scanner::WaylandEnum Scanner::readEnum(QXmlStreamReader &xml)
|
|||||||
.value = byteArrayValue(xml, "value"),
|
.value = byteArrayValue(xml, "value"),
|
||||||
.summary = byteArrayValue(xml, "summary"),
|
.summary = byteArrayValue(xml, "summary"),
|
||||||
};
|
};
|
||||||
result.entries << entry;
|
result.entries.push_back(std::move(entry));
|
||||||
}
|
}
|
||||||
|
|
||||||
xml.skipCurrentElement();
|
xml.skipCurrentElement();
|
||||||
@ -247,11 +248,11 @@ Scanner::WaylandInterface Scanner::readInterface(QXmlStreamReader &xml)
|
|||||||
|
|
||||||
while (xml.readNextStartElement()) {
|
while (xml.readNextStartElement()) {
|
||||||
if (xml.name() == "event")
|
if (xml.name() == "event")
|
||||||
interface.events << readEvent(xml, false);
|
interface.events.push_back(readEvent(xml, false));
|
||||||
else if (xml.name() == "request")
|
else if (xml.name() == "request")
|
||||||
interface.requests << readEvent(xml, true);
|
interface.requests.push_back(readEvent(xml, true));
|
||||||
else if (xml.name() == "enum")
|
else if (xml.name() == "enum")
|
||||||
interface.enums << readEnum(xml);
|
interface.enums.push_back(readEnum(xml));
|
||||||
else
|
else
|
||||||
xml.skipCurrentElement();
|
xml.skipCurrentElement();
|
||||||
}
|
}
|
||||||
@ -293,7 +294,7 @@ QByteArray Scanner::waylandToQtType(const QByteArray &waylandType, const QByteAr
|
|||||||
return waylandToCType(waylandType, interface);
|
return waylandToCType(waylandType, interface);
|
||||||
}
|
}
|
||||||
|
|
||||||
const Scanner::WaylandArgument *Scanner::newIdArgument(const QList<WaylandArgument> &arguments)
|
const Scanner::WaylandArgument *Scanner::newIdArgument(const std::vector<WaylandArgument> &arguments)
|
||||||
{
|
{
|
||||||
for (const WaylandArgument &a : arguments) {
|
for (const WaylandArgument &a : arguments) {
|
||||||
if (a.type == "new_id")
|
if (a.type == "new_id")
|
||||||
@ -368,7 +369,7 @@ void Scanner::printEventHandlerSignature(const WaylandEvent &e, const char *inte
|
|||||||
printf(")");
|
printf(")");
|
||||||
}
|
}
|
||||||
|
|
||||||
void Scanner::printEnums(const QList<WaylandEnum> &enums)
|
void Scanner::printEnums(const std::vector<WaylandEnum> &enums)
|
||||||
{
|
{
|
||||||
for (const WaylandEnum &e : enums) {
|
for (const WaylandEnum &e : enums) {
|
||||||
printf("\n");
|
printf("\n");
|
||||||
@ -428,11 +429,11 @@ bool Scanner::process()
|
|||||||
//QByteArray preProcessorProtocolName = QByteArray(m_protocolName).replace('-', '_').toUpper();
|
//QByteArray preProcessorProtocolName = QByteArray(m_protocolName).replace('-', '_').toUpper();
|
||||||
QByteArray preProcessorProtocolName = QByteArray(m_protocolName).toUpper();
|
QByteArray preProcessorProtocolName = QByteArray(m_protocolName).toUpper();
|
||||||
|
|
||||||
QList<WaylandInterface> interfaces;
|
std::vector<WaylandInterface> interfaces;
|
||||||
|
|
||||||
while (m_xml->readNextStartElement()) {
|
while (m_xml->readNextStartElement()) {
|
||||||
if (m_xml->name() == "interface")
|
if (m_xml->name() == "interface")
|
||||||
interfaces << readInterface(*m_xml);
|
interfaces.push_back(readInterface(*m_xml));
|
||||||
else
|
else
|
||||||
m_xml->skipCurrentElement();
|
m_xml->skipCurrentElement();
|
||||||
}
|
}
|
||||||
@ -546,7 +547,7 @@ bool Scanner::process()
|
|||||||
|
|
||||||
printEnums(interface.enums);
|
printEnums(interface.enums);
|
||||||
|
|
||||||
bool hasEvents = !interface.events.isEmpty();
|
bool hasEvents = !interface.events.empty();
|
||||||
|
|
||||||
if (hasEvents) {
|
if (hasEvents) {
|
||||||
printf("\n");
|
printf("\n");
|
||||||
@ -567,7 +568,7 @@ bool Scanner::process()
|
|||||||
printf(" virtual void %s_bind_resource(Resource *resource);\n", interfaceNameStripped);
|
printf(" virtual void %s_bind_resource(Resource *resource);\n", interfaceNameStripped);
|
||||||
printf(" virtual void %s_destroy_resource(Resource *resource);\n", interfaceNameStripped);
|
printf(" virtual void %s_destroy_resource(Resource *resource);\n", interfaceNameStripped);
|
||||||
|
|
||||||
bool hasRequests = !interface.requests.isEmpty();
|
bool hasRequests = !interface.requests.empty();
|
||||||
|
|
||||||
if (hasRequests) {
|
if (hasRequests) {
|
||||||
printf("\n");
|
printf("\n");
|
||||||
@ -781,7 +782,7 @@ bool Scanner::process()
|
|||||||
printf(" }\n");
|
printf(" }\n");
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
||||||
bool hasRequests = !interface.requests.isEmpty();
|
bool hasRequests = !interface.requests.empty();
|
||||||
|
|
||||||
QByteArray interfaceMember = hasRequests ? "&m_" + interface.name + "_interface" : QByteArray("nullptr");
|
QByteArray interfaceMember = hasRequests ? "&m_" + interface.name + "_interface" : QByteArray("nullptr");
|
||||||
|
|
||||||
@ -997,7 +998,7 @@ bool Scanner::process()
|
|||||||
|
|
||||||
printEnums(interface.enums);
|
printEnums(interface.enums);
|
||||||
|
|
||||||
if (!interface.requests.isEmpty()) {
|
if (!interface.requests.empty()) {
|
||||||
printf("\n");
|
printf("\n");
|
||||||
for (const WaylandEvent &e : interface.requests) {
|
for (const WaylandEvent &e : interface.requests) {
|
||||||
const WaylandArgument *new_id = newIdArgument(e.arguments);
|
const WaylandArgument *new_id = newIdArgument(e.arguments);
|
||||||
@ -1014,7 +1015,7 @@ bool Scanner::process()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool hasEvents = !interface.events.isEmpty();
|
bool hasEvents = !interface.events.empty();
|
||||||
|
|
||||||
if (hasEvents) {
|
if (hasEvents) {
|
||||||
printf("\n");
|
printf("\n");
|
||||||
@ -1092,7 +1093,7 @@ bool Scanner::process()
|
|||||||
QByteArray stripped = stripInterfaceName(interface.name);
|
QByteArray stripped = stripInterfaceName(interface.name);
|
||||||
const char *interfaceNameStripped = stripped.constData();
|
const char *interfaceNameStripped = stripped.constData();
|
||||||
|
|
||||||
bool hasEvents = !interface.events.isEmpty();
|
bool hasEvents = !interface.events.empty();
|
||||||
|
|
||||||
printf(" %s::%s(struct ::wl_registry *registry, int id, int version)\n", interfaceName, interfaceName);
|
printf(" %s::%s(struct ::wl_registry *registry, int id, int version)\n", interfaceName, interfaceName);
|
||||||
printf(" {\n");
|
printf(" {\n");
|
||||||
@ -1182,7 +1183,7 @@ bool Scanner::process()
|
|||||||
printf(" %s.alloc = 0;\n", arrayName);
|
printf(" %s.alloc = 0;\n", arrayName);
|
||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
int actualArgumentCount = new_id ? e.arguments.size() - 1 : e.arguments.size();
|
int actualArgumentCount = new_id ? int(e.arguments.size()) - 1 : int(e.arguments.size());
|
||||||
printf(" %s%s_%s(\n", new_id ? "return " : "", interfaceName, e.name.constData());
|
printf(" %s%s_%s(\n", new_id ? "return " : "", interfaceName, e.name.constData());
|
||||||
printf(" m_%s%s", interfaceName, actualArgumentCount > 0 ? "," : "");
|
printf(" m_%s%s", interfaceName, actualArgumentCount > 0 ? "," : "");
|
||||||
bool needsComma = false;
|
bool needsComma = false;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user