From d4292d81f2391a5bb5e5747f0f6ceacec028c1e2 Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Wed, 17 Feb 2016 10:15:16 -0500 Subject: [PATCH] BitSet: truncation in or_and For "this |= set1 & set2" the result size should be "max(this, min(set1, set2))" while at present it is "min(set1, set2)" resulting in truncation if the LHS is longer than the RHS. --- src/misc/bitSet.cpp | 3 ++- testApp/misc/testBitSet.cpp | 2 -- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/misc/bitSet.cpp b/src/misc/bitSet.cpp index 2da4fd8..2d34591 100644 --- a/src/misc/bitSet.cpp +++ b/src/misc/bitSet.cpp @@ -279,7 +279,8 @@ namespace epics { namespace pvData { uint32 inUse = (set1.wordsInUse < set2.wordsInUse) ? set1.wordsInUse : set2.wordsInUse; ensureCapacity(inUse); - wordsInUse = inUse; + if(inUse>wordsInUse) + wordsInUse = inUse; // Perform logical AND on words in common for (uint32 i = 0; i < inUse; i++) diff --git a/testApp/misc/testBitSet.cpp b/testApp/misc/testBitSet.cpp index 005e1ba..a378201 100644 --- a/testApp/misc/testBitSet.cpp +++ b/testApp/misc/testBitSet.cpp @@ -152,9 +152,7 @@ static void testOperators() b3.clear(); b3.set(1); std::cout<<"# "<