9 #define epicsExportSharedSymbols 16 namespace epics {
namespace nt {
22 NTNameValueBuilder::shared_pointer NTNameValueBuilder::value(
26 valueType = scalarType;
29 return shared_from_this();
35 throw std::runtime_error(
"value type not set");
39 setId(NTNameValue::URI)->
41 addArray(
"value", valueType);
44 builder->add(
"descriptor",
pvString);
47 builder->add(
"alarm", ntField->createAlarm());
50 builder->add(
"timeStamp", ntField->createTimeStamp());
52 size_t extraCount = extraFieldNames.size();
53 for (
size_t i = 0;
i< extraCount;
i++)
54 builder->add(extraFieldNames[
i], extraFields[i]);
62 NTNameValueBuilder::shared_pointer NTNameValueBuilder::addDescriptor()
65 return shared_from_this();
68 NTNameValueBuilder::shared_pointer NTNameValueBuilder::addAlarm()
71 return shared_from_this();
74 NTNameValueBuilder::shared_pointer NTNameValueBuilder::addTimeStamp()
77 return shared_from_this();
90 NTNameValueBuilder::NTNameValueBuilder()
95 void NTNameValueBuilder::reset()
101 extraFieldNames.clear();
105 NTNameValueBuilder::shared_pointer NTNameValueBuilder::add(
string const & name,
FieldConstPtr const & field)
107 extraFields.push_back(field); extraFieldNames.push_back(name);
108 return shared_from_this();
114 const std::string NTNameValue::URI(
"epics:nt/NTNameValue:1.0");
116 NTNameValue::shared_pointer NTNameValue::wrap(
PVStructurePtr const & pvStructure)
118 if(!isCompatible(pvStructure))
return shared_pointer();
119 return wrapUnsafe(pvStructure);
129 return NTUtils::is_a(structure->getID(), URI);
134 return is_a(pvStructure->getStructure());
146 .has<ScalarArray>(
"name")
148 .maybeHas<Scalar>(
"descriptor")
149 .maybeHas<&NTField::isAlarm,
Structure>(
"alarm")
150 .maybeHas<&NTField::isTimeStamp, Structure>(
"timeStamp")
156 if(!pvStructure)
return false;
158 return isCompatible(pvStructure->getStructure());
161 bool NTNameValue::isValid()
163 return (getValue<PVScalarArray>()->getLength() == getName()->getLength());
175 return pvTimeStamp.
attach(ts);
180 bool NTNameValue::attachAlarm(
PVAlarm &pvAlarm)
const 184 return pvAlarm.
attach(al);
191 return pvNTNameValue;
196 return pvNTNameValue->getSubField<
PVString>(
"descriptor");
201 return pvNTNameValue->getSubField<
PVStructure>(
"timeStamp");
216 return pvNTNameValue->getSubField(
"value");
220 pvNTNameValue(pvStructure)
FORCE_INLINE std::tr1::shared_ptr< PVField > getSubField(A a)
Interface for in-line creating of NTNameValue.
std::tr1::shared_ptr< NTNameValue > NTNameValuePtr
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::NTNameValueBuilder > NTNameValueBuilderPtr
PVString is special case, since it implements SerializableArray.
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.
Data interface for a structure,.
std::tr1::shared_ptr< const Field > FieldConstPtr
FORCE_INLINE const FieldCreatePtr & getFieldCreate()
This class implements introspection object for scalar array.
std::tr1::shared_ptr< PVStructure > PVStructurePtr
std::tr1::shared_ptr< PVString > PVStringPtr
std::tr1::shared_ptr< PVField > PVFieldPtr
Convenience Class for NTNameValue.
FORCE_INLINE const PVDataCreatePtr & getPVDataCreate()
bool attach(PVFieldPtr const &pvField)