9 #define epicsExportSharedSymbols 16 namespace epics {
namespace nt {
23 NTUnionBuilder::shared_pointer NTUnionBuilder::value(
UnionConstPtr unionType)
25 valueType = unionType;
26 return shared_from_this();
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]);
56 NTUnionBuilder::shared_pointer NTUnionBuilder::addDescriptor()
59 return shared_from_this();
62 NTUnionBuilder::shared_pointer NTUnionBuilder::addAlarm()
65 return shared_from_this();
68 NTUnionBuilder::shared_pointer NTUnionBuilder::addTimeStamp()
71 return shared_from_this();
84 NTUnionBuilder::NTUnionBuilder()
89 void NTUnionBuilder::reset()
95 extraFieldNames.clear();
99 NTUnionBuilder::shared_pointer NTUnionBuilder::add(
string const & name,
FieldConstPtr const & field)
101 extraFields.push_back(field); extraFieldNames.push_back(name);
102 return shared_from_this();
108 const std::string NTUnion::URI(
"epics:nt/NTUnion:1.0");
112 if(!isCompatible(pvStructure))
return shared_pointer();
113 return wrapUnsafe(pvStructure);
118 return shared_pointer(
new NTUnion(pvStructure));
123 return NTUtils::is_a(structure->getID(), URI);
128 return is_a(pvStructure->getStructure());
141 .maybeHas<
Scalar>(
"descriptor")
142 .maybeHas<&NTField::isAlarm, Structure>(
"alarm")
143 .maybeHas<&NTField::isTimeStamp,
Structure>(
"timeStamp")
149 if(!pvStructure)
return false;
151 return isCompatible(pvStructure->getStructure());
154 bool NTUnion::isValid()
168 return pvTimeStamp.
attach(ts);
173 bool NTUnion::attachAlarm(
PVAlarm &pvAlarm)
const 177 return pvAlarm.
attach(al);
189 return pvNTUnion->getSubField<
PVString>(
"descriptor");
194 return pvNTUnion->getSubField<
PVStructure>(
"timeStamp");
208 pvNTUnion(pvStructure), pvValue(pvNTUnion->getSubField<
PVUnion>(
"value"))
FORCE_INLINE std::tr1::shared_ptr< PVField > getSubField(A a)
This class implements introspection object for Scalar.
Interface for in-line creating of NTUnion.
Convenience Class for NTUnion.
bool attach(PVFieldPtr const &pvField)
Validation methods for NT types.
TODO only here because of the Lockable.
std::tr1::shared_ptr< const Structure > StructureConstPtr
std::tr1::shared_ptr< NTField > NTFieldPtr
std::tr1::shared_ptr< FieldBuilder > FieldBuilderPtr
PVString is special case, since it implements SerializableArray.
std::tr1::shared_ptr< PVUnion > PVUnionPtr
std::tr1::shared_ptr< const Union > UnionConstPtr
This class implements introspection object for a structure.
Methods for accessing a timeStamp structure.
Methods for accessing an alarm structure.
PVUnion has a single subfield.
Data interface for a structure,.
std::tr1::shared_ptr< const Field > FieldConstPtr
FORCE_INLINE const FieldCreatePtr & getFieldCreate()
std::tr1::shared_ptr< PVStructure > PVStructurePtr
std::tr1::shared_ptr< PVString > PVStringPtr
std::tr1::shared_ptr< NTUnion > NTUnionPtr
std::tr1::shared_ptr< detail::NTUnionBuilder > NTUnionBuilderPtr
FORCE_INLINE const PVDataCreatePtr & getPVDataCreate()
bool attach(PVFieldPtr const &pvField)