9 #define epicsExportSharedSymbols 16 namespace epics {
namespace nt {
22 NTScalarArrayBuilder::shared_pointer NTScalarArrayBuilder::value(
26 valueType = elementType;
29 return shared_from_this();
32 NTScalarArrayBuilder::shared_pointer NTScalarArrayBuilder::arrayValue(
36 valueType = elementType;
39 return shared_from_this();
45 throw std::runtime_error(
"value array element type not set");
49 setId(NTScalarArray::URI)->
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]);
78 NTScalarArrayBuilder::shared_pointer NTScalarArrayBuilder::addDescriptor()
81 return shared_from_this();
84 NTScalarArrayBuilder::shared_pointer NTScalarArrayBuilder::addAlarm()
87 return shared_from_this();
90 NTScalarArrayBuilder::shared_pointer NTScalarArrayBuilder::addTimeStamp()
93 return shared_from_this();
96 NTScalarArrayBuilder::shared_pointer NTScalarArrayBuilder::addDisplay()
99 return shared_from_this();
102 NTScalarArrayBuilder::shared_pointer NTScalarArrayBuilder::addControl()
105 return shared_from_this();
118 NTScalarArrayBuilder::NTScalarArrayBuilder()
123 void NTScalarArrayBuilder::reset()
125 valueTypeSet =
false;
133 NTScalarArrayBuilder::shared_pointer NTScalarArrayBuilder::add(
string const & name,
FieldConstPtr const & field)
135 extraFields.push_back(field); extraFieldNames.push_back(name);
136 return shared_from_this();
141 const std::string NTScalarArray::URI(
"epics:nt/NTScalarArray:1.0");
143 NTScalarArray::shared_pointer NTScalarArray::wrap(
PVStructurePtr const & pvStructure)
145 if(!isCompatible(pvStructure))
return shared_pointer();
146 return wrapUnsafe(pvStructure);
149 NTScalarArray::shared_pointer NTScalarArray::wrapUnsafe(
PVStructurePtr const & pvStructure)
156 return NTUtils::is_a(structure->getID(), URI);
161 return is_a(pvStructure->getStructure());
173 .has<ScalarArray>(
"value")
174 .maybeHas<
Scalar>(
"descriptor")
175 .maybeHas<&NTField::isAlarm, Structure>(
"alarm")
176 .maybeHas<&NTField::isTimeStamp,
Structure>(
"timeStamp")
177 .maybeHas<&NTField::isDisplay, Structure>(
"display")
178 .maybeHas<&NTField::isControl,
Structure>(
"control")
184 if(!pvStructure)
return false;
186 return isCompatible(pvStructure->getStructure());
189 bool NTScalarArray::isValid()
199 bool NTScalarArray::attachTimeStamp(
PVTimeStamp &pvTimeStamp)
const 203 return pvTimeStamp.
attach(ts);
208 bool NTScalarArray::attachAlarm(
PVAlarm &pvAlarm)
const 212 return pvAlarm.
attach(al);
217 bool NTScalarArray::attachDisplay(
PVDisplay &pvDisplay)
const 221 return pvDisplay.
attach(dp);
226 bool NTScalarArray::attachControl(
PVControl &pvControl)
const 230 return pvControl.
attach(ctrl);
237 return pvNTScalarArray;
242 return pvNTScalarArray->getSubField<
PVString>(
"descriptor");
247 return pvNTScalarArray->getSubField<
PVStructure>(
"timeStamp");
270 NTScalarArray::NTScalarArray(
PVStructurePtr const & pvStructure) :
271 pvNTScalarArray(pvStructure), pvValue(pvNTScalarArray->getSubField(
"value"))
FORCE_INLINE std::tr1::shared_ptr< PVField > getSubField(A a)
bool attach(PVFieldPtr const &pvField)
This class implements introspection object for Scalar.
Methods for accessing an control structure.
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< NTScalarArray > NTScalarArrayPtr
std::tr1::shared_ptr< NTField > NTFieldPtr
std::tr1::shared_ptr< FieldBuilder > FieldBuilderPtr
PVString is special case, since it implements SerializableArray.
std::tr1::shared_ptr< detail::NTScalarArrayBuilder > NTScalarArrayBuilderPtr
This class implements introspection object for a structure.
Methods for accessing a timeStamp structure.
Methods for accessing an alarm structure.
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
Convenience Class for NTScalarArray.
std::tr1::shared_ptr< PVField > PVFieldPtr
Methods for accessing an display structure.
Interface for in-line creating of NTScalarArray.
bool attach(PVFieldPtr const &pvField)
FORCE_INLINE const PVDataCreatePtr & getPVDataCreate()
bool attach(PVFieldPtr const &pvField)