Allow "meta" at member top of array of struct
This commit is contained in:
@ -74,3 +74,17 @@ record(mbbi, "$(N):ColorMode") {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
record(bo, "$(N):extra") {
|
||||||
|
field(ZNAM, "foo")
|
||||||
|
field(ONAM, "bar")
|
||||||
|
info(Q:group, {
|
||||||
|
"$(N):Array":{
|
||||||
|
"attribute[1].value":{+type:"any",
|
||||||
|
+channel:"VAL",
|
||||||
|
+putorder:0,
|
||||||
|
+trigger:"attribute[1].value"},
|
||||||
|
"attribute[1]":{+type:"meta", +channel:"SEVR"}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
@ -438,6 +438,9 @@ PDBProvider::PDBProvider(const epics::pvAccess::Configuration::const_shared_poin
|
|||||||
else
|
else
|
||||||
builder = builder->addNestedStructure(parts[j].name);
|
builder = builder->addNestedStructure(parts[j].name);
|
||||||
}
|
}
|
||||||
|
if(parts.back().isArray()) {
|
||||||
|
builder = builder->addNestedStructureArray(parts.back().name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!mem.structID.empty())
|
if(!mem.structID.empty())
|
||||||
@ -457,7 +460,7 @@ PDBProvider::PDBProvider(const epics::pvAccess::Configuration::const_shared_poin
|
|||||||
|
|
||||||
std::tr1::shared_ptr<PVIFBuilder> pvifbuilder(PVIFBuilder::create(mem.type, chan.chan));
|
std::tr1::shared_ptr<PVIFBuilder> pvifbuilder(PVIFBuilder::create(mem.type, chan.chan));
|
||||||
|
|
||||||
if(!parts.empty())
|
if(!parts.empty() && !parts.back().isArray())
|
||||||
builder = pvifbuilder->dtype(builder, parts.back().name);
|
builder = pvifbuilder->dtype(builder, parts.back().name);
|
||||||
else
|
else
|
||||||
builder = pvifbuilder->dtype(builder, "");
|
builder = pvifbuilder->dtype(builder, "");
|
||||||
@ -465,6 +468,8 @@ PDBProvider::PDBProvider(const epics::pvAccess::Configuration::const_shared_poin
|
|||||||
if(!parts.empty()) {
|
if(!parts.empty()) {
|
||||||
for(size_t j=0; j<parts.size()-1; j++)
|
for(size_t j=0; j<parts.size()-1; j++)
|
||||||
builder = builder->endNested();
|
builder = builder->endNested();
|
||||||
|
if(parts.back().isArray())
|
||||||
|
builder = builder->endNested();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!mem.pvname.empty()) {
|
if(!mem.pvname.empty()) {
|
||||||
@ -744,8 +749,6 @@ FieldName::FieldName(const std::string& pv)
|
|||||||
}
|
}
|
||||||
if(parts.empty())
|
if(parts.empty())
|
||||||
throw std::runtime_error("Empty field name");
|
throw std::runtime_error("Empty field name");
|
||||||
if(parts.back().isArray())
|
|
||||||
throw std::runtime_error("leaf field may not have sub-script : "+pv);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
epics::pvData::PVFieldPtr
|
epics::pvData::PVFieldPtr
|
||||||
|
Reference in New Issue
Block a user