From 758beff3d9b15391b656af283e1ab2626ed6d815 Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Tue, 17 Jun 2014 17:06:28 -0700 Subject: [PATCH] Make sure to use same enum streamer for the ones registered by type and the ones registered by scope/name. --- libraries/metavoxels/src/Bitstream.cpp | 14 +++++++++++--- tests/metavoxels/src/MetavoxelTests.cpp | 2 -- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/libraries/metavoxels/src/Bitstream.cpp b/libraries/metavoxels/src/Bitstream.cpp index 9f6ceb9b2e..d78b16aab4 100644 --- a/libraries/metavoxels/src/Bitstream.cpp +++ b/libraries/metavoxels/src/Bitstream.cpp @@ -1621,6 +1621,10 @@ const QHash& Bitstream::getEnumStreamers() { return enumStreamers; } +static QByteArray getEnumName(const char* scope, const char* name) { + return QByteArray(scope) + "::" + name; +} + QHash Bitstream::createEnumStreamers() { QHash enumStreamers; foreach (const QMetaObject* metaObject, getMetaObjects()) { @@ -1628,7 +1632,11 @@ QHash Bitstream::createEnumStreamers() { QMetaEnum metaEnum = metaObject->enumerator(i); const TypeStreamer*& streamer = enumStreamers[ScopeNamePair(metaEnum.scope(), metaEnum.name())]; if (!streamer) { - streamer = new EnumTypeStreamer(metaEnum); + // look for a streamer registered by name + streamer = getTypeStreamers().value(QMetaType::type(getEnumName(metaEnum.scope(), metaEnum.name()))); + if (!streamer) { + streamer = new EnumTypeStreamer(metaEnum); + } } } } @@ -2705,7 +2713,7 @@ QDebug& operator<<(QDebug& debug, const QMetaObject* metaObject) { EnumTypeStreamer::EnumTypeStreamer(const QMetaObject* metaObject, const char* name) : _metaObject(metaObject), _enumName(name), - _name(QByteArray(metaObject->className()) + "::" + name), + _name(getEnumName(metaObject->className(), name)), _bits(-1) { _type = QMetaType::Int; @@ -2713,7 +2721,7 @@ EnumTypeStreamer::EnumTypeStreamer(const QMetaObject* metaObject, const char* na } EnumTypeStreamer::EnumTypeStreamer(const QMetaEnum& metaEnum) : - _name(QByteArray(metaEnum.scope()) + "::" + metaEnum.name()), + _name(getEnumName(metaEnum.scope(), metaEnum.name())), _metaEnum(metaEnum), _bits(-1) { diff --git a/tests/metavoxels/src/MetavoxelTests.cpp b/tests/metavoxels/src/MetavoxelTests.cpp index 85be9a5c8b..4a3010caf4 100644 --- a/tests/metavoxels/src/MetavoxelTests.cpp +++ b/tests/metavoxels/src/MetavoxelTests.cpp @@ -255,8 +255,6 @@ static bool testSerialization(Bitstream::MetadataType metadataType) { jsonWriter << endRead; QByteArray encodedJson = jsonWriter.getDocument().toJson(); - qDebug() << encodedJson; - // and read from JSON JSONReader jsonReader(QJsonDocument::fromJson(encodedJson), Bitstream::ALL_GENERICS); jsonReader >> testObjectReadA;