9#define epicsExportSharedSymbols
14using namespace epics::pvData;
16namespace epics {
namespace nt {
25 valueType = unionType;
26 return shared_from_this();
31 FieldBuilderPtr builder =
32 getFieldCreate()->createFieldBuilder()->
34 add(
"value", valueType);
37 builder->add(
"descriptor", pvString);
40 builder->add(
"alarm", ntField->createAlarm());
43 builder->add(
"timeStamp", ntField->createTimeStamp());
45 size_t extraCount = extraFieldNames.size();
46 for (
size_t i = 0; i< extraCount; i++)
47 builder->add(extraFieldNames[i], extraFields[i]);
50 StructureConstPtr s = builder->createStructure();
59 return shared_from_this();
65 return shared_from_this();
71 return shared_from_this();
84NTUnionBuilder::NTUnionBuilder()
89void NTUnionBuilder::reset()
91 valueType = getFieldCreate()->createVariantUnion();
95 extraFieldNames.clear();
101 extraFields.push_back(field); extraFieldNames.push_back(name);
102 return shared_from_this();
118 return shared_pointer(
new NTUnion(pvStructure));
128 return is_a(pvStructure->getStructure());
136 Result result(structure);
141 .maybeHas<Scalar>(
"descriptor")
142 .maybeHas<&NTField::isAlarm, Structure>(
"alarm")
149 if(!pvStructure)
return false;
168 return pvTimeStamp.attach(ts);
177 return pvAlarm.attach(al);
189 return pvNTUnion->getSubField<PVString>(
"descriptor");
194 return pvNTUnion->getSubField<PVStructure>(
"timeStamp");
199 return pvNTUnion->getSubField<PVStructure>(
"alarm");
207NTUnion::NTUnion(PVStructurePtr
const & pvStructure) :
208 pvNTUnion(pvStructure), pvValue(pvNTUnion->getSubField<PVUnion>(
"value"))
bool isTimeStamp(epics::pvData::FieldConstPtr const &field)
Convenience Class for NTUnion.
static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const &pvStructure)
bool attachTimeStamp(epics::pvData::PVTimeStamp &pvTimeStamp) const
static bool isCompatible(epics::pvData::StructureConstPtr const &structure)
epics::pvData::PVStructurePtr getPVStructure() const
epics::pvData::PVUnionPtr getValue() const
epics::pvData::PVStringPtr getDescriptor() const
epics::pvData::PVStructurePtr getTimeStamp() const
bool attachAlarm(epics::pvData::PVAlarm &pvAlarm) const
static shared_pointer wrap(epics::pvData::PVStructurePtr const &pvStructure)
static bool is_a(epics::pvData::StructureConstPtr const &structure)
static const std::string URI
epics::pvData::PVStructurePtr getAlarm() const
static NTUnionBuilderPtr createBuilder()
static bool is_a(const std::string &u1, const std::string &u2)
Interface for in-line creating of NTUnion.
shared_pointer addAlarm()
epics::pvData::StructureConstPtr createStructure()
shared_pointer value(epics::pvData::UnionConstPtr unionType)
shared_pointer add(std::string const &name, epics::pvData::FieldConstPtr const &field)
shared_pointer addDescriptor()
epics::pvData::PVStructurePtr createPVStructure()
friend class ::epics::nt::NTUnion
shared_pointer addTimeStamp()
std::tr1::shared_ptr< NTField > NTFieldPtr
std::tr1::shared_ptr< detail::NTUnionBuilder > NTUnionBuilderPtr
std::tr1::shared_ptr< NTUnion > NTUnionPtr