9#define epicsExportSharedSymbols
14using namespace epics::pvData;
16namespace epics {
namespace nt {
23 epics::pvData::ScalarType elementType
26 valueType = elementType;
29 return shared_from_this();
33 epics::pvData::ScalarType elementType
36 valueType = elementType;
39 return shared_from_this();
45 throw std::runtime_error(
"value array element type not set");
47 FieldBuilderPtr builder =
48 getFieldCreate()->createFieldBuilder()->
50 addArray(
"value", valueType);
53 builder->add(
"descriptor", pvString);
56 builder->add(
"alarm", ntField->createAlarm());
59 builder->add(
"timeStamp", ntField->createTimeStamp());
62 builder->add(
"display", ntField->createDisplay());
65 builder->add(
"control", ntField->createControl());
67 size_t extraCount = extraFieldNames.size();
68 for (
size_t i = 0; i< extraCount; i++)
69 builder->add(extraFieldNames[i], extraFields[i]);
72 StructureConstPtr s = builder->createStructure();
81 return shared_from_this();
87 return shared_from_this();
93 return shared_from_this();
99 return shared_from_this();
105 return shared_from_this();
118NTScalarArrayBuilder::NTScalarArrayBuilder()
123void NTScalarArrayBuilder::reset()
125 valueTypeSet =
false;
135 extraFields.push_back(field); extraFieldNames.push_back(name);
136 return shared_from_this();
161 return is_a(pvStructure->getStructure());
169 Result result(structure);
173 .has<ScalarArray>(
"value")
174 .maybeHas<Scalar>(
"descriptor")
175 .maybeHas<&NTField::isAlarm, Structure>(
"alarm")
177 .maybeHas<&NTField::isDisplay, Structure>(
"display")
184 if(!pvStructure)
return false;
203 return pvTimeStamp.attach(ts);
212 return pvAlarm.attach(al);
221 return pvDisplay.attach(dp);
230 return pvControl.attach(ctrl);
237 return pvNTScalarArray;
242 return pvNTScalarArray->getSubField<PVString>(
"descriptor");
247 return pvNTScalarArray->getSubField<PVStructure>(
"timeStamp");
252 return pvNTScalarArray->getSubField<PVStructure>(
"alarm");
257 return pvNTScalarArray->getSubField<PVStructure>(
"display");
262 return pvNTScalarArray->getSubField<PVStructure>(
"control");
270NTScalarArray::NTScalarArray(PVStructurePtr
const & pvStructure) :
271 pvNTScalarArray(pvStructure), pvValue(pvNTScalarArray->getSubField(
"value"))
bool isControl(epics::pvData::FieldConstPtr const &field)
bool isTimeStamp(epics::pvData::FieldConstPtr const &field)
Convenience Class for NTScalarArray.
epics::pvData::PVStructurePtr getControl() const
epics::pvData::PVStructurePtr getPVStructure() const
static NTScalarArrayBuilderPtr createBuilder()
bool attachAlarm(epics::pvData::PVAlarm &pvAlarm) const
static bool isCompatible(epics::pvData::StructureConstPtr const &structure)
epics::pvData::PVStructurePtr getDisplay() const
epics::pvData::PVFieldPtr getValue() const
static bool is_a(epics::pvData::StructureConstPtr const &structure)
bool attachTimeStamp(epics::pvData::PVTimeStamp &pvTimeStamp) const
bool attachDisplay(epics::pvData::PVDisplay &pvDisplay) const
static const std::string URI
epics::pvData::PVStringPtr getDescriptor() const
epics::pvData::PVStructurePtr getTimeStamp() const
bool attachControl(epics::pvData::PVControl &pvControl) const
static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const &pvStructure)
static shared_pointer wrap(epics::pvData::PVStructurePtr const &pvStructure)
epics::pvData::PVStructurePtr getAlarm() const
static bool is_a(const std::string &u1, const std::string &u2)
Interface for in-line creating of NTScalarArray.
epics::pvData::PVStructurePtr createPVStructure()
shared_pointer arrayValue(epics::pvData::ScalarType elementType)
NTScalarArrayPtr create()
friend class ::epics::nt::NTScalarArray
shared_pointer addDisplay()
shared_pointer value(epics::pvData::ScalarType elementType)
shared_pointer add(std::string const &name, epics::pvData::FieldConstPtr const &field)
shared_pointer addAlarm()
shared_pointer addControl()
epics::pvData::StructureConstPtr createStructure()
shared_pointer addTimeStamp()
shared_pointer addDescriptor()
std::tr1::shared_ptr< NTField > NTFieldPtr
std::tr1::shared_ptr< NTScalarArray > NTScalarArrayPtr
std::tr1::shared_ptr< detail::NTScalarArrayBuilder > NTScalarArrayBuilderPtr