diff --git a/libraries/shared/src/SerDes.cpp b/libraries/shared/src/SerDes.cpp index 044ea1fad2..1b30bf9f63 100644 --- a/libraries/shared/src/SerDes.cpp +++ b/libraries/shared/src/SerDes.cpp @@ -15,15 +15,13 @@ const int DataSerializer::DEFAULT_SIZE; const char DataSerializer::PADDING_CHAR; -QDebug operator<<(QDebug debug, const DataSerializer &ds) { - debug << "{ capacity =" << ds.capacity() << "; length = " << ds.length() << "; pos = " << ds.pos() << "}"; - debug << "\n"; - QString literal; +static void dumpHex(QDebug &debug, const char*buf, size_t len) { + QString literal; QString hex; - for(size_t i=0;i<ds.length();i++) { - char c = ds._store[i]; + for(size_t i=0;i<len;i++) { + char c = buf[i]; if (std::isalnum(c)) { literal.append(c); @@ -38,7 +36,7 @@ QDebug operator<<(QDebug debug, const DataSerializer &ds) { hex.append(hnum + " "); - if ( literal.length() == 16 || (i+1 == ds.length()) ) { + if ( literal.length() == 16 || (i+1 == len) ) { while( literal.length() < 16 ) { literal.append(" "); hex.append(" "); @@ -49,7 +47,24 @@ QDebug operator<<(QDebug debug, const DataSerializer &ds) { hex.clear(); } } +} + +QDebug operator<<(QDebug debug, const DataSerializer &ser) { + debug << "{ capacity =" << ser.capacity() << "; length = " << ser.length() << "; pos = " << ser.pos() << "}"; + debug << "\n"; + + dumpHex(debug, ser.buffer(), ser.length()); + return debug; +} + + +QDebug operator<<(QDebug debug, const DataDeserializer &des) { + debug << "{ length = " << des.length() << "; pos = " << des.pos() << "}"; + debug << "\n"; + + + dumpHex(debug, des.buffer(), des.length()); return debug; } diff --git a/libraries/shared/src/SerDes.h b/libraries/shared/src/SerDes.h index ee38a87aa8..365f14d79c 100644 --- a/libraries/shared/src/SerDes.h +++ b/libraries/shared/src/SerDes.h @@ -103,7 +103,7 @@ class DataSerializer { */ DataSerializer(char *externalStore, size_t storeLength) { _capacity = storeLength; - _length = storeLength; + _length = 0; _pos = 0; _storeIsExternal = true; _store = externalStore; @@ -430,7 +430,7 @@ class DataSerializer { if ( _capacity < _length + bytes) { if ( _storeIsExternal ) { - qCritical() << "Serializer trying to write past end of input, writing" << bytes << "bytes for" << type_name << " from position " << _pos << ", length " << _length; + qCritical() << "Serializer trying to write past end of output buffer, writing" << bytes << "bytes for" << type_name << " from position " << _pos << ", length " << _length; _overflow = true; return false; } diff --git a/tests/shared/src/SerializerTests.cpp b/tests/shared/src/SerializerTests.cpp index 89598a3c2a..c52a9df69c 100644 --- a/tests/shared/src/SerializerTests.cpp +++ b/tests/shared/src/SerializerTests.cpp @@ -20,14 +20,18 @@ void SerializerTests::initTestCase() { } void SerializerTests::testCreate() { - SerDes s; + DataSerializer s; QCOMPARE(s.length(), 0); - QCOMPARE(s.capacity(), SerDes::DEFAULT_SIZE); + QCOMPARE(s.capacity(), DataSerializer::DEFAULT_SIZE); QCOMPARE(s.isEmpty(), true); + + + DataDeserializer d(s); + QCOMPARE(d.length(), 0); } void SerializerTests::testAdd() { - SerDes s; + DataSerializer s; s << (qint8)1; QCOMPARE(s.length(), 1); QCOMPARE(s.isEmpty(), false); @@ -62,7 +66,7 @@ void SerializerTests::testAdd() { } void SerializerTests::testAddAndRead() { - SerDes s; + DataSerializer s; glm::vec3 v3_a{1.f, 3.1415f, 2.71828f}; glm::vec3 v3_b; glm::vec4 v4_a{3.1415f, 2.71828f, 1.4142f, 1.6180f}; @@ -84,17 +88,17 @@ void SerializerTests::testAddAndRead() { qint16 i16; qint32 i32; - s.rewind(); + DataDeserializer d(s); - s >> i8; - s >> i16; - s >> i32; - s >> v3_b; - s >> v4_b; - s >> iv2_b; - s >> f_b; + d >> i8; + d >> i16; + d >> i32; + d >> v3_b; + d >> v4_b; + d >> iv2_b; + d >> f_b; - qDebug() << s; + qDebug() << d; QCOMPARE(i8, (qint8)1); QCOMPARE(i16, (qint16)0xaabb); @@ -106,22 +110,23 @@ void SerializerTests::testAddAndRead() { } void SerializerTests::testReadPastEnd() { - SerDes s; + DataSerializer s; qint8 i8; qint16 i16; s << (qint8)1; - s.rewind(); - s >> i8; - QCOMPARE(s.pos(), 1); - s.rewind(); - s >> i16; - QCOMPARE(s.pos(), 0); + DataDeserializer d(s); + d >> i8; + QCOMPARE(d.pos(), 1); + + d.rewind(); + d >> i16; + QCOMPARE(d.pos(), 0); } void SerializerTests::benchmarkEncodingDynamicAlloc() { QBENCHMARK { - SerDes s; + DataSerializer s; glm::vec3 v3_a{1.f, 3.1415f, 2.71828f}; glm::vec3 v3_b; glm::vec4 v4_a{3.1415f, 2.71828f, 1.4142f, 1.6180f}; @@ -142,7 +147,7 @@ void SerializerTests::benchmarkEncodingStaticAlloc() { char buf[1024]; QBENCHMARK { - SerDes s(buf, sizeof(buf)); + DataSerializer s(buf, sizeof(buf)); glm::vec3 v3_a{1.f, 3.1415f, 2.71828f}; glm::vec3 v3_b; glm::vec4 v4_a{3.1415f, 2.71828f, 1.4142f, 1.6180f}; @@ -161,7 +166,7 @@ void SerializerTests::benchmarkEncodingStaticAlloc() { void SerializerTests::benchmarkDecoding() { - SerDes s; + DataSerializer s; qint8 q8 = 1; qint16 q16 = 0xaabb; qint32 q32 = 0xccddeeff; @@ -182,13 +187,13 @@ void SerializerTests::benchmarkDecoding() { QBENCHMARK { - s.rewind(); - s >> q8; - s >> q16; - s >> q32; - s >> v3_a; - s >> v4_a; - s >> iv2_a; + DataDeserializer d(s); + d >> q8; + d >> q16; + d >> q32; + d >> v3_a; + d >> v4_a; + d >> iv2_a; } }