9 #define epicsExportSharedSymbols 16 namespace epics {
namespace nt {
23 StructureConstPtr NTAttributeBuilder::createStructure()
25 FieldBuilderPtr builder =
26 getFieldCreate()->createFieldBuilder()->
27 setId(NTAttribute::URI)->
28 add(
"name", pvString)->
29 add(
"value", getFieldCreate()->createVariantUnion());
32 builder->addArray(
"tags", pvString);
35 builder->add(
"descriptor", pvString);
38 builder->add(
"alarm", ntField->createAlarm());
41 builder->add(
"timeStamp", ntField->createTimeStamp());
43 size_t extraCount = extraFieldNames.size();
44 for (
size_t i = 0; i< extraCount; i++)
45 builder->add(extraFieldNames[i], extraFields[i]);
48 StructureConstPtr s = builder->createStructure();
54 NTAttributeBuilder::shared_pointer NTAttributeBuilder::addTags()
57 return shared_from_this();
60 NTAttributeBuilder::shared_pointer NTAttributeBuilder::addDescriptor()
63 return shared_from_this();
66 NTAttributeBuilder::shared_pointer NTAttributeBuilder::addAlarm()
69 return shared_from_this();
72 NTAttributeBuilder::shared_pointer NTAttributeBuilder::addTimeStamp()
75 return shared_from_this();
78 PVStructurePtr NTAttributeBuilder::createPVStructure()
80 return getPVDataCreate()->createPVStructure(createStructure());
88 NTAttributeBuilder::NTAttributeBuilder()
93 void NTAttributeBuilder::reset()
98 extraFieldNames.clear();
102 NTAttributeBuilder::shared_pointer NTAttributeBuilder::add(
string const & name, FieldConstPtr
const & field)
104 extraFields.push_back(field); extraFieldNames.push_back(name);
105 return shared_from_this();
110 const std::string NTAttribute::URI(
"epics:nt/NTAttribute:1.0");
112 NTAttribute::shared_pointer NTAttribute::wrap(PVStructurePtr
const & pvStructure)
114 if(!isCompatible(pvStructure))
return shared_pointer();
115 return wrapUnsafe(pvStructure);
118 NTAttribute::shared_pointer NTAttribute::wrapUnsafe(PVStructurePtr
const & pvStructure)
120 return shared_pointer(
new NTAttribute(pvStructure));
123 bool NTAttribute::is_a(StructureConstPtr
const & structure)
125 return NTUtils::is_a(structure->getID(), URI);
128 bool NTAttribute::is_a(PVStructurePtr
const & pvStructure)
130 return is_a(pvStructure->getStructure());
133 bool NTAttribute::isCompatible(StructureConstPtr
const & structure)
144 .maybeHas<ScalarArray>(
"tags")
146 .maybeHas<&NTField::isAlarm, Structure>(
"alarm")
147 .
maybeHas<&NTField::isTimeStamp, Structure>(
"timeStamp")
151 bool NTAttribute::isCompatible(PVStructurePtr
const & pvStructure)
153 if(!pvStructure)
return false;
155 return isCompatible(pvStructure->getStructure());
158 bool NTAttribute::isValid()
168 bool NTAttribute::attachTimeStamp(PVTimeStamp &pvTimeStamp)
const 170 PVStructurePtr ts = getTimeStamp();
172 return pvTimeStamp.attach(ts);
177 bool NTAttribute::attachAlarm(PVAlarm &pvAlarm)
const 179 PVStructurePtr al = getAlarm();
181 return pvAlarm.attach(al);
186 PVStructurePtr NTAttribute::getPVStructure()
const 188 return pvNTAttribute;
191 PVStringPtr NTAttribute::getDescriptor()
const 193 return pvNTAttribute->getSubField<PVString>(
"descriptor");
196 PVStructurePtr NTAttribute::getTimeStamp()
const 198 return pvNTAttribute->getSubField<PVStructure>(
"timeStamp");
201 PVStructurePtr NTAttribute::getAlarm()
const 203 return pvNTAttribute->getSubField<PVStructure>(
"alarm");
207 PVStringPtr NTAttribute::getName()
const 209 return pvNTAttribute->getSubField<PVString>(
"name");
212 PVUnionPtr NTAttribute::getValue()
const 217 PVStringArrayPtr NTAttribute::getTags()
const 219 return pvNTAttribute->getSubField<PVStringArray>(
"tags");
222 NTAttribute::NTAttribute(PVStructurePtr
const & pvStructure) :
223 pvNTAttribute(pvStructure), pvValue(pvNTAttribute->getSubField<PVUnion>(
"value"))
Result & maybeHas(const std::string &name)
Interface for in-line creating of NTAttribute.
Validation methods for NT types.
std::tr1::shared_ptr< NTField > NTFieldPtr
std::tr1::shared_ptr< detail::NTAttributeBuilder > NTAttributeBuilderPtr
Result & has(const std::string &name)
Convenience Class for NTAttribute.
std::tr1::shared_ptr< NTAttribute > NTAttributePtr