From 65ff7ab1c3d8a532472b39af40acaf3480008a8b Mon Sep 17 00:00:00 2001 From: Matej Sekoranja Date: Fri, 12 Feb 2016 19:35:44 +0100 Subject: [PATCH] fixed bitSet serialization --- src/misc/bitSet.cpp | 12 ++-- testApp/misc/testBitSet.cpp | 112 +++++++++++++++++++++++++++++++++++- 2 files changed, 117 insertions(+), 7 deletions(-) diff --git a/src/misc/bitSet.cpp b/src/misc/bitSet.cpp index 2da4fd8..2b485c0 100644 --- a/src/misc/bitSet.cpp +++ b/src/misc/bitSet.cpp @@ -322,12 +322,14 @@ namespace epics { namespace pvData { SerializeHelper::writeSize(len, buffer, flusher); flusher->ensureBuffer(len); - - for (uint32 i = 0; i < n - 1; i++) + + n = len / 8; + for (uint32 i = 0; i < n; i++) buffer->putLong(words[i]); - - for (uint64 x = words[n - 1]; x != 0; x >>= 8) - buffer->putByte((int8) (x & 0xff)); + + if (n < wordsInUse) + for (uint64 x = words[wordsInUse - 1]; x != 0; x >>= 8) + buffer->putByte((int8) (x & 0xff)); } void BitSet::deserialize(ByteBuffer* buffer, DeserializableControl* control) { diff --git a/testApp/misc/testBitSet.cpp b/testApp/misc/testBitSet.cpp index 36fc645..9b7c7c5 100644 --- a/testApp/misc/testBitSet.cpp +++ b/testApp/misc/testBitSet.cpp @@ -7,6 +7,7 @@ /* Author: Matej Sekoranja Date: 2010.10.18 */ #include +#include #include #include #include @@ -14,7 +15,10 @@ #include #include +#include + #include +#include #include #include @@ -148,12 +152,116 @@ static void testOperators() testOk1(str == "{2, 128}"); } +static void tofrostring(const BitSet& in, const char *expect, size_t elen, int byteOrder) +{ + { + std::vector buf; + serializeToVector(&in, byteOrder, buf); + + std::ostringstream astrm, estrm; + + bool match = buf.size()==elen; + if(!match) testDiag("Lengths differ %u != %u", (unsigned)buf.size(), (unsigned)elen); + for(size_t i=0, e=std::min(elen, buf.size()); i