9#define epicsExportSharedSymbols
14using namespace epics::pvData;
16namespace epics {
namespace nt {
23 epics::pvData::ScalarType scalarType
26 valueType = scalarType;
29 return shared_from_this();
35 throw std::runtime_error(
"value type not set");
37 FieldBuilderPtr builder =
38 getFieldCreate()->createFieldBuilder()->
40 add(
"value", valueType);
43 builder->add(
"descriptor", pvString);
46 builder->add(
"alarm", ntField->createAlarm());
49 builder->add(
"timeStamp", ntField->createTimeStamp());
52 builder->add(
"display", ntField->createDisplay());
55 builder->add(
"control", ntField->createControl());
57 size_t extraCount = extraFieldNames.size();
58 for (
size_t i = 0; i< extraCount; i++)
59 builder->add(extraFieldNames[i], extraFields[i]);
62 StructureConstPtr s = builder->createStructure();
71 return shared_from_this();
77 return shared_from_this();
83 return shared_from_this();
89 return shared_from_this();
95 return shared_from_this();
108NTScalarBuilder::NTScalarBuilder()
113void NTScalarBuilder::reset()
115 valueTypeSet =
false;
125 extraFields.push_back(field); extraFieldNames.push_back(name);
126 return shared_from_this();
142 return shared_pointer(
new NTScalar(pvStructure));
152 return is_a(pvStructure->getStructure());
160 Result result(structure);
164 .has<Scalar>(
"value")
165 .maybeHas<Scalar>(
"descriptor")
166 .maybeHas<&NTField::isAlarm, Structure>(
"alarm")
168 .maybeHas<&NTField::isDisplay, Structure>(
"display")
175 if(!pvStructure)
return false;
194 return pvTimeStamp.attach(ts);
203 return pvAlarm.attach(al);
212 return pvDisplay.attach(dp);
221 return pvControl.attach(ctrl);
233 return pvNTScalar->getSubField<PVString>(
"descriptor");
238 return pvNTScalar->getSubField<PVStructure>(
"timeStamp");
243 return pvNTScalar->getSubField<PVStructure>(
"alarm");
248 return pvNTScalar->getSubField<PVStructure>(
"display");
253 return pvNTScalar->getSubField<PVStructure>(
"control");
261NTScalar::NTScalar(PVStructurePtr
const & pvStructure) :
262 pvNTScalar(pvStructure), pvValue(pvNTScalar->getSubField(
"value"))
bool isControl(epics::pvData::FieldConstPtr const &field)
bool isTimeStamp(epics::pvData::FieldConstPtr const &field)
Convenience Class for NTScalar.
static bool is_a(epics::pvData::StructureConstPtr const &structure)
epics::pvData::PVStructurePtr getControl() const
bool attachControl(epics::pvData::PVControl &pvControl) const
epics::pvData::PVFieldPtr getValue() const
epics::pvData::PVStructurePtr getAlarm() const
bool attachAlarm(epics::pvData::PVAlarm &pvAlarm) const
epics::pvData::PVStringPtr getDescriptor() const
static bool isCompatible(epics::pvData::StructureConstPtr const &structure)
bool attachTimeStamp(epics::pvData::PVTimeStamp &pvTimeStamp) const
static shared_pointer wrap(epics::pvData::PVStructurePtr const &pvStructure)
epics::pvData::PVStructurePtr getPVStructure() const
epics::pvData::PVStructurePtr getDisplay() const
bool attachDisplay(epics::pvData::PVDisplay &pvDisplay) const
static const std::string URI
static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const &pvStructure)
epics::pvData::PVStructurePtr getTimeStamp() const
static NTScalarBuilderPtr createBuilder()
static bool is_a(const std::string &u1, const std::string &u2)
Interface for in-line creating of NTScalar.
shared_pointer add(std::string const &name, epics::pvData::FieldConstPtr const &field)
epics::pvData::StructureConstPtr createStructure()
shared_pointer addTimeStamp()
shared_pointer value(epics::pvData::ScalarType scalarType)
epics::pvData::PVStructurePtr createPVStructure()
shared_pointer addDescriptor()
shared_pointer addAlarm()
friend class ::epics::nt::NTScalar
shared_pointer addControl()
shared_pointer addDisplay()
std::tr1::shared_ptr< NTField > NTFieldPtr
std::tr1::shared_ptr< detail::NTScalarBuilder > NTScalarBuilderPtr
std::tr1::shared_ptr< NTScalar > NTScalarPtr