diff options
author | Antti Hölttä <AHoelttae@luxoft.com> | 2017-10-26 10:52:35 +0200 |
---|---|---|
committer | Dominik Holland <dominik.holland@pelagicore.com> | 2017-11-02 07:50:14 +0000 |
commit | 489d2d4bd6c4602729f2dfe75f4a3b966b693c9c (patch) | |
tree | 86d9c7b4ff4afab6b1aa90d31e9fb31c03a6acfb /src/tools/ivigenerator/templates_frontend/module.cpp.tpl | |
parent | 585bb90e6cf2098d42039fb04354a3223b9e10ef (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.tpl | 35 |
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 %} |