From 4cef1135a3794d602b284dac1bc0fbec0355372f Mon Sep 17 00:00:00 2001 From: Matej Sekoranja Date: Mon, 10 Sep 2012 08:56:11 +0200 Subject: [PATCH] PVStructure serialization fixed --- pvDataApp/factory/PVStructure.cpp | 15 ++++++++------- pvDataApp/misc/bitSet.h | 2 +- pvDataApp/pvMisc/bitSetUtil.cpp | 16 ++++++++-------- 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/pvDataApp/factory/PVStructure.cpp b/pvDataApp/factory/PVStructure.cpp index 2e5d506..7090997 100644 --- a/pvDataApp/factory/PVStructure.cpp +++ b/pvDataApp/factory/PVStructure.cpp @@ -573,15 +573,15 @@ void PVStructure::deserialize(ByteBuffer *pbuffer, void PVStructure::serialize(ByteBuffer *pbuffer, SerializableControl *pflusher, BitSet *pbitSet) const { - size_t offset = const_cast(this)->getFieldOffset(); size_t numberFields = const_cast(this)->getNumberFields(); - size_t next = pbitSet->nextSetBit(offset); + size_t offset = const_cast(this)->getFieldOffset(); + int32 next = pbitSet->nextSetBit(offset); // no more changes or no changes in this structure - if(next<0||next>=offset+numberFields) return; + if(next<0||next>=static_cast(offset+numberFields)) return; // entire structure - if(offset==next) { + if(static_cast(offset)==next) { serialize(pbuffer, pflusher); return; } @@ -589,15 +589,16 @@ void PVStructure::serialize(ByteBuffer *pbuffer, for(size_t i = 0; igetFieldOffset(); - numberFields = pvField->getNumberFields(); + int32 inumberFields = pvField->getNumberFields(); next = pbitSet->nextSetBit(offset); + // no more changes if(next<0) return; // no change in this pvField - if(next>=offset+numberFields) continue; + if(next>=static_cast(offset+inumberFields)) continue; // serialize field or fields - if(numberFields==1) { + if(inumberFields==1) { pvField->serialize(pbuffer, pflusher); } else { PVStructurePtr pvStructure = std::tr1::static_pointer_cast(pvField); diff --git a/pvDataApp/misc/bitSet.h b/pvDataApp/misc/bitSet.h index 0e6334d..d700784 100644 --- a/pvDataApp/misc/bitSet.h +++ b/pvDataApp/misc/bitSet.h @@ -120,7 +120,7 @@ namespace epics { namespace pvData { * use the following loop: * *
 {@code
-         * for (int i = bs.nextSetBit(0); i >= 0; i = bs.nextSetBit(i+1)) {
+         * for (int32 i = bs.nextSetBit(0); i >= 0; i = bs.nextSetBit(i+1)) {
          *     // operate on index i here
          * }}
* diff --git a/pvDataApp/pvMisc/bitSetUtil.cpp b/pvDataApp/pvMisc/bitSetUtil.cpp index 8df28ba..cf6569d 100644 --- a/pvDataApp/pvMisc/bitSetUtil.cpp +++ b/pvDataApp/pvMisc/bitSetUtil.cpp @@ -14,25 +14,25 @@ namespace epics { namespace pvData { static bool checkBitSetPVField( - PVField *pvField,BitSet *bitSet,int initialOffset) + PVField *pvField,BitSet *bitSet,int32 initialOffset) { bool atLeastOneBitSet = false; bool allBitsSet = true; - int offset = initialOffset; - int nbits = pvField->getNumberFields(); + int32 offset = initialOffset; + int32 nbits = pvField->getNumberFields(); if(nbits==1) return bitSet->get(offset); - int nextSetBit = bitSet->nextSetBit(offset); + int32 nextSetBit = bitSet->nextSetBit(offset); if(nextSetBit>=(offset+nbits)) return false; if(bitSet->get(offset)) { if(nbits>1) { - for(int i=offset+1; iclear(i); + for(int32 i=offset+1; iclear(i); } return true; } PVStructure *pvStructure = static_cast(pvField); while(offsetgetSubField(offset).get(); - int nbitsNow = pvSubField->getNumberFields(); + int32 nbitsNow = pvSubField->getNumberFields(); if(nbitsNow==1) { if(bitSet->get(offset)) { atLeastOneBitSet = true; @@ -46,7 +46,7 @@ static bool checkBitSetPVField( PVFieldPtrArray pvSubStructureFields = pvSubStructure->getPVFields(); int num = pvSubStructure->getStructure()->getNumberFields(); - for(int i=0; i1) { - for(int i=initialOffset+1; iclear(i); } }