From 69839b4b16462e401eca672a84a04a89fe725f73 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Mon, 4 Jan 2016 17:50:25 -0800 Subject: [PATCH] better packing of qvector of quats --- libraries/octree/src/OctreePacketData.cpp | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/libraries/octree/src/OctreePacketData.cpp b/libraries/octree/src/OctreePacketData.cpp index d515244f64..909e0889c3 100644 --- a/libraries/octree/src/OctreePacketData.cpp +++ b/libraries/octree/src/OctreePacketData.cpp @@ -395,13 +395,17 @@ bool OctreePacketData::appendValue(const QVector& value) { bool OctreePacketData::appendValue(const QVector& value) { uint16_t qVecSize = value.size(); bool success = appendValue(qVecSize); + if (success) { - success = append((const unsigned char*)value.constData(), qVecSize * sizeof(glm::quat)); - if (success) { - _bytesOfValues += qVecSize * sizeof(glm::quat); - _totalBytesOfValues += qVecSize * sizeof(glm::quat); + QByteArray dataByteArray(udt::MAX_PACKET_SIZE, 0); + unsigned char* start = reinterpret_cast(dataByteArray.data()); + unsigned char* destinationBuffer = start; + for (int index = 0; index < value.size(); index++) { + destinationBuffer += packOrientationQuatToBytes(destinationBuffer, value[index]); } + success = append(start, destinationBuffer - start); } + return success; } @@ -649,11 +653,16 @@ int OctreePacketData::unpackDataFromBytes(const unsigned char *dataBytes, QVecto int OctreePacketData::unpackDataFromBytes(const unsigned char *dataBytes, QVector& result) { uint16_t length; + const unsigned char *start = dataBytes; memcpy(&length, dataBytes, sizeof(uint16_t)); dataBytes += sizeof(length); result.resize(length); - memcpy(result.data(), dataBytes, length * sizeof(glm::quat)); - return sizeof(uint16_t) + length * sizeof(glm::quat); + + for (int i = 0; i < length; i++) { + dataBytes += unpackOrientationQuatFromBytes(dataBytes, result[i]); + } + + return dataBytes - start; } int OctreePacketData::unpackDataFromBytes(const unsigned char* dataBytes, QVector& result) {