9 #define epicsExportSharedSymbols 16 namespace epics {
namespace nt {
26 setId(NTAggregate::URI)->
31 builder->add(
"dispersion",
pvDouble);
37 builder->add(
"firstTimeStamp", ntField->createTimeStamp());
43 builder->add(
"lastTimeStamp", ntField->createTimeStamp());
52 builder->add(
"descriptor",
pvString);
55 builder->add(
"alarm", ntField->createAlarm());
58 builder->add(
"timeStamp", ntField->createTimeStamp());
60 size_t extraCount = extraFieldNames.size();
61 for (
size_t i = 0;
i< extraCount;
i++)
62 builder->add(extraFieldNames[
i], extraFields[i]);
71 NTAggregateBuilder::shared_pointer NTAggregateBuilder::addDispersion()
74 return shared_from_this();
77 NTAggregateBuilder::shared_pointer NTAggregateBuilder::addFirst()
80 return shared_from_this();
83 NTAggregateBuilder::shared_pointer NTAggregateBuilder::addFirstTimeStamp()
85 firstTimeStamp =
true;
86 return shared_from_this();
89 NTAggregateBuilder::shared_pointer NTAggregateBuilder::addLast()
92 return shared_from_this();
95 NTAggregateBuilder::shared_pointer NTAggregateBuilder::addLastTimeStamp()
98 return shared_from_this();
101 NTAggregateBuilder::shared_pointer NTAggregateBuilder::addMax()
104 return shared_from_this();
107 NTAggregateBuilder::shared_pointer NTAggregateBuilder::addMin()
110 return shared_from_this();
113 NTAggregateBuilder::shared_pointer NTAggregateBuilder::addDescriptor()
116 return shared_from_this();
119 NTAggregateBuilder::shared_pointer NTAggregateBuilder::addAlarm()
122 return shared_from_this();
125 NTAggregateBuilder::shared_pointer NTAggregateBuilder::addTimeStamp()
128 return shared_from_this();
141 NTAggregateBuilder::NTAggregateBuilder()
146 void NTAggregateBuilder::reset()
150 firstTimeStamp =
false;
152 lastTimeStamp =
false;
160 extraFieldNames.clear();
164 NTAggregateBuilder::shared_pointer NTAggregateBuilder::add(
string const & name,
FieldConstPtr const & field)
166 extraFields.push_back(field); extraFieldNames.push_back(name);
167 return shared_from_this();
173 const std::string NTAggregate::URI(
"epics:nt/NTAggregate:1.0");
175 NTAggregate::shared_pointer NTAggregate::wrap(
PVStructurePtr const & pvStructure)
177 if(!isCompatible(pvStructure))
return shared_pointer();
178 return wrapUnsafe(pvStructure);
181 NTAggregate::shared_pointer NTAggregate::wrapUnsafe(
PVStructurePtr const & pvStructure)
183 return shared_pointer(
new NTAggregate(pvStructure));
188 return NTUtils::is_a(structure->getID(), URI);
193 return is_a(pvStructure->getStructure());
206 .has<Scalar>(
"value")
208 .maybeHas<Scalar>(
"dispersion")
209 .maybeHas<
Scalar>(
"first")
210 .maybeHas<&NTField::isTimeStamp, Structure>(
"firstTimeStamp")
212 .maybeHas<&NTField::isTimeStamp, Structure>(
"lastTimeStamp")
214 .maybeHas<Scalar>(
"min")
215 .maybeHas<
Scalar>(
"descriptor")
216 .maybeHas<&NTField::isAlarm, Structure>(
"alarm")
217 .maybeHas<&NTField::isTimeStamp,
Structure>(
"timeStamp")
223 if(!pvStructure)
return false;
225 return isCompatible(pvStructure->getStructure());
228 bool NTAggregate::isValid()
242 return pvTimeStamp.
attach(ts);
247 bool NTAggregate::attachAlarm(
PVAlarm &pvAlarm)
const 251 return pvAlarm.
attach(al);
258 return pvNTAggregate;
263 return pvNTAggregate->getSubField<
PVString>(
"descriptor");
268 return pvNTAggregate->getSubField<
PVStructure>(
"timeStamp");
288 return pvNTAggregate->getSubField<
PVDouble>(
"dispersion");
293 return pvNTAggregate->getSubField<
PVDouble>(
"first");
298 return pvNTAggregate->getSubField<
PVStructure>(
"firstTimeStamp");
308 return pvNTAggregate->getSubField<
PVStructure>(
"lastTimeStamp");
318 return pvNTAggregate->getSubField<
PVDouble>(
"min");
322 pvNTAggregate(pvStructure), pvValue(pvNTAggregate->getSubField<
PVDouble>(
"value"))
FORCE_INLINE std::tr1::shared_ptr< PVField > getSubField(A a)
This class implements introspection object for Scalar.
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< NTAggregate > NTAggregatePtr
std::tr1::shared_ptr< NTField > NTFieldPtr
Convenience Class for NTAggregate.
std::tr1::shared_ptr< PVLong > PVLongPtr
std::tr1::shared_ptr< FieldBuilder > FieldBuilderPtr
PVString is special case, since it implements SerializableArray.
std::tr1::shared_ptr< detail::NTAggregateBuilder > NTAggregateBuilderPtr
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
Class that holds the data for each possible scalar type.
Interface for in-line creating of NTAggregate.
FORCE_INLINE const PVDataCreatePtr & getPVDataCreate()
std::tr1::shared_ptr< PVDouble > PVDoublePtr
bool attach(PVFieldPtr const &pvField)