9#define epicsExportSharedSymbols
14using namespace epics::pvData;
16namespace epics {
namespace nt {
23 epics::pvData::ScalarType scalarType
26 valueType = scalarType;
29 return shared_from_this();
35 throw std::runtime_error(
"value array element type not set");
37 FieldBuilderPtr builder =
38 getFieldCreate()->createFieldBuilder()->
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();
66 return shared_from_this();
72 return shared_from_this();
78 return shared_from_this();
92NTHistogramBuilder::NTHistogramBuilder()
97void NTHistogramBuilder::reset()
103 extraFieldNames.clear();
109 extraFields.push_back(field); extraFieldNames.push_back(name);
110 return shared_from_this();
125 return shared_pointer(
new NTHistogram(pvStructure));
135 return is_a(pvStructure->getStructure());
143 Result result(structure);
147 .has<ScalarArray>(
"ranges")
148 .has<ScalarArray>(
"value")
149 .maybeHas<Scalar>(
"descriptor")
151 .maybeHas<&NTField::isTimeStamp, Structure>(
"timeStamp")
157 if(!pvStructure.get())
return false;
176 return pvTimeStamp.attach(ts);
185 return pvAlarm.attach(al);
192 return pvNTHistogram;
197 return pvNTHistogram->getSubField<PVString>(
"descriptor");
202 return pvNTHistogram->getSubField<PVStructure>(
"timeStamp");
207 return pvNTHistogram->getSubField<PVStructure>(
"alarm");
212 return pvNTHistogram->getSubField<PVDoubleArray>(
"ranges");
220NTHistogram::NTHistogram(PVStructurePtr
const & pvStructure) :
221 pvNTHistogram(pvStructure),
222 pvValue(pvNTHistogram->getSubField<PVScalarArray>(
"value"))
bool isAlarm(epics::pvData::FieldConstPtr const &field)
Convenience Class for NTHistogram.
bool attachAlarm(epics::pvData::PVAlarm &pvAlarm) const
bool attachTimeStamp(epics::pvData::PVTimeStamp &pvTimeStamp) const
static const std::string URI
static bool isCompatible(epics::pvData::StructureConstPtr const &structure)
epics::pvData::PVDoubleArrayPtr getRanges() const
epics::pvData::PVScalarArrayPtr getValue() const
static shared_pointer wrap(epics::pvData::PVStructurePtr const &pvStructure)
static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const &pvStructure)
epics::pvData::PVStringPtr getDescriptor() const
epics::pvData::PVStructurePtr getAlarm() const
static NTHistogramBuilderPtr createBuilder()
static bool is_a(epics::pvData::StructureConstPtr const &structure)
epics::pvData::PVStructurePtr getPVStructure() const
epics::pvData::PVStructurePtr getTimeStamp() const
static bool is_a(const std::string &u1, const std::string &u2)
Interface for in-line creating of NTHistogram.
friend class ::epics::nt::NTHistogram
shared_pointer addTimeStamp()
shared_pointer value(epics::pvData::ScalarType scalarType)
epics::pvData::StructureConstPtr createStructure()
shared_pointer addAlarm()
shared_pointer addDescriptor()
epics::pvData::PVStructurePtr createPVStructure()
shared_pointer add(std::string const &name, epics::pvData::FieldConstPtr const &field)
std::tr1::shared_ptr< NTField > NTFieldPtr
std::tr1::shared_ptr< detail::NTHistogramBuilder > NTHistogramBuilderPtr
std::tr1::shared_ptr< NTHistogram > NTHistogramPtr