9 #define epicsExportSharedSymbols 16 namespace epics {
namespace nt {
22 NTScalarBuilder::shared_pointer NTScalarBuilder::value(
26 valueType = scalarType;
29 return shared_from_this();
35 throw std::runtime_error(
"value type not set");
39 setId(NTScalar::URI)->
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]);
68 NTScalarBuilder::shared_pointer NTScalarBuilder::addDescriptor()
71 return shared_from_this();
74 NTScalarBuilder::shared_pointer NTScalarBuilder::addAlarm()
77 return shared_from_this();
80 NTScalarBuilder::shared_pointer NTScalarBuilder::addTimeStamp()
83 return shared_from_this();
86 NTScalarBuilder::shared_pointer NTScalarBuilder::addDisplay()
89 return shared_from_this();
92 NTScalarBuilder::shared_pointer NTScalarBuilder::addControl()
95 return shared_from_this();
108 NTScalarBuilder::NTScalarBuilder()
113 void NTScalarBuilder::reset()
115 valueTypeSet =
false;
123 NTScalarBuilder::shared_pointer NTScalarBuilder::add(
string const & name,
FieldConstPtr const & field)
125 extraFields.push_back(field); extraFieldNames.push_back(name);
126 return shared_from_this();
132 const std::string NTScalar::URI(
"epics:nt/NTScalar:1.0");
136 if(!isCompatible(pvStructure))
return shared_pointer();
137 return wrapUnsafe(pvStructure);
140 NTScalar::shared_pointer NTScalar::wrapUnsafe(
PVStructurePtr const & pvStructure)
142 return shared_pointer(
new NTScalar(pvStructure));
147 return NTUtils::is_a(structure->getID(), URI);
152 return is_a(pvStructure->getStructure());
164 .has<Scalar>(
"value")
165 .maybeHas<
Scalar>(
"descriptor")
166 .maybeHas<&NTField::isAlarm, Structure>(
"alarm")
167 .maybeHas<&NTField::isTimeStamp,
Structure>(
"timeStamp")
168 .maybeHas<&NTField::isDisplay, Structure>(
"display")
169 .maybeHas<&NTField::isControl,
Structure>(
"control")
175 if(!pvStructure)
return false;
177 return isCompatible(pvStructure->getStructure());
180 bool NTScalar::isValid()
194 return pvTimeStamp.
attach(ts);
199 bool NTScalar::attachAlarm(
PVAlarm &pvAlarm)
const 203 return pvAlarm.
attach(al);
208 bool NTScalar::attachDisplay(
PVDisplay &pvDisplay)
const 212 return pvDisplay.
attach(dp);
217 bool NTScalar::attachControl(
PVControl &pvControl)
const 221 return pvControl.
attach(ctrl);
233 return pvNTScalar->getSubField<
PVString>(
"descriptor");
238 return pvNTScalar->getSubField<
PVStructure>(
"timeStamp");
262 pvNTScalar(pvStructure), pvValue(pvNTScalar->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< NTField > NTFieldPtr
Convenience Class for NTScalar.
std::tr1::shared_ptr< FieldBuilder > FieldBuilderPtr
PVString is special case, since it implements SerializableArray.
This class implements introspection object for a structure.
Methods for accessing a timeStamp structure.
Interface for in-line creating of NTScalar.
std::tr1::shared_ptr< detail::NTScalarBuilder > NTScalarBuilderPtr
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
std::tr1::shared_ptr< PVField > PVFieldPtr
Methods for accessing an display structure.
std::tr1::shared_ptr< NTScalar > NTScalarPtr
bool attach(PVFieldPtr const &pvField)
FORCE_INLINE const PVDataCreatePtr & getPVDataCreate()
bool attach(PVFieldPtr const &pvField)