9#define epicsExportSharedSymbols
14using namespace epics::pvData;
16namespace epics {
namespace nt {
25 FieldBuilderPtr builder =
26 getFieldCreate()->createFieldBuilder()->
28 add(
"value", ntField->createEnumerated());
31 builder->add(
"descriptor", pvString);
34 builder->add(
"alarm", ntField->createAlarm());
37 builder->add(
"timeStamp", ntField->createTimeStamp());
39 size_t extraCount = extraFieldNames.size();
40 for (
size_t i = 0; i< extraCount; i++)
41 builder->add(extraFieldNames[i], extraFields[i]);
44 StructureConstPtr s = builder->createStructure();
53 return shared_from_this();
59 return shared_from_this();
65 return shared_from_this();
78NTEnumBuilder::NTEnumBuilder()
83void NTEnumBuilder::reset()
88 extraFieldNames.clear();
92NTEnumBuilder::shared_pointer
NTEnumBuilder::add(
string const & name, FieldConstPtr
const & field)
94 extraFields.push_back(field); extraFieldNames.push_back(name);
95 return shared_from_this();
101const std::string
NTEnum::URI(
"epics:nt/NTEnum:1.0");
111 return shared_pointer(
new NTEnum(pvStructure));
121 return is_a(pvStructure->getStructure());
129 Result result(structure);
133 .has<&NTField::isEnumerated, Structure>(
"value")
134 .maybeHas<Scalar>(
"descriptor")
135 .maybeHas<&NTField::isAlarm, Structure>(
"alarm")
142 if(!pvStructure)
return false;
161 return pvTimeStamp.attach(ts);
170 return pvAlarm.attach(al);
182 return pvNTEnum->getSubField<PVString>(
"descriptor");
187 return pvNTEnum->getSubField<PVStructure>(
"timeStamp");
192 return pvNTEnum->getSubField<PVStructure>(
"alarm");
200NTEnum::NTEnum(PVStructurePtr
const & pvStructure) :
201 pvNTEnum(pvStructure), pvValue(pvNTEnum->getSubField<PVStructure>(
"value"))
Convenience Class for NTEnum.
epics::pvData::PVStringPtr getDescriptor() const
bool attachAlarm(epics::pvData::PVAlarm &pvAlarm) const
static const std::string URI
epics::pvData::PVStructurePtr getAlarm() const
epics::pvData::PVStructurePtr getValue() const
static NTEnumBuilderPtr createBuilder()
static bool is_a(epics::pvData::StructureConstPtr const &structure)
static shared_pointer wrap(epics::pvData::PVStructurePtr const &pvStructure)
epics::pvData::PVStructurePtr getTimeStamp() const
static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const &pvStructure)
epics::pvData::PVStructurePtr getPVStructure() const
static bool isCompatible(epics::pvData::StructureConstPtr const &structure)
bool attachTimeStamp(epics::pvData::PVTimeStamp &pvTimeStamp) const
bool isTimeStamp(epics::pvData::FieldConstPtr const &field)
static bool is_a(const std::string &u1, const std::string &u2)
Interface for in-line creating of NTEnum.
epics::pvData::PVStructurePtr createPVStructure()
shared_pointer addTimeStamp()
shared_pointer addAlarm()
shared_pointer addDescriptor()
epics::pvData::StructureConstPtr createStructure()
shared_pointer add(std::string const &name, epics::pvData::FieldConstPtr const &field)
friend class ::epics::nt::NTEnum
std::tr1::shared_ptr< NTField > NTFieldPtr
std::tr1::shared_ptr< NTEnum > NTEnumPtr
std::tr1::shared_ptr< detail::NTEnumBuilder > NTEnumBuilderPtr