10 #define epicsExportSharedSymbols 17 namespace epics {
namespace nt {
23 NTTableBuilder::shared_pointer NTTableBuilder::addColumn(
27 if (std::find(columnNames.begin(), columnNames.end(), name) != columnNames.end())
28 throw std::runtime_error(
"duplicate column name");
30 columnNames.push_back(name);
31 types.push_back(scalarType);
33 return shared_from_this();
44 addNestedStructure(
"value");
46 vector<string>::size_type len = columnNames.size();
47 for (vector<string>::size_type
i = 0;
i < len;
i++)
48 nestedBuilder->addArray(columnNames[
i], types[i]);
50 builder = nestedBuilder->endNested();
53 builder->add(
"descriptor",
pvString);
56 builder->add(
"alarm", ntField->createAlarm());
59 builder->add(
"timeStamp", ntField->createTimeStamp());
61 size_t extraCount = extraFieldNames.size();
62 for (
size_t i = 0; i< extraCount; i++)
63 builder->add(extraFieldNames[i], extraFields[i]);
71 NTTableBuilder::shared_pointer NTTableBuilder::addDescriptor()
74 return shared_from_this();
77 NTTableBuilder::shared_pointer NTTableBuilder::addAlarm()
80 return shared_from_this();
83 NTTableBuilder::shared_pointer NTTableBuilder::addTimeStamp()
86 return shared_from_this();
92 size_t len = columnNames.size();
94 for(
size_t i=0;
i<len; ++
i) l[
i] = columnNames[
i];
105 NTTableBuilder::NTTableBuilder()
110 void NTTableBuilder::reset()
119 NTTableBuilder::shared_pointer NTTableBuilder::add(
string const & name,
FieldConstPtr const & field)
121 extraFields.push_back(field); extraFieldNames.push_back(name);
122 return shared_from_this();
128 const std::string NTTable::URI(
"epics:nt/NTTable:1.0");
132 if(!isCompatible(pvStructure))
return shared_pointer();
133 return wrapUnsafe(pvStructure);
138 return shared_pointer(
new NTTable(pvStructure));
143 return NTUtils::is_a(structure->getID(), URI);
148 return is_a(pvStructure->getStructure());
160 .has<Structure>(
"value")
162 .maybeHas<Scalar>(
"descriptor")
163 .maybeHas<&NTField::isAlarm,
Structure>(
"alarm")
164 .maybeHas<&NTField::isTimeStamp, Structure>(
"timeStamp");
170 StringArray::const_iterator it;
172 for (it = names.begin(); it != names.end(); ++it)
178 return result.
valid();
183 if(!pvStructure)
return false;
185 return isCompatible(pvStructure->getStructure());
188 bool NTTable::isValid()
192 if (getLabels()->getLength() != columns.size())
return false;
195 for (PVFieldPtrArray::const_iterator it = columns.begin();
196 it != columns.end();++it)
199 if (!column.get())
return false;
206 else if (length != colLength)
223 return pvTimeStamp.
attach(ts);
228 bool NTTable::attachAlarm(
PVAlarm &pvAlarm)
const 232 return pvAlarm.
attach(al);
244 return pvNTTable->getSubField<
PVString>(
"descriptor");
249 return pvNTTable->getSubField<
PVStructure>(
"timeStamp");
264 return pvValue->getStructure()->getFieldNames();
267 PVFieldPtr NTTable::getColumn(std::string
const & columnName)
const 269 return pvValue->getSubField(columnName);
273 pvNTTable(pvStructure), pvValue(pvNTTable->getSubField<
PVStructure>(
"value"))
FORCE_INLINE std::tr1::shared_ptr< PVField > getSubField(A a)
std::tr1::shared_ptr< detail::NTTableBuilder > NTTableBuilderPtr
A holder for a contiguous piece of memory.
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< PVStringArray > PVStringArrayPtr
std::tr1::shared_ptr< FieldBuilder > FieldBuilderPtr
PVString is special case, since it implements SerializableArray.
virtual std::size_t getLength() const =0
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.
std::vector< PVFieldPtr > PVFieldPtrArray
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
Result & has(const std::string &name)
std::tr1::shared_ptr< PVString > PVStringPtr
std::tr1::shared_ptr< NTTable > NTTablePtr
Interface for in-line creating of NTTable.
Convenience Class for NTTable.
std::vector< std::string > StringArray
std::tr1::shared_ptr< PVField > PVFieldPtr
shared_ptr< T > dynamic_pointer_cast(shared_ptr< U > const &r) BOOST_NOEXCEPT
std::tr1::shared_ptr< PVScalarArray > PVScalarArrayPtr
FORCE_INLINE const PVDataCreatePtr & getPVDataCreate()
bool attach(PVFieldPtr const &pvField)