9 #define epicsExportSharedSymbols 17 namespace epics {
namespace nt {
23 StructureConstPtr NTNDArrayAttributeBuilder::createStructure()
25 FieldBuilderPtr builder =
26 getFieldCreate()->createFieldBuilder()->
27 setId(NTNDArrayAttribute::URI)->
28 add(
"name", pvString)->
29 add(
"value", getFieldCreate()->createVariantUnion());
32 builder->addArray(
"tags", pvString);
34 builder->add(
"descriptor", pvString);
36 builder->add(
"sourceType", pvInt);
38 builder->add(
"source", pvString);
41 builder->add(
"alarm", ntField->createAlarm());
44 builder->add(
"timeStamp", ntField->createTimeStamp());
46 size_t extraCount = extraFieldNames.size();
47 for (
size_t i = 0; i< extraCount; i++)
48 builder->add(extraFieldNames[i], extraFields[i]);
51 StructureConstPtr s = builder->createStructure();
57 NTNDArrayAttributeBuilder::shared_pointer NTNDArrayAttributeBuilder::addTags()
60 return shared_from_this();
63 NTNDArrayAttributeBuilder::shared_pointer NTNDArrayAttributeBuilder::addDescriptor()
66 return shared_from_this();
69 NTNDArrayAttributeBuilder::shared_pointer NTNDArrayAttributeBuilder::addAlarm()
72 return shared_from_this();
75 NTNDArrayAttributeBuilder::shared_pointer NTNDArrayAttributeBuilder::addTimeStamp()
78 return shared_from_this();
81 PVStructurePtr NTNDArrayAttributeBuilder::createPVStructure()
83 return getPVDataCreate()->createPVStructure(createStructure());
91 NTNDArrayAttributeBuilder::NTNDArrayAttributeBuilder()
96 void NTNDArrayAttributeBuilder::reset()
102 extraFieldNames.clear();
106 NTNDArrayAttributeBuilder::shared_pointer NTNDArrayAttributeBuilder::add(
string const & name, FieldConstPtr
const & field)
108 extraFields.push_back(field); extraFieldNames.push_back(name);
109 return shared_from_this();
114 const std::string NTNDArrayAttribute::URI(
"epics:nt/NTAttribute:1.0");
116 NTNDArrayAttribute::shared_pointer NTNDArrayAttribute::wrap(PVStructurePtr
const & pvStructure)
118 if(!isCompatible(pvStructure))
return shared_pointer();
119 return wrapUnsafe(pvStructure);
122 NTNDArrayAttribute::shared_pointer NTNDArrayAttribute::wrapUnsafe(PVStructurePtr
const & pvStructure)
127 bool NTNDArrayAttribute::is_a(StructureConstPtr
const & structure)
129 return NTUtils::is_a(structure->getID(), URI);
132 bool NTNDArrayAttribute::is_a(PVStructurePtr
const & pvStructure)
134 return is_a(pvStructure->getStructure());
137 Result& NTNDArrayAttribute::isAttribute(
Result& result) {
142 .has<Scalar>(
"descriptor")
143 .
maybeHas<&NTField::isAlarm, Structure>(
"alarm")
144 .maybeHas<&NTField::isTimeStamp, Structure>(
"timeStamp")
145 .
has<Scalar>(
"sourceType")
146 .has<Scalar>(
"source");
149 bool NTNDArrayAttribute::isCompatible(StructureConstPtr
const & structure)
155 return isAttribute(result.
is<Structure>()).valid();
158 bool NTNDArrayAttribute::isCompatible(PVStructurePtr
const & pvStructure)
160 if(!pvStructure)
return false;
162 return isCompatible(pvStructure->getStructure());
165 bool NTNDArrayAttribute::isValid()
175 bool NTNDArrayAttribute::attachTimeStamp(PVTimeStamp &pvTimeStamp)
const 177 PVStructurePtr ts = getTimeStamp();
179 return pvTimeStamp.attach(ts);
184 bool NTNDArrayAttribute::attachAlarm(PVAlarm &pvAlarm)
const 186 PVStructurePtr al = getAlarm();
188 return pvAlarm.attach(al);
193 PVStructurePtr NTNDArrayAttribute::getPVStructure()
const 195 return pvNTNDArrayAttribute;
198 PVStringPtr NTNDArrayAttribute::getDescriptor()
const 200 return pvNTNDArrayAttribute->getSubField<PVString>(
"descriptor");
203 PVStructurePtr NTNDArrayAttribute::getTimeStamp()
const 205 return pvNTNDArrayAttribute->getSubField<PVStructure>(
"timeStamp");
208 PVStructurePtr NTNDArrayAttribute::getAlarm()
const 210 return pvNTNDArrayAttribute->getSubField<PVStructure>(
"alarm");
214 PVStringPtr NTNDArrayAttribute::getName()
const 216 return pvNTNDArrayAttribute->getSubField<PVString>(
"name");
219 PVUnionPtr NTNDArrayAttribute::getValue()
const 224 PVStringArrayPtr NTNDArrayAttribute::getTags()
const 226 return pvNTNDArrayAttribute->getSubField<PVStringArray>(
"tags");
229 PVIntPtr NTNDArrayAttribute::getSourceType()
const 231 return pvNTNDArrayAttribute->getSubField<PVInt>(
"sourceType");
234 PVStringPtr NTNDArrayAttribute::getSource()
const 236 return pvNTNDArrayAttribute->getSubField<PVString>(
"source");
239 NTNDArrayAttribute::NTNDArrayAttribute(PVStructurePtr
const & pvStructure) :
240 pvNTNDArrayAttribute(pvStructure), pvValue(pvNTNDArrayAttribute->getSubField<PVUnion>(
"value"))
Result & maybeHas(const std::string &name)
Validation methods for NT types.
std::tr1::shared_ptr< detail::NTNDArrayAttributeBuilder > NTNDArrayAttributeBuilderPtr
std::tr1::shared_ptr< NTField > NTFieldPtr
Interface for in-line creating of NTAttribute extended as required by NTNDArray.
std::tr1::shared_ptr< NTNDArrayAttribute > NTNDArrayAttributePtr
Convenience Class for NTNDArrayAttribute.
Result & has(const std::string &name)