9 #define epicsExportSharedSymbols 14 namespace epics {
namespace pvData {
19 static bool checkBitSetPVField(
22 int32 offset = initialOffset;
23 int32 nbits =
static_cast<int32>(pvField->getNumberFields());
24 if(nbits==1)
return bitSet->get(offset);
25 int32 nextSetBit = bitSet->nextSetBit(offset);
26 if(nextSetBit>=(offset+nbits))
return false;
27 if(nextSetBit<0)
return false;
28 if(bitSet->get(offset)) {
30 for(
int32 i=offset+1;
i<offset+nbits;
i++) bitSet->clear(
i);
35 bool atLeastOneBitSet =
false;
36 bool allBitsSet =
true;
38 offset =
static_cast<int32>(pvStructure->getFieldOffset()) + 1;
39 while(offset<initialOffset + nbits) {
40 PVFieldPtr pvSubField = pvStructure->getSubFieldT(offset);
41 int32 nbitsNow =
static_cast<int32>(pvSubField->getNumberFields());
43 if(bitSet->get(offset)) {
44 atLeastOneBitSet =
true;
50 bool result = checkBitSetPVField(pvSubField,bitSet,offset);
52 atLeastOneBitSet =
true;
53 if(!bitSet->get(offset)) {
59 offset +=
static_cast<int32>(pvSubField->getNumberFields());
64 for(
int32 i=initialOffset+1;
i<initialOffset+nbits;
i++){
68 bitSet->set(initialOffset);
70 return atLeastOneBitSet;
75 return checkBitSetPVField(pvStructure,bitSet,0);
shared_ptr< T > static_pointer_cast(shared_ptr< U > const &r) BOOST_NOEXCEPT
TODO only here because of the Lockable.
static bool compress(BitSetPtr const &bitSet, PVStructurePtr const &pvStructure)
std::tr1::shared_ptr< PVStructure > PVStructurePtr
std::tr1::shared_ptr< PVField > PVFieldPtr
std::tr1::shared_ptr< BitSet > BitSetPtr