9 #define epicsExportSharedSymbols 16 namespace epics {
namespace nt {
22 NTHistogramBuilder::shared_pointer NTHistogramBuilder::value(
26 valueType = scalarType;
29 return shared_from_this();
35 throw std::runtime_error(
"value array element type not set");
39 setId(NTHistogram::URI)->
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]);
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();
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));
130 return NTUtils::is_a(structure->getID(), URI);
135 return is_a(pvStructure->getStructure());
147 .has<ScalarArray>(
"ranges")
149 .maybeHas<Scalar>(
"descriptor")
150 .maybeHas<&NTField::isAlarm,
Structure>(
"alarm")
151 .maybeHas<&NTField::isTimeStamp, Structure>(
"timeStamp")
157 if(!pvStructure.get())
return false;
159 return isCompatible(pvStructure->getStructure());
162 bool NTHistogram::isValid()
164 return (getValue()->getLength()+1 == getRanges()->getLength());
176 return pvTimeStamp.
attach(ts);
181 bool NTHistogram::attachAlarm(
PVAlarm &pvAlarm)
const 185 return pvAlarm.
attach(al);
192 return pvNTHistogram;
197 return pvNTHistogram->getSubField<
PVString>(
"descriptor");
202 return pvNTHistogram->getSubField<
PVStructure>(
"timeStamp");
221 pvNTHistogram(pvStructure),
FORCE_INLINE std::tr1::shared_ptr< PVField > getSubField(A a)
std::tr1::shared_ptr< detail::NTHistogramBuilder > NTHistogramBuilderPtr
Convenience Class for NTHistogram.
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< NTField > NTFieldPtr
std::tr1::shared_ptr< FieldBuilder > FieldBuilderPtr
PVString is special case, since it implements SerializableArray.
This class implements introspection object for a structure.
template class for all extensions of PVArray.
Methods for accessing a timeStamp structure.
Base class for a scalarArray.
Methods for accessing an alarm structure.
Data interface for a structure,.
std::tr1::shared_ptr< const Field > FieldConstPtr
FORCE_INLINE const FieldCreatePtr & getFieldCreate()
This class implements introspection object for scalar array.
std::tr1::shared_ptr< PVStructure > PVStructurePtr
std::tr1::shared_ptr< PVString > PVStringPtr
std::tr1::shared_ptr< NTHistogram > NTHistogramPtr
std::tr1::shared_ptr< PVScalarArray > PVScalarArrayPtr
Interface for in-line creating of NTHistogram.
std::tr1::shared_ptr< PVDoubleArray > PVDoubleArrayPtr
FORCE_INLINE const PVDataCreatePtr & getPVDataCreate()
bool attach(PVFieldPtr const &pvField)