9#define epicsExportSharedSymbols
14using namespace epics::pvData;
16namespace epics {
namespace nt {
24 FieldBuilderPtr builder =
25 getFieldCreate()->createFieldBuilder()->
27 addArray(
"value", pvDouble);
30 builder->addArray(
"dim", pvInt);
33 builder->add(
"descriptor", pvString);
36 builder->add(
"alarm", ntField->createAlarm());
39 builder->add(
"timeStamp", ntField->createTimeStamp());
42 builder->add(
"display", ntField->createDisplay());
44 size_t extraCount = extraFieldNames.size();
45 for (
size_t i = 0; i< extraCount; i++)
46 builder->add(extraFieldNames[i], extraFields[i]);
49 StructureConstPtr s = builder->createStructure();
58 return shared_from_this();
64 return shared_from_this();
70 return shared_from_this();
76 return shared_from_this();
82 return shared_from_this();
95NTMatrixBuilder::NTMatrixBuilder()
100void NTMatrixBuilder::reset()
107 extraFieldNames.clear();
113 extraFields.push_back(field); extraFieldNames.push_back(name);
114 return shared_from_this();
129 return shared_pointer(
new NTMatrix(pvStructure));
139 return is_a(pvStructure->getStructure());
147 Result result(structure);
151 .has<ScalarArray>(
"value")
152 .maybeHas<ScalarArray>(
"dim")
153 .maybeHas<Scalar>(
"descriptor")
155 .maybeHas<&NTField::isTimeStamp, Structure>(
"timeStamp")
162 if(!pvStructure)
return false;
169 int valueLength =
getValue()->getLength();
170 if (valueLength == 0)
173 PVIntArrayPtr pvDim =
getDim();
176 int length = pvDim->getLength();
177 if (length != 1 && length !=2)
180 PVIntArray::const_svector data = pvDim->view();
181 int expectedLength = 1;
182 for (PVIntArray::const_svector::const_iterator it = data.begin();
183 it != data.end(); ++it)
185 expectedLength *= *it;
187 if (expectedLength != valueLength)
202 return pvTimeStamp.attach(ts);
211 return pvAlarm.attach(al);
220 return pvDisplay.attach(dp);
232 return pvNTMatrix->getSubField<PVString>(
"descriptor");
237 return pvNTMatrix->getSubField<PVStructure>(
"timeStamp");
242 return pvNTMatrix->getSubField<PVStructure>(
"alarm");
247 return pvNTMatrix->getSubField<PVStructure>(
"display");
257 return pvNTMatrix->getSubField<PVIntArray>(
"dim");
260NTMatrix::NTMatrix(PVStructurePtr
const & pvStructure) :
261 pvNTMatrix(pvStructure),
262 pvValue(pvNTMatrix->getSubField<PVDoubleArray>(
"value"))
bool isAlarm(epics::pvData::FieldConstPtr const &field)
bool isDisplay(epics::pvData::FieldConstPtr const &field)
Convenience Class for NTMatrix.
epics::pvData::PVStructurePtr getAlarm() const
static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const &pvStructure)
static bool isCompatible(epics::pvData::StructureConstPtr const &structure)
epics::pvData::PVStringPtr getDescriptor() const
static bool is_a(epics::pvData::StructureConstPtr const &structure)
epics::pvData::PVStructurePtr getTimeStamp() const
static const std::string URI
epics::pvData::PVDoubleArrayPtr getValue() const
epics::pvData::PVIntArrayPtr getDim() const
epics::pvData::PVStructurePtr getPVStructure() const
bool attachDisplay(epics::pvData::PVDisplay &pvDisplay) const
bool attachTimeStamp(epics::pvData::PVTimeStamp &pvTimeStamp) const
epics::pvData::PVStructurePtr getDisplay() const
static NTMatrixBuilderPtr createBuilder()
bool attachAlarm(epics::pvData::PVAlarm &pvAlarm) const
static shared_pointer wrap(epics::pvData::PVStructurePtr const &pvStructure)
static bool is_a(const std::string &u1, const std::string &u2)
Interface for in-line creating of NTMatrix.
epics::pvData::StructureConstPtr createStructure()
shared_pointer addDescriptor()
shared_pointer addDisplay()
epics::pvData::PVStructurePtr createPVStructure()
shared_pointer addAlarm()
friend class ::epics::nt::NTMatrix
shared_pointer add(std::string const &name, epics::pvData::FieldConstPtr const &field)
shared_pointer addTimeStamp()
std::tr1::shared_ptr< NTMatrix > NTMatrixPtr
std::tr1::shared_ptr< NTField > NTFieldPtr
std::tr1::shared_ptr< detail::NTMatrixBuilder > NTMatrixBuilderPtr