aboutsummaryrefslogtreecommitdiffstats
path: root/src/tools/ivigenerator/templates_frontend/module.cpp.tpl
diff options
context:
space:
mode:
authorAntti Hölttä <AHoelttae@luxoft.com>2017-10-26 10:52:35 +0200
committerDominik Holland <dominik.holland@pelagicore.com>2017-11-02 07:50:14 +0000
commit489d2d4bd6c4602729f2dfe75f4a3b966b693c9c (patch)
tree86d9c7b4ff4afab6b1aa90d31e9fb31c03a6acfb /src/tools/ivigenerator/templates_frontend/module.cpp.tpl
parent585bb90e6cf2098d42039fb04354a3223b9e10ef (diff)
Add stream serialization functions for generated structs and enums5.10
Add stream operators and equality-operators for the struct template. Change existing enum stream operators to check values outside of the enums range. These are needed for serializing of types eg. when using generated types over QTRO. Change-Id: I169b3d598b65eaae2de8562507a66ee996b81081 Reviewed-by: Dominik Holland <dominik.holland@pelagicore.com>
Diffstat (limited to 'src/tools/ivigenerator/templates_frontend/module.cpp.tpl')
-rw-r--r--src/tools/ivigenerator/templates_frontend/module.cpp.tpl35
1 files changed, 30 insertions, 5 deletions
diff --git a/src/tools/ivigenerator/templates_frontend/module.cpp.tpl b/src/tools/ivigenerator/templates_frontend/module.cpp.tpl
index 2ce7b9b..2a2d7b9 100644
--- a/src/tools/ivigenerator/templates_frontend/module.cpp.tpl
+++ b/src/tools/ivigenerator/templates_frontend/module.cpp.tpl
@@ -46,6 +46,7 @@
#include "{{interface|lower}}.h"
{% endfor %}
#include <QQmlEngine>
+#include <QDebug>
#include <QDataStream>
QT_BEGIN_NAMESPACE
@@ -79,6 +80,24 @@ QObject* {{class|lower}}_singletontype_provider(QQmlEngine*, QJSEngine*)
{
}
+{% for enum in module.enums %}
+{{class}}::{{enum}} {{class}}::to{{enum}}(quint8 v, bool *ok) {
+ if (ok) {
+ *ok = true;
+ }
+ switch (v) {
+{% for member in enum.members %}
+ case {{member.value}}: return {{member.name}};
+{% endfor %}
+ default:
+ if (ok) {
+ *ok = false;
+ }
+ return {{enum.members|first}};
+ }
+}
+
+{% endfor %}
/*! \internal */
void {{class}}::registerTypes()
{
@@ -88,6 +107,7 @@ void {{class}}::registerTypes()
{% endfor %}
{% for struct in module.structs %}
qRegisterMetaType<{{struct}}>();
+ qRegisterMetaTypeStreamOperators<{{struct}}>();
{% endfor %}
}
@@ -101,18 +121,23 @@ void {{class}}::registerQmlTypes(const QString& uri, int majorVersion, int minor
{{interface}}::registerQmlTypes(uri, majorVersion, minorVersion);
{% endfor %}
}
-
{% for enum in module.enums %}
+
QDataStream &operator<<(QDataStream &out, {{class}}::{{enum|flag_type}} var)
{
- out << (int)var;
+ out << (quint8)var;
return out;
}
+
QDataStream &operator>>(QDataStream &in, {{class}}::{{enum|flag_type}} &var)
{
- int temp;
- in >> temp;
- var = ({{class}}::{{enum|flag_type}})temp;
+ bool ok;
+ quint8 val;
+ in >> val;
+ var = {{class}}::to{{enum}}(val, &ok);
+ if (!ok) {
+ qWarning() << "Received an invalid enum value for type {{class}}::{{enum|flag_type}}, value =" << var;
+ }
return in;
}
{% endfor %}