9 #define epicsExportSharedSymbols 16 namespace epics {
namespace nt {
22 StructureConstPtr NTContinuumBuilder::createStructure()
24 FieldBuilderPtr builder =
25 getFieldCreate()->createFieldBuilder()->
26 setId(NTContinuum::URI)->
27 addArray(
"base", pvDouble)->
28 addArray(
"value", pvDouble)->
29 addArray(
"units", pvString);
32 builder->add(
"descriptor", pvString);
35 builder->add(
"alarm", ntField->createAlarm());
38 builder->add(
"timeStamp", ntField->createTimeStamp());
40 size_t extraCount = extraFieldNames.size();
41 for (
size_t i = 0; i< extraCount; i++)
42 builder->add(extraFieldNames[i], extraFields[i]);
45 StructureConstPtr s = builder->createStructure();
51 NTContinuumBuilder::shared_pointer NTContinuumBuilder::addDescriptor()
54 return shared_from_this();
57 NTContinuumBuilder::shared_pointer NTContinuumBuilder::addAlarm()
60 return shared_from_this();
63 NTContinuumBuilder::shared_pointer NTContinuumBuilder::addTimeStamp()
66 return shared_from_this();
70 PVStructurePtr NTContinuumBuilder::createPVStructure()
72 return getPVDataCreate()->createPVStructure(createStructure());
80 NTContinuumBuilder::NTContinuumBuilder()
85 void NTContinuumBuilder::reset()
90 extraFieldNames.clear();
94 NTContinuumBuilder::shared_pointer NTContinuumBuilder::add(
string const & name, FieldConstPtr
const & field)
96 extraFields.push_back(field); extraFieldNames.push_back(name);
97 return shared_from_this();
102 const std::string NTContinuum::URI(
"epics:nt/NTContinuum:1.0");
104 NTContinuum::shared_pointer NTContinuum::wrap(PVStructurePtr
const & pvStructure)
106 if(!isCompatible(pvStructure))
return shared_pointer();
107 return wrapUnsafe(pvStructure);
110 NTContinuum::shared_pointer NTContinuum::wrapUnsafe(PVStructurePtr
const & pvStructure)
112 return shared_pointer(
new NTContinuum(pvStructure));
115 bool NTContinuum::is_a(StructureConstPtr
const & structure)
117 return NTUtils::is_a(structure->getID(), URI);
120 bool NTContinuum::is_a(PVStructurePtr
const & pvStructure)
122 return is_a(pvStructure->getStructure());
125 bool NTContinuum::isCompatible(StructureConstPtr
const & structure)
134 .has<ScalarArray>(
"base")
135 .
has<ScalarArray>(
"value")
136 .has<ScalarArray>(
"units")
138 .maybeHas<&NTField::isAlarm, Structure>(
"alarm")
139 .
maybeHas<&NTField::isTimeStamp, Structure>(
"timeStamp")
143 bool NTContinuum::isCompatible(PVStructurePtr
const & pvStructure)
145 if(!pvStructure)
return false;
147 return isCompatible(pvStructure->getStructure());
150 bool NTContinuum::isValid()
152 return ((getUnits()->getLength()-1)*getBase()->getLength() ==
153 getValue()->getLength());
161 bool NTContinuum::attachTimeStamp(PVTimeStamp &pvTimeStamp)
const 163 PVStructurePtr ts = getTimeStamp();
165 return pvTimeStamp.attach(ts);
170 bool NTContinuum::attachAlarm(PVAlarm &pvAlarm)
const 172 PVStructurePtr al = getAlarm();
174 return pvAlarm.attach(al);
179 PVStructurePtr NTContinuum::getPVStructure()
const 181 return pvNTContinuum;
184 PVStringPtr NTContinuum::getDescriptor()
const 186 return pvNTContinuum->getSubField<PVString>(
"descriptor");
189 PVStructurePtr NTContinuum::getTimeStamp()
const 191 return pvNTContinuum->getSubField<PVStructure>(
"timeStamp");
194 PVStructurePtr NTContinuum::getAlarm()
const 196 return pvNTContinuum->getSubField<PVStructure>(
"alarm");
199 PVDoubleArrayPtr NTContinuum::getBase()
const 201 return pvNTContinuum->getSubField<PVDoubleArray>(
"base");
204 PVDoubleArrayPtr NTContinuum::getValue()
const 209 PVStringArrayPtr NTContinuum::getUnits()
const 211 return pvNTContinuum->getSubField<PVStringArray>(
"units");
214 NTContinuum::NTContinuum(PVStructurePtr
const & pvStructure) :
215 pvNTContinuum(pvStructure),
216 pvValue(pvNTContinuum->getSubField<PVDoubleArray>(
"value"))
std::tr1::shared_ptr< detail::NTContinuumBuilder > NTContinuumBuilderPtr
Convenience Class for NTContinuum.
Interface for in-line creating of NTContinuum.
Result & maybeHas(const std::string &name)
Validation methods for NT types.
std::tr1::shared_ptr< NTContinuum > NTContinuumPtr
std::tr1::shared_ptr< NTField > NTFieldPtr
Result & has(const std::string &name)