9 #define epicsExportSharedSymbols 16 namespace epics {
namespace nt {
27 setId(NTAttribute::URI)->
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]);
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();
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));
125 return NTUtils::is_a(structure->getID(), URI);
130 return is_a(pvStructure->getStructure());
144 .maybeHas<ScalarArray>(
"tags")
145 .maybeHas<
Scalar>(
"descriptor")
146 .maybeHas<&NTField::isAlarm, Structure>(
"alarm")
147 .maybeHas<&NTField::isTimeStamp,
Structure>(
"timeStamp")
153 if(!pvStructure)
return false;
155 return isCompatible(pvStructure->getStructure());
158 bool NTAttribute::isValid()
172 return pvTimeStamp.
attach(ts);
177 bool NTAttribute::attachAlarm(
PVAlarm &pvAlarm)
const 181 return pvAlarm.
attach(al);
188 return pvNTAttribute;
193 return pvNTAttribute->getSubField<
PVString>(
"descriptor");
198 return pvNTAttribute->getSubField<
PVStructure>(
"timeStamp");
223 pvNTAttribute(pvStructure), pvValue(pvNTAttribute->getSubField<
PVUnion>(
"value"))
FORCE_INLINE std::tr1::shared_ptr< PVField > getSubField(A a)
This class implements introspection object for Scalar.
This class implements introspection object for a union.
Interface for in-line creating of NTAttribute.
bool attach(PVFieldPtr const &pvField)
Validation methods for NT types.
TODO only here because of the Lockable.
std::tr1::shared_ptr< const Structure > StructureConstPtr
std::tr1::shared_ptr< NTField > NTFieldPtr
std::tr1::shared_ptr< PVStringArray > PVStringArrayPtr
std::tr1::shared_ptr< FieldBuilder > FieldBuilderPtr
std::tr1::shared_ptr< detail::NTAttributeBuilder > NTAttributeBuilderPtr
PVString is special case, since it implements SerializableArray.
std::tr1::shared_ptr< PVUnion > PVUnionPtr
This class implements introspection object for a structure.
template class for all extensions of PVArray.
Methods for accessing a timeStamp structure.
Methods for accessing an alarm structure.
PVUnion has a single subfield.
Data interface for a structure,.
std::tr1::shared_ptr< const Field > FieldConstPtr
FORCE_INLINE const FieldCreatePtr & getFieldCreate()
std::tr1::shared_ptr< PVStructure > PVStructurePtr
std::tr1::shared_ptr< PVString > PVStringPtr
Convenience Class for NTAttribute.
std::tr1::shared_ptr< NTAttribute > NTAttributePtr
FORCE_INLINE const PVDataCreatePtr & getPVDataCreate()
bool attach(PVFieldPtr const &pvField)