9 #define epicsExportSharedSymbols 16 namespace epics {
namespace nt {
22 NTHistogramBuilder::shared_pointer NTHistogramBuilder::value(
23 epics::pvData::ScalarType scalarType
26 valueType = scalarType;
29 return shared_from_this();
32 StructureConstPtr NTHistogramBuilder::createStructure()
35 throw std::runtime_error(
"value array element type not set");
37 FieldBuilderPtr builder =
38 getFieldCreate()->createFieldBuilder()->
39 setId(NTHistogram::URI)->
40 addArray(
"ranges", pvDouble)->
41 addArray(
"value", valueType);
44 builder->add(
"descriptor", pvString);
47 builder->add(
"alarm", ntField->createAlarm());
50 builder->add(
"timeStamp", ntField->createTimeStamp());
52 size_t extraCount = extraFieldNames.size();
53 for (
size_t i = 0; i< extraCount; i++)
54 builder->add(extraFieldNames[i], extraFields[i]);
57 StructureConstPtr s = builder->createStructure();
63 NTHistogramBuilder::shared_pointer NTHistogramBuilder::addDescriptor()
66 return shared_from_this();
69 NTHistogramBuilder::shared_pointer NTHistogramBuilder::addAlarm()
72 return shared_from_this();
75 NTHistogramBuilder::shared_pointer NTHistogramBuilder::addTimeStamp()
78 return shared_from_this();
82 PVStructurePtr NTHistogramBuilder::createPVStructure()
84 return getPVDataCreate()->createPVStructure(createStructure());
92 NTHistogramBuilder::NTHistogramBuilder()
97 void NTHistogramBuilder::reset()
103 extraFieldNames.clear();
107 NTHistogramBuilder::shared_pointer NTHistogramBuilder::add(
string const & name, FieldConstPtr
const & field)
109 extraFields.push_back(field); extraFieldNames.push_back(name);
110 return shared_from_this();
115 const std::string NTHistogram::URI(
"epics:nt/NTHistogram:1.0");
117 NTHistogram::shared_pointer NTHistogram::wrap(PVStructurePtr
const & pvStructure)
119 if(!isCompatible(pvStructure))
return shared_pointer();
120 return wrapUnsafe(pvStructure);
123 NTHistogram::shared_pointer NTHistogram::wrapUnsafe(PVStructurePtr
const & pvStructure)
125 return shared_pointer(
new NTHistogram(pvStructure));
128 bool NTHistogram::is_a(StructureConstPtr
const & structure)
130 return NTUtils::is_a(structure->getID(), URI);
133 bool NTHistogram::is_a(PVStructurePtr
const & pvStructure)
135 return is_a(pvStructure->getStructure());
138 bool NTHistogram::isCompatible(StructureConstPtr
const &structure)
147 .has<ScalarArray>(
"ranges")
148 .
has<ScalarArray>(
"value")
149 .maybeHas<Scalar>(
"descriptor")
150 .
maybeHas<&NTField::isAlarm, Structure>(
"alarm")
151 .maybeHas<&NTField::isTimeStamp, Structure>(
"timeStamp")
155 bool NTHistogram::isCompatible(PVStructurePtr
const & pvStructure)
157 if(!pvStructure.get())
return false;
159 return isCompatible(pvStructure->getStructure());
162 bool NTHistogram::isValid()
164 return (getValue()->getLength()+1 == getRanges()->getLength());
172 bool NTHistogram::attachTimeStamp(PVTimeStamp &pvTimeStamp)
const 174 PVStructurePtr ts = getTimeStamp();
176 return pvTimeStamp.attach(ts);
181 bool NTHistogram::attachAlarm(PVAlarm &pvAlarm)
const 183 PVStructurePtr al = getAlarm();
185 return pvAlarm.attach(al);
190 PVStructurePtr NTHistogram::getPVStructure()
const 192 return pvNTHistogram;
195 PVStringPtr NTHistogram::getDescriptor()
const 197 return pvNTHistogram->getSubField<PVString>(
"descriptor");
200 PVStructurePtr NTHistogram::getTimeStamp()
const 202 return pvNTHistogram->getSubField<PVStructure>(
"timeStamp");
205 PVStructurePtr NTHistogram::getAlarm()
const 207 return pvNTHistogram->getSubField<PVStructure>(
"alarm");
210 PVDoubleArrayPtr NTHistogram::getRanges()
const 212 return pvNTHistogram->getSubField<PVDoubleArray>(
"ranges");
215 PVScalarArrayPtr NTHistogram::getValue()
const 220 NTHistogram::NTHistogram(PVStructurePtr
const & pvStructure) :
221 pvNTHistogram(pvStructure),
222 pvValue(pvNTHistogram->getSubField<PVScalarArray>(
"value"))
std::tr1::shared_ptr< detail::NTHistogramBuilder > NTHistogramBuilderPtr
Convenience Class for NTHistogram.
Result & maybeHas(const std::string &name)
Validation methods for NT types.
std::tr1::shared_ptr< NTField > NTFieldPtr
Result & has(const std::string &name)
std::tr1::shared_ptr< NTHistogram > NTHistogramPtr
Interface for in-line creating of NTHistogram.