9 #define epicsExportSharedSymbols 16 namespace epics {
namespace nt {
22 StructureConstPtr NTAggregateBuilder::createStructure()
24 FieldBuilderPtr builder =
25 getFieldCreate()->createFieldBuilder()->
26 setId(NTAggregate::URI)->
27 add(
"value", pvDouble)->
31 builder->add(
"dispersion", pvDouble);
34 builder->add(
"first", pvDouble);
37 builder->add(
"firstTimeStamp", ntField->createTimeStamp());
40 builder->add(
"last" , pvDouble);
43 builder->add(
"lastTimeStamp", ntField->createTimeStamp());
46 builder->add(
"max", pvDouble);
49 builder->add(
"min", pvDouble);
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]);
65 StructureConstPtr s = builder->createStructure();
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();
131 PVStructurePtr NTAggregateBuilder::createPVStructure()
133 return getPVDataCreate()->createPVStructure(createStructure());
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));
186 bool NTAggregate::is_a(StructureConstPtr
const & structure)
188 return NTUtils::is_a(structure->getID(), URI);
191 bool NTAggregate::is_a(PVStructurePtr
const & pvStructure)
193 return is_a(pvStructure->getStructure());
197 bool NTAggregate::isCompatible(StructureConstPtr
const &structure)
206 .has<Scalar>(
"value")
208 .maybeHas<Scalar>(
"dispersion")
210 .maybeHas<&NTField::isTimeStamp, Structure>(
"firstTimeStamp")
212 .maybeHas<&NTField::isTimeStamp, Structure>(
"lastTimeStamp")
214 .maybeHas<Scalar>(
"min")
216 .maybeHas<&NTField::isAlarm, Structure>(
"alarm")
217 .
maybeHas<&NTField::isTimeStamp, Structure>(
"timeStamp")
221 bool NTAggregate::isCompatible(PVStructurePtr
const & pvStructure)
223 if(!pvStructure)
return false;
225 return isCompatible(pvStructure->getStructure());
228 bool NTAggregate::isValid()
238 bool NTAggregate::attachTimeStamp(PVTimeStamp &pvTimeStamp)
const 240 PVStructurePtr ts = getTimeStamp();
242 return pvTimeStamp.attach(ts);
247 bool NTAggregate::attachAlarm(PVAlarm &pvAlarm)
const 249 PVStructurePtr al = getAlarm();
251 return pvAlarm.attach(al);
256 PVStructurePtr NTAggregate::getPVStructure()
const 258 return pvNTAggregate;
261 PVStringPtr NTAggregate::getDescriptor()
const 263 return pvNTAggregate->getSubField<PVString>(
"descriptor");
266 PVStructurePtr NTAggregate::getTimeStamp()
const 268 return pvNTAggregate->getSubField<PVStructure>(
"timeStamp");
271 PVStructurePtr NTAggregate::getAlarm()
const 273 return pvNTAggregate->getSubField<PVStructure>(
"alarm");
276 PVDoublePtr NTAggregate::getValue()
const 281 PVLongPtr NTAggregate::getN()
const 283 return pvNTAggregate->getSubField<PVLong>(
"N");
286 PVDoublePtr NTAggregate::getDispersion()
const 288 return pvNTAggregate->getSubField<PVDouble>(
"dispersion");
291 PVDoublePtr NTAggregate::getFirst()
const 293 return pvNTAggregate->getSubField<PVDouble>(
"first");
296 PVStructurePtr NTAggregate::getFirstTimeStamp()
const 298 return pvNTAggregate->getSubField<PVStructure>(
"firstTimeStamp");
301 PVDoublePtr NTAggregate::getLast()
const 303 return pvNTAggregate->getSubField<PVDouble>(
"last");
306 PVStructurePtr NTAggregate::getLastTimeStamp()
const 308 return pvNTAggregate->getSubField<PVStructure>(
"lastTimeStamp");
311 PVDoublePtr NTAggregate::getMax()
const 313 return pvNTAggregate->getSubField<PVDouble>(
"max");
316 PVDoublePtr NTAggregate::getMin()
const 318 return pvNTAggregate->getSubField<PVDouble>(
"min");
321 NTAggregate::NTAggregate(PVStructurePtr
const & pvStructure) :
322 pvNTAggregate(pvStructure), pvValue(pvNTAggregate->getSubField<PVDouble>(
"value"))
Result & maybeHas(const std::string &name)
Validation methods for NT types.
std::tr1::shared_ptr< NTAggregate > NTAggregatePtr
std::tr1::shared_ptr< NTField > NTFieldPtr
Convenience Class for NTAggregate.
std::tr1::shared_ptr< detail::NTAggregateBuilder > NTAggregateBuilderPtr
Result & has(const std::string &name)
Interface for in-line creating of NTAggregate.