9 #define epicsExportSharedSymbols 17 namespace epics {
namespace nt {
27 setId(NTNDArrayAttribute::URI)->
34 builder->add(
"descriptor",
pvString);
36 builder->add(
"sourceType",
pvInt);
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]);
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();
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)
129 return NTUtils::is_a(structure->getID(), URI);
134 return is_a(pvStructure->getStructure());
142 .has<Scalar>(
"descriptor")
143 .maybeHas<&NTField::isAlarm,
Structure>(
"alarm")
144 .maybeHas<&NTField::isTimeStamp, Structure>(
"timeStamp")
145 .has<
Scalar>(
"sourceType")
146 .has<Scalar>(
"source");
155 return isAttribute(result.
is<
Structure>()).valid();
160 if(!pvStructure)
return false;
162 return isCompatible(pvStructure->getStructure());
165 bool NTNDArrayAttribute::isValid()
175 bool NTNDArrayAttribute::attachTimeStamp(
PVTimeStamp &pvTimeStamp)
const 179 return pvTimeStamp.
attach(ts);
184 bool NTNDArrayAttribute::attachAlarm(
PVAlarm &pvAlarm)
const 188 return pvAlarm.
attach(al);
195 return pvNTNDArrayAttribute;
200 return pvNTNDArrayAttribute->getSubField<
PVString>(
"descriptor");
205 return pvNTNDArrayAttribute->getSubField<
PVStructure>(
"timeStamp");
226 return pvNTNDArrayAttribute->getSubField<
PVStringArray>(
"tags");
231 return pvNTNDArrayAttribute->getSubField<
PVInt>(
"sourceType");
236 return pvNTNDArrayAttribute->getSubField<
PVString>(
"source");
239 NTNDArrayAttribute::NTNDArrayAttribute(
PVStructurePtr const & pvStructure) :
240 pvNTNDArrayAttribute(pvStructure), pvValue(pvNTNDArrayAttribute->getSubField<
PVUnion>(
"value"))
FORCE_INLINE std::tr1::shared_ptr< PVField > getSubField(A a)
This class implements introspection object for Scalar.
std::tr1::shared_ptr< PVInt > PVIntPtr
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< detail::NTNDArrayAttributeBuilder > NTNDArrayAttributeBuilderPtr
std::tr1::shared_ptr< NTField > NTFieldPtr
std::tr1::shared_ptr< PVStringArray > PVStringArrayPtr
std::tr1::shared_ptr< FieldBuilder > FieldBuilderPtr
Interface for in-line creating of NTAttribute extended as required by NTNDArray.
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
std::tr1::shared_ptr< NTNDArrayAttribute > NTNDArrayAttributePtr
Convenience Class for NTNDArrayAttribute.
FORCE_INLINE const FieldCreatePtr & getFieldCreate()
This class implements introspection object for scalar array.
std::tr1::shared_ptr< PVStructure > PVStructurePtr
Result & has(const std::string &name)
std::tr1::shared_ptr< PVString > PVStringPtr
Class that holds the data for each possible scalar type.
FORCE_INLINE const PVDataCreatePtr & getPVDataCreate()
bool attach(PVFieldPtr const &pvField)