add interface to check if master field was requested

This commit is contained in:
Sinisa Veseli
2024-04-30 13:04:08 -05:00
parent f207e512d6
commit e0d5925af3
2 changed files with 9 additions and 0 deletions

View File

@ -432,6 +432,7 @@ bool PVCopy::init(epics::pvData::PVStructurePtr const &pvRequest)
PVStructurePtr pvMasterStructure = pvMaster; PVStructurePtr pvMasterStructure = pvMaster;
size_t len = pvRequest->getPVFields().size(); size_t len = pvRequest->getPVFields().size();
bool entireMaster = false; bool entireMaster = false;
requestHasMasterField = false;
PVStructurePtr pvOptions; PVStructurePtr pvOptions;
if(len==0) { if(len==0) {
entireMaster = true; entireMaster = true;
@ -441,6 +442,9 @@ bool PVCopy::init(epics::pvData::PVStructurePtr const &pvRequest)
// then assume the top level PV structure is requested // then assume the top level PV structure is requested
PVStructurePtr masterFieldPtr = pvMaster->getSubField<PVStructure>("_"); PVStructurePtr masterFieldPtr = pvMaster->getSubField<PVStructure>("_");
PVStructurePtr requestFieldPtr = pvRequest->getSubField<PVStructure>("_"); PVStructurePtr requestFieldPtr = pvRequest->getSubField<PVStructure>("_");
if (requestFieldPtr) {
requestHasMasterField = true;
}
if (!masterFieldPtr && requestFieldPtr) { if (!masterFieldPtr && requestFieldPtr) {
entireMaster = true; entireMaster = true;
pvOptions = requestFieldPtr->getSubField<PVStructure>("_options"); pvOptions = requestFieldPtr->getSubField<PVStructure>("_options");

View File

@ -167,6 +167,10 @@ public:
* name is the subField name and value is the subField value. * name is the subField name and value is the subField value.
*/ */
epics::pvData::PVStructurePtr getOptions(std::size_t fieldOffset); epics::pvData::PVStructurePtr getOptions(std::size_t fieldOffset);
/**
* Is master field requested?
*/
bool isMasterFieldRequested() const {return requestHasMasterField;}
/** /**
* For debugging. * For debugging.
*/ */
@ -183,6 +187,7 @@ private:
CopyNodePtr headNode; CopyNodePtr headNode;
epics::pvData::PVStructurePtr cacheInitStructure; epics::pvData::PVStructurePtr cacheInitStructure;
epics::pvData::BitSetPtr ignorechangeBitSet; epics::pvData::BitSetPtr ignorechangeBitSet;
bool requestHasMasterField;
void traverseMaster( void traverseMaster(
CopyNodePtr const &node, CopyNodePtr const &node,