9 #define epicsExportSharedSymbols 16 namespace epics {
namespace nt {
22 NTNameValueBuilder::shared_pointer NTNameValueBuilder::value(
23 epics::pvData::ScalarType scalarType
26 valueType = scalarType;
29 return shared_from_this();
32 StructureConstPtr NTNameValueBuilder::createStructure()
35 throw std::runtime_error(
"value type not set");
37 FieldBuilderPtr builder =
38 getFieldCreate()->createFieldBuilder()->
39 setId(NTNameValue::URI)->
40 addArray(
"name", pvString)->
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]);
56 StructureConstPtr s = builder->createStructure();
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();
80 PVStructurePtr NTNameValueBuilder::createPVStructure()
82 return getPVDataCreate()->createPVStructure(createStructure());
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);
122 NTNameValue::shared_pointer NTNameValue::wrapUnsafe(PVStructurePtr
const & structure)
127 bool NTNameValue::is_a(StructureConstPtr
const & structure)
129 return NTUtils::is_a(structure->getID(), URI);
132 bool NTNameValue::is_a(PVStructurePtr
const & pvStructure)
134 return is_a(pvStructure->getStructure());
137 bool NTNameValue::isCompatible(StructureConstPtr
const & structure)
146 .has<ScalarArray>(
"name")
147 .
has<ScalarArray>(
"value")
148 .maybeHas<Scalar>(
"descriptor")
149 .
maybeHas<&NTField::isAlarm, Structure>(
"alarm")
150 .maybeHas<&NTField::isTimeStamp, Structure>(
"timeStamp")
154 bool NTNameValue::isCompatible(PVStructurePtr
const & pvStructure)
156 if(!pvStructure)
return false;
158 return isCompatible(pvStructure->getStructure());
161 bool NTNameValue::isValid()
163 return (getValue<PVScalarArray>()->getLength() == getName()->getLength());
171 bool NTNameValue::attachTimeStamp(PVTimeStamp &pvTimeStamp)
const 173 PVStructurePtr ts = getTimeStamp();
175 return pvTimeStamp.attach(ts);
180 bool NTNameValue::attachAlarm(PVAlarm &pvAlarm)
const 182 PVStructurePtr al = getAlarm();
184 return pvAlarm.attach(al);
189 PVStructurePtr NTNameValue::getPVStructure()
const 191 return pvNTNameValue;
194 PVStringPtr NTNameValue::getDescriptor()
const 196 return pvNTNameValue->getSubField<PVString>(
"descriptor");
199 PVStructurePtr NTNameValue::getTimeStamp()
const 201 return pvNTNameValue->getSubField<PVStructure>(
"timeStamp");
204 PVStructurePtr NTNameValue::getAlarm()
const 206 return pvNTNameValue->getSubField<PVStructure>(
"alarm");
209 PVStringArrayPtr NTNameValue::getName()
const 211 return pvNTNameValue->getSubField<PVStringArray>(
"name");
214 PVFieldPtr NTNameValue::getValue()
const 216 return pvNTNameValue->getSubField(
"value");
219 NTNameValue::NTNameValue(PVStructurePtr
const & pvStructure) :
220 pvNTNameValue(pvStructure)
Interface for in-line creating of NTNameValue.
std::tr1::shared_ptr< NTNameValue > NTNameValuePtr
Result & maybeHas(const std::string &name)
Validation methods for NT types.
std::tr1::shared_ptr< NTField > NTFieldPtr
std::tr1::shared_ptr< detail::NTNameValueBuilder > NTNameValueBuilderPtr
Result & has(const std::string &name)
Convenience Class for NTNameValue.