Merge branch 'master' into release/5.0

This commit is contained in:
Dave Hickin
2015-10-16 23:25:24 +01:00
42 changed files with 3553 additions and 1336 deletions

View File

@ -1,4 +1,81 @@
<h1>Release 4.0 IN DEVELOPMENT</h1>
<h1>Release 5.0</h1>
<p>This release adds support through wrapper classes and builders for the
remaining Normative Types:</p>
<ul>
<li>NTEnum</li>
<li>NTMatrix</li>
<li>NTURI</li>
<li>NTAttribute</li>
<li>NTContinuum</li>
<li>NTHistogram</li>
<li>NTAggregate</li>
<li>NTUnion</li>
<li>NTScalarMultiChannel</li>
</ul>
<p>Release 5.0 therefore implements fully the
<a href="http://epics-pvdata.sourceforge.net/alpha/normativeTypes/normativeTypes_20150316.html">16 Mar 2015 version</a>
of the normativeTypes specification.</p>
<p>Each wrapper class has an extended API:</p>
<ul>
<li>is_a now has a convenience overload taking a PVStructure.</li>
<li>isCompatible, reporting introspection type compatibility, now has an overload
taking a Structure. The PVStructure version is retained as a convenience
method and for backwards compatibility.</li>
<li>An isValid function now reports validity of a compatible PVStructure's data
with respect to the specification.</li>
</ul>
<p>Other changes are:</p>
<ul>
<li>Support for NTAttributes extended as required by NTNDArray
(NTNDArrayAttributes).</li>
<li>A new class for parsing NT IDs (NTID).</li>
<li>Resolution of the confusion between column names and labels in NTTable and
improved API. Function for adding columns is now addColumn rather than add.
New getColumnNames function provided.</li>
<li>isConnected is treated as an optional rather than a required field in
NTMultiChannelArray. isConnected() and addIsConnected() functions added to
wrapper and builder respectively.</li>
<li>Unit tests for all new classes.</li>
</ul>
<h1>Release 4.0</h1>
<p>This is the first release of normativeTypesCPP that is part of an official
EPICS V4 release.
It is a major rewrite of the previous versions of normativeTypesCPP.</p>
It is a major rewrite of the previous versions of normativeTypesCPP.</p>
<p>This release provides support through wrapper classes and builders for the
following Normative Types:</p>
<ul>
<li>NTScalar</li>
<li>NTScalarArray</li>
<li>NTNameValue</li>
<li>NTTable</li>
<li>NTMultiChannel</li>
<li>NTNDArray</li>
</ul>
<p>Each type has a wrapper class of the same name which has functions for checking
compatibility of existing PVStructures (isCompatible) and the reported types of
Structures (is_a), wraps existing PVStructures (wrap, wrapUnsafe) and provides
a convenient interface to all required and optional fields.</p>
<p>Each type has a builder which can create a Structure, a PVStructure or a
wrapper around a new PVStructure. In each case optional or extra fields can be
added and options such as choice of scalar type can be made.</p>
<p>Additional features are:</p>
<ul>
<li>Utility classes NTField and NTPVField for standard structure fields and
NTUtils for type IDs.</li>
<li>Unit tests for the implemented classes.</li>
</ul>

View File

@ -1,7 +1,75 @@
Release 4.0 IN DEVELOPMENT
Release 5.0
===========
This release adds support through wrapper classes and builders for the
remaining Normative Types:
* NTEnum
* NTMatrix
* NTURI
* NTAttribute
* NTContinuum
* NTHistogram
* NTAggregate
* NTUnion
* NTScalarMultiChannel
Release 5.0 therefore implements fully the
[16 Mar 2015 version](http://epics-pvdata.sourceforge.net/alpha/normativeTypes/normativeTypes_20150316.html)
of the normativeTypes specification.
Each wrapper class has an extended API:
* is_a now has a convenience overload taking a PVStructure.
* isCompatible, reporting introspection type compatibility, now has an overload
taking a Structure. The PVStructure version is retained as a convenience
method and for backwards compatibility.
* An isValid function now reports validity of a compatible PVStructure's data
with respect to the specification.
Other changes are:
* Support for NTAttributes extended as required by NTNDArray
(NTNDArrayAttributes).
* A new class for parsing NT IDs (NTID).
* Resolution of the confusion between column names and labels in NTTable and
improved API. Function for adding columns is now addColumn rather than add.
New getColumnNames function provided.
* isConnected is treated as an optional rather than a required field in
NTMultiChannelArray. isConnected() and addIsConnected() functions added to
wrapper and builder respectively.
* Unit tests for all new classes.
Release 4.0
===========
This is the first release of normativeTypesCPP that is part of an official
EPICS V4 release.
It is a major rewrite of the previous versions of normativeTypesCPP.
This release provides support through wrapper classes and builders for the
following Normative Types:
* NTScalar
* NTScalarArray
* NTNameValue
* NTTable
* NTMultiChannel
* NTNDArray
Each type has a wrapper class of the same name which has functions for checking
compatibility of existing PVStructures (isCompatible) and the reported types of
Structures (is_a), wraps existing PVStructures (wrap, wrapUnsafe) and provides
a convenient interface to all required and optional fields.
Each type has a builder which can create a Structure, a PVStructure or a
wrapper around a new PVStructure. In each case optional or extra fields can be
added and options such as choice of scalar type can be made.
Additional features are:
* Utility classes NTField and NTPVField for standard structure fields and
NTUtils for type IDs.
* Unit tests for the implemented classes.

View File

@ -1,22 +0,0 @@
<h1>TODO</h1>
<h2>NTScalarArray</h2>
<p>NTScalarArrayBuilder::arrayValue</p>
<p>Should this be:</p>
<p>NTScalarArrayBuilder::value</p>
<p>This makes NTScalarArray consistent with other NTTypes.</p>
<h2>NTNameValue</h2>
<p>This does not have a value field like all the other NTTypes.
Perhaps instead of</p>
<pre><code>NTNameValue
string[] name
string[] value
</code></pre>
<p>It should be</p>
<pre><code>NTNameValue
value
string[] name
string[] value
</code></pre>
<h2>NTTable</h2>
<p>Should lables be label?
Compare with name,value from NTNameValue.</p>

View File

@ -1,37 +1,5 @@
TODO
===========
====
NTScalarArray
------------
Documentation for recently added types.
NTScalarArrayBuilder::arrayValue
Should this be:
NTScalarArrayBuilder::value
This makes NTScalarArray consistent with other NTTypes.
NTNameValue
------------
This does not have a value field like all the other NTTypes.
Perhaps instead of
NTNameValue
string[] name
string[] value
It should be
NTNameValue
value
string[] name
string[] value
NTTable
----------
Should lables be label?
Compare with name,value from NTNameValue.

View File

@ -37,7 +37,7 @@
<h1>EPICS ntCPP</h1>
<!-- Maturity: Working Draft or Request for Comments, or Recommendation, and date. -->
<h2 class="nocount">EPICS v4 Working Group, Working Draft, 09-Oct-2014</h2>
<h2 class="nocount">EPICS v4 Working Group, Working Draft, 16-Oct-2015</h2>
<dl>
<dt>Latest version:</dt>
@ -46,11 +46,11 @@
</dd>
<dt>This version:</dt>
<dd><a
href="ntCPP_20141009.html">ntCPP_20141009.html</a>
href="ntCPP_20151016.html">ntCPP_20151016.html</a>
</dd>
<dt>Previous version:</dt>
<dd><a
href="ntCPP_20140919.html">ntCPP_20140919.html</a>
href="ntCPP_20141009.html">ntCPP_20141009.html</a>
</dd>
<dt>Editors:</dt>
<dd> Marty Kraimer, BNL<br />
@ -80,7 +80,7 @@ V4 control system programming environment:<br />
<h2 class="nocount">Status of this Document</h2>
<p>This is the 09-Oct-2014 version of the C++ implementation of pvData.
<p>This is the 16-Oct-2015 version of the C++ implementation of pvData.
</p>
@ -106,6 +106,29 @@ pvDataCPP.html
</a>
</p>
<p>At present the following normative types are implemented:</p>
<ul>
<li><b>NTScalar</b></li>
<li><b>NTScalarArray</b></li>
<li><b>NTEnum</b></li>
<li><b>NTMatrix</b></li>
<li><b>NTURI</b></li>
<li><b>NTNameValue</b></li>
<li><b>NTTable</b></li>
<li><b>NTAttribute</b></li>
<li><b>NTMultiChannel</b></li>
<li><b>NTNDArray</b></li>
<li><b>NTContinuum</b></li>
<li><b>NTHistogram</b></li>
<li><b>NTAggregate</b></li>
</ul>
<p>There is also additional support for NTAttributes which are extended as required by NTNDArray.</p>
<p>Thus normativeTypesCPP implements fully the <a href="http://epics-pvdata.sourceforge.net/alpha/normativeTypes/normativeTypes_20150316.html">
March 16 2015</a> version the Normative Types Specification.</p>
<p>This version of the document only covers the types originally implemented:</p>
<dl>
<dt>NTScalar</dt>
<dd>This has a value field that has type scalar</dd>
@ -128,6 +151,9 @@ pvDataCPP.html
<dd>This type holds NDArray data as defined by the areaDetector facility.
</dd>
</dl>
<p>Documentation for the remaining types will addressed in the next version of this document.</p>
<p>Each normative type consists of a set of mandatory fields, a set of optional fields,
and any arbitrary number of extra fields.
The mandatory and optional fields are meant for use by standard tools such

File diff suppressed because it is too large Load Diff

View File

@ -171,15 +171,15 @@ NTAggregateBuilder::shared_pointer NTAggregateBuilder::add(string const & name,
const std::string NTAggregate::URI("epics:nt/NTAggregate:1.0");
NTAggregate::shared_pointer NTAggregate::wrap(PVStructurePtr const & structure)
NTAggregate::shared_pointer NTAggregate::wrap(PVStructurePtr const & pvStructure)
{
if(!isCompatible(structure)) return shared_pointer();
return wrapUnsafe(structure);
if(!isCompatible(pvStructure)) return shared_pointer();
return wrapUnsafe(pvStructure);
}
NTAggregate::shared_pointer NTAggregate::wrapUnsafe(PVStructurePtr const & structure)
NTAggregate::shared_pointer NTAggregate::wrapUnsafe(PVStructurePtr const & pvStructure)
{
return shared_pointer(new NTAggregate(structure));
return shared_pointer(new NTAggregate(pvStructure));
}
bool NTAggregate::is_a(StructureConstPtr const & structure)

View File

@ -42,89 +42,90 @@ namespace detail {
POINTER_DEFINITIONS(NTAggregateBuilder);
/**
* Add dispersion field to the NTAggregate.
* Adds dispersion field to the NTAggregate.
* @return this instance of <b>NTAggregateBuilder</b>.
*/
shared_pointer addDispersion();
/**
* Add first field to the NTAggregate.
* Adds first field to the NTAggregate.
* @return this instance of <b>NTAggregateBuilder</b>.
*/
shared_pointer addFirst();
/**
* Add firstTimeStamp field to the NTAggregate.
* Adds firstTimeStamp field to the NTAggregate.
* @return this instance of <b>NTAggregateBuilder</b>.
*/
shared_pointer addFirstTimeStamp();
/**
* Add last field to the NTAggregate.
* Adds last field to the NTAggregate.
* @return this instance of <b>NTAggregateBuilder</b>.
*/
shared_pointer addLast();
/**
* Add lastTimeStamp field to the NTAggregate.
* Adds lastTimeStamp field to the NTAggregate.
* @return this instance of <b>NTAggregateBuilder</b>.
*/
shared_pointer addLastTimeStamp();
/**
* Add max field to the NTAggregate.
* Adds max field to the NTAggregate.
* @return this instance of <b>NTAggregateBuilder</b>.
*/
shared_pointer addMax();
/**
* Add min field to the NTAggregate.
* Adds min field to the NTAggregate.
* @return this instance of <b>NTAggregateBuilder</b>.
*/
shared_pointer addMin();
/**
* Add descriptor field to the NTAggregate.
* Adds descriptor field to the NTAggregate.
* @return this instance of <b>NTAggregateBuilder</b>.
*/
shared_pointer addDescriptor();
/**
* Add alarm structure to the NTAggregate.
* Adds alarm field to the NTAggregate.
* @return this instance of <b>NTAggregateBuilder</b>.
*/
shared_pointer addAlarm();
/**
* Add timeStamp structure to the NTAggregate.
* Adds timeStamp field to the NTAggregate.
* @return this instance of <b>NTAggregateBuilder</b>.
*/
shared_pointer addTimeStamp();
/**
* Create a <b>Structure</b> that represents NTAggregate.
* Creates a <b>Structure</b> that represents NTAggregate.
* This resets this instance state and allows new instance to be created.
* @return a new instance of a <b>Structure</b>.
*/
epics::pvData::StructureConstPtr createStructure();
/**
* Create a <b>PVStructure</b> that represents NTAggregate.
* Creates a <b>PVStructure</b> that represents NTAggregate.
* This resets this instance state and allows new instance to be created.
* @return a new instance of a <b>PVStructure</b>.
*/
epics::pvData::PVStructurePtr createPVStructure();
/**
* Create a <b>NTAggregate</b> instance.
* Creates a <b>NTAggregate</b> instance.
* This resets this instance state and allows new instance to be created.
* @return a new instance of a <b>NTAggregate</b>.
*/
NTAggregatePtr create();
/**
* Add extra <b>Field</b> to the type.
* @param name name of the field.
* @param field a field to add.
* Adds extra <b>Field</b> to the type.
* @param name the name of the field.
* @param field the field to be added.
* @return this instance of <b>NTAggregateBuilder</b>.
*/
shared_pointer add(std::string const & name, epics::pvData::FieldConstPtr const & field);
@ -171,65 +172,92 @@ public:
static const std::string URI;
/**
* Wrap (aka dynamic cast, or wrap) the structure to NTAggregate.
* First isCompatible is called.
* This method will nullptr if the structure is is not compatible.
* This method will nullptr if the structure is nullptr.
* @param structure The structure to wrap-ed (dynamic cast, wrapped) to NTAggregate.
* @return NTAggregate instance on success, nullptr otherwise.
* Creates an NTAggregate wrapping the specified PVStructure if the latter is compatible.
* <p>
* Checks the supplied PVStructure is compatible with NTAggregate
* and if so returns an NTAggregate which wraps it.
* This method will return null if the structure is is not compatible
* or is null.
*
* @param pvStructure the PVStructure to be wrapped
* @return the NTAggregate instance on success, null otherwise
*/
static shared_pointer wrap(epics::pvData::PVStructurePtr const & structure);
static shared_pointer wrap(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Wrap (aka dynamic cast, or wrap) the structure to NTAggregate without checking for isCompatible
* @param structure The structure to wrap-ed (dynamic cast, wrapped) to NTAggregate.
* @return NTAggregate instance.
* Creates an NTAggregate wrapping the specified PVStructure, regardless of the latter's compatibility.
* <p>
* No checks are made as to whether the specified PVStructure
* is compatible with NTAggregate or is non-null.
*
* @param pvStructure the PVStructure to be wrapped
* @return the NTAggregate instance
*/
static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const & structure);
static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Is the structure an NTAggregate.
* @param structure The structure to test.
* @return (false,true) if (is not, is) an NTAggregate.
* Returns whether the specified Structure reports to be a compatible NTAggregate.
* <p>
* Checks if the specified Structure reports compatibility with this
* version of NTAggregate through its type ID, including checking version numbers.
* The return value does not depend on whether the structure is actually
* compatible in terms of its introspection type.
*
* @param structure the Structure to test
* @return (false,true) if the specified Structure (is not, is) a compatible NTAggregate
*/
static bool is_a(epics::pvData::StructureConstPtr const & structure);
/**
* Is the structure an NTAggregate.
* @param pvStructure The PVStructure to test.
* @return (false,true) if (is not, is) an NTAggregate.
* Returns whether the specified PVStructure reports to be a compatible NTAggregate.
* <p>
* Checks if the specified PVStructure reports compatibility with this
* version of NTAggregate through its type ID, including checking version numbers.
* The return value does not depend on whether the structure is actually
* compatible in terms of its introspection type.
*
* @param pvStructure the PVStructure to test.
* @return (false,true) if the specified PVStructure (is not, is) a compatible NTAggregate.
*/
static bool is_a(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Is the Structure compatible with NTAggregate.
* This method introspects the fields to see if they are compatible.
* @param structure The Structure to test.
* @return (false,true) if (is not, is) an NTAggregate.
* Returns whether the specified Structure is compatible with NTAggregate.
* <p>
* Checks if the specified Structure is compatible with this version
* of NTAggregate through introspection interface.
*
* @param structure the Structure to test
* @return (false,true) if the specified Structure (is not, is) a compatible NTAggregate
*/
static bool isCompatible(
epics::pvData::StructureConstPtr const &structure);
/**
* Is the PVStructure compatible with NTAggregate.
* This method introspects the fields to see if they are compatible.
* @param pvStructure The PVStructure to test.
* @return (false,true) if (is not, is) an NTAggregate.
* Returns whether the specified PVStructure is compatible with NTAggregate.
* <p>
* Checks if the specified PVStructure is compatible with this version
* of NTAggregate through introspection interface.
*
* @param pvStructure the PVStructure to test
* @return (false,true) if the specified PVStructure (is not, is) a compatible NTAggregate
*/
static bool isCompatible(
epics::pvData::PVStructurePtr const &pvStructure);
/**
* Checks if the specified structure is a valid NTAggregate.
* Returns whether the wrapped PVStructure is valid with respect to this
* version of NTAggregate.
* <p>
* Unlike isCompatible(), isValid() may perform checks on the value data as
* well as the introspection data.
*
* Checks whether the wrapped structure is valid with respect to this
* version of NTAggregate
* @return (false,true) if (is not, is) a valid NTAggregate.
* @return (false,true) if wrapped PVStructure a valid NTAggregate
*/
bool isValid();
/**
* Create a NTAggregate builder instance.
* Creates an NTAggregate builder instance.
* @return builder instance.
*/
static NTAggregateBuilderPtr createBuilder();
@ -240,96 +268,96 @@ public:
~NTAggregate() {}
/**
* Attach a pvTimeStamp.
* @param pvTimeStamp The pvTimeStamp that will be attached.
* Does nothing if no timeStamp.
* Attaches a PVTimeStamp to the wrapped PVStructure.
* Does nothing if no timeStamp field.
* @param pvTimeStamp the PVTimeStamp that will be attached.
* @return true if the operation was successfull (i.e. this instance has a timeStamp field), otherwise false.
*/
bool attachTimeStamp(epics::pvData::PVTimeStamp &pvTimeStamp) const;
/**
* Attach an pvAlarm.
* @param pvAlarm The pvAlarm that will be attached.
* Does nothing if no alarm.
* @return true if the operation was successfull (i.e. this instance has a timeStamp field), otherwise false.
* Attaches a PVAlarm to the wrapped PVStructure.
* Does nothing if no alarm field.
* @param pvAlarm the PVAlarm that will be attached.
* @return true if the operation was successfull (i.e. this instance has an alarm field), otherwise false.
*/
bool attachAlarm(epics::pvData::PVAlarm &pvAlarm) const;
/**
* Get the pvStructure.
* @return PVStructurePtr.
* Returns the PVStructure wrapped by this instance.
* @return the PVStructure wrapped by this instance.
*/
epics::pvData::PVStructurePtr getPVStructure() const;
/**
* Get the descriptor field.
* @return The pvString or null if no function field.
* Returns the descriptor field.
* @return the descriptor field or null if no such field.
*/
epics::pvData::PVStringPtr getDescriptor() const;
/**
* Get the timeStamp.
* @return PVStructurePtr which may be null.
* Returns the timeStamp field.
* @return the timStamp field or null if no such field.
*/
epics::pvData::PVStructurePtr getTimeStamp() const;
/**
* Get the alarm.
* @return PVStructurePtr which may be null.
* Returns the alarm field.
* @return the alarm field or null if no such field.
*/
epics::pvData::PVStructurePtr getAlarm() const;
/**
* Get the value field.
* @return The PVDouble for the value.
* Returns the value field.
* @return the value field.
*/
epics::pvData::PVDoublePtr getValue() const;
/**
* Get the N field.
* @return The PVLong for the N field.
* Returns the N field.
* @return the N field.
*/
epics::pvData::PVLongPtr getN() const;
/**
* Get the dispersion field.
* @return The PVDouble for the dispersion which may be null
* Returns the dispersion field.
* @return the dispersion or null if no such field.
*/
epics::pvData::PVDoublePtr getDispersion() const;
/**
* Get the first field.
* @return The PVDouble for the first field which may be null
* Returns the first field.
* @return the first field or null if no such field.
*/
epics::pvData::PVDoublePtr getFirst() const;
/**
* Get the firstTimeStamp field.
* @return PVStructurePtr which may be null.
* Returns the firstTimeStamp field.
* @return the firstTimeStamp field or null if no such field.
*/
epics::pvData::PVStructurePtr getFirstTimeStamp() const;
/**
* Get the last field.
* @return The PVDouble for the last field which may be null
* Returns the last field.
* @return the last field or null if no such field.
*/
epics::pvData::PVDoublePtr getLast() const;
/**
* Get the lastTimeStamp field.
* @return PVStructurePtr which may be null.
* Returns the lastTimeStamp field.
* @return the lastTimeStamp field or null if no such field.
*/
epics::pvData::PVStructurePtr getLastTimeStamp() const;
/**
* Get the max field.
* @return The PVDouble for the max field which may be null
* Returns the max field.
* @return the max field or null if no such field.
*/
epics::pvData::PVDoublePtr getMax() const;
/**
* Get the min field.
* @return The PVDouble for the max field which may be null
* Returns the min field.
* @return the min field or null if no such field.
*/
epics::pvData::PVDoublePtr getMin() const;

View File

@ -108,15 +108,15 @@ NTAttributeBuilder::shared_pointer NTAttributeBuilder::add(string const & name,
const std::string NTAttribute::URI("epics:nt/NTAttribute:1.0");
NTAttribute::shared_pointer NTAttribute::wrap(PVStructurePtr const & structure)
NTAttribute::shared_pointer NTAttribute::wrap(PVStructurePtr const & pvStructure)
{
if(!isCompatible(structure)) return shared_pointer();
return wrapUnsafe(structure);
if(!isCompatible(pvStructure)) return shared_pointer();
return wrapUnsafe(pvStructure);
}
NTAttribute::shared_pointer NTAttribute::wrapUnsafe(PVStructurePtr const & structure)
NTAttribute::shared_pointer NTAttribute::wrapUnsafe(PVStructurePtr const & pvStructure)
{
return shared_pointer(new NTAttribute(structure));
return shared_pointer(new NTAttribute(pvStructure));
}
bool NTAttribute::is_a(StructureConstPtr const & structure)

View File

@ -42,53 +42,54 @@ namespace detail {
POINTER_DEFINITIONS(NTAttributeBuilder);
/**
* Add tags field to the NTAttribute.
* Adds tags field to the NTAttribute.
* @return this instance of <b>NTAttributeBuilder</b>.
*/
virtual shared_pointer addTags();
/**
* Add descriptor field to the NTAttribute.
* Adds descriptor field to the NTAttribute.
* @return this instance of <b>NTAttributeBuilder</b>.
*/
shared_pointer addDescriptor();
/**
* Add alarm structure to the NTAttribute.
* Adds alarm field to the NTAttribute.
* @return this instance of <b>NTAttributeBuilder</b>.
*/
shared_pointer addAlarm();
/**
* Add timeStamp structure to the NTAttribute.
* Adds timeStamp field to the NTAttribute.
* @return this instance of <b>NTAttributeBuilder</b>.
*/
shared_pointer addTimeStamp();
/**
* Create a <b>Structure</b> that represents NTAttribute.
* Creates a <b>Structure</b> that represents NTAttribute.
* This resets this instance state and allows new instance to be created.
* @return a new instance of a <b>Structure</b>.
*/
epics::pvData::StructureConstPtr createStructure();
/**
* Create a <b>PVStructure</b> that represents NTAttribute.
* Creates a <b>PVStructure</b> that represents NTAttribute.
* This resets this instance state and allows new instance to be created.
* @return a new instance of a <b>PVStructure</b>.
*/
epics::pvData::PVStructurePtr createPVStructure();
/**
* Create a <b>NTAttribute</b> instance.
* Creates a <b>NTAttribute</b> instance.
* This resets this instance state and allows new instance to be created.
* @return a new instance of a <b>NTAttribute</b>.
*/
NTAttributePtr create();
/**
* Add extra <b>Field</b> to the type.
* @param name name of the field.
* @param field a field to add.
* Adds extra <b>Field</b> to the type.
* @param name the name of the field.
* @param field the field to be added.
* @return this instance of <b>NTAttributeBuilder</b>.
*/
shared_pointer add(std::string const & name, epics::pvData::FieldConstPtr const & field);
@ -129,65 +130,92 @@ public:
static const std::string URI;
/**
* Wrap (aka dynamic cast, or wrap) the structure to NTAttribute.
* First isCompatible is called.
* This method will nullptr if the structure is is not compatible.
* This method will nullptr if the structure is nullptr.
* @param structure The structure to wrap-ed (dynamic cast, wrapped) to NTAttribute.
* @return NTAttribute instance on success, nullptr otherwise.
* Creates an NTAttribute wrapping the specified PVStructure if the latter is compatible.
* <p>
* Checks the supplied PVStructure is compatible with NTAttribute
* and if so returns an NTAttribute which wraps it.
* This method will return null if the structure is is not compatible
* or is null.
*
* @param pvStructure the PVStructure to be wrapped
* @return NTAttribute instance wrapping pvStructure on success, null otherwise
*/
static shared_pointer wrap(epics::pvData::PVStructurePtr const & structure);
static shared_pointer wrap(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Wrap (aka dynamic cast, or wrap) the structure to NTAttribute without checking for isCompatible
* @param structure The structure to wrap-ed (dynamic cast, wrapped) to NTAttribute.
* @return NTAttribute instance.
* Creates an NTAttribute wrapping the specified PVStructure, regardless of the latter's compatibility.
* <p>
* No checks are made as to whether the specified PVStructure
* is compatible with NTAttribute or is non-null.
*
* @param pvStructure the PVStructure to be wrapped
* @return NTAttribute instance wrapping pvStructure
*/
static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const & structure);
static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Is the structure an NTAttribute.
* @param structure The structure to test.
* @return (false,true) if (is not, is) an NTAttribute.
* Returns whether the specified Structure reports to be a compatible NTAttribute.
* <p>
* Checks if the specified Structure reports compatibility with this
* version of NTAttribute through its type ID, including checking version numbers.
* The return value does not depend on whether the structure is actually
* compatible in terms of its introspection type.
*
* @param structure the Structure to test
* @return (false,true) if the specified Structure (is not, is) a compatible NTAttribute
*/
static bool is_a(epics::pvData::StructureConstPtr const & structure);
/**
* Is the structure an NTAttribute.
* @param pvStructure The PVStructure to test.
* @return (false,true) if (is not, is) an NTAttribute.
* Returns whether the specified PVStructure reports to be a compatible NTAttribute.
* <p>
* Checks if the specified PVStructure reports compatibility with this
* version of NTAttribute through its type ID, including checking version numbers.
* The return value does not depend on whether the structure is actually
* compatible in terms of its introspection type.
*
* @param pvStructure the PVStructure to test
* @return (false,true) if the specified PVStructure (is not, is) a compatible NTAttribute
*/
static bool is_a(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Is the Structure compatible with NTAttribute.
* This method introspects the fields to see if they are compatible.
* @param structure The Structure to test.
* @return (false,true) if (is not, is) an NTAttribute.
* Returns whether the specified Structure is compatible with NTAttribute.
* <p>
* Checks if the specified Structure is compatible with this version
* of NTAttribute through the introspection interface.
*
* @param structure the Structure to test
* @return (false,true) if the specified Structure (is not, is) a compatible NTAttribute
*/
static bool isCompatible(
epics::pvData::StructureConstPtr const &structure);
/**
* Is the PVStructure compatible with NTAttribute.
* This method introspects the fields to see if they are compatible.
* @param pvStructure The PVStructure to test.
* @return (false,true) if (is not, is) an NTAttribute.
* Returns whether the specified PVStructure is compatible with NTAttribute.
* <p>
* Checks if the specified tructure is compatible with this version
* of NTAttribute through the introspection interface.
* @param pvStructure the PVStructure to test
* @return (false,true) if the specified PVStructure (is not, is) a compatible NTAttribute
*/
static bool isCompatible(
epics::pvData::PVStructurePtr const &pvStructure);
/**
* Checks if the specified structure is a valid NTAttribute.
* Returns whether the wrapped PVStructure is valid with respect to this
* version of NTAttribute.
* <p>
* Unlike isCompatible(), isValid() may perform checks on the value
* data as well as the introspection data.
*
* Checks whether the wrapped structure is valid with respect to this
* version of NTAttribute
* @return (false,true) if (is not, is) a valid NTAttribute.
* @return (false,true) if the wrapped PVStructure (is not, is) a valid NTAttribute
*/
bool isValid();
/**
* Create a NTAttribute builder instance.
* Creates an NTAttribute builder instance.
* @return builder instance.
*/
static NTAttributeBuilderPtr createBuilder();
@ -198,60 +226,60 @@ public:
~NTAttribute() {}
/**
* Attach a pvTimeStamp.
* @param pvTimeStamp The pvTimeStamp that will be attached.
* Does nothing if no timeStamp.
* Attaches a PVTimeStamp to the wrapped PVStructure.
* Does nothing if no timeStamp field.
* @param pvTimeStamp the PVTimeStamp that will be attached.
* @return true if the operation was successfull (i.e. this instance has a timeStamp field), otherwise false.
*/
bool attachTimeStamp(epics::pvData::PVTimeStamp &pvTimeStamp) const;
/**
* Attach an pvAlarm.
* @param pvAlarm The pvAlarm that will be attached.
* Does nothing if no alarm.
* @return true if the operation was successfull (i.e. this instance has a timeStamp field), otherwise false.
* Attaches a PVAlarm to the wrapped PVStructure.
* Does nothing if no alarm field.
* @param pvAlarm the PVAlarm that will be attached.
* @return true if the operation was successfull (i.e. this instance has an alarm field), otherwise false.
*/
bool attachAlarm(epics::pvData::PVAlarm &pvAlarm) const;
/**
* Get the pvStructure.
* @return PVStructurePtr.
* Returns the PVStructure wrapped by this instance.
* @return the PVStructure wrapped by this instance.
*/
epics::pvData::PVStructurePtr getPVStructure() const;
/**
* Get the descriptor field.
* @return The pvString or null if no function field.
* Returns the descriptor field.
* @return the descriptor field or null if no such field.
*/
epics::pvData::PVStringPtr getDescriptor() const;
/**
* Get the timeStamp.
* @return PVStructurePtr which may be null.
* Returns the timeStamp field.
* @return the timStamp field or null if no such field.
*/
epics::pvData::PVStructurePtr getTimeStamp() const;
/**
* Get the alarm.
* @return PVStructurePtr which may be null.
* Returns the alarm field.
* @return the alarm field or null if no such field.
*/
epics::pvData::PVStructurePtr getAlarm() const;
/**
* Get the name field.
* @return The PVString for the name.
* Returns the name field.
* @return the name field.
*/
epics::pvData::PVStringPtr getName() const;
/**
* Get the value field.
* @return The PVUnion for the values.
* Returns the value field.
* @return the value field.
*/
epics::pvData::PVUnionPtr getValue() const;
/**
* Get the tags field.
* @return The PVStringArray for the tags, which may be null.
* Returns the tags field.
* @return the tags field or null if no such field.
*/
epics::pvData::PVStringArrayPtr getTags() const;

View File

@ -100,15 +100,15 @@ NTContinuumBuilder::shared_pointer NTContinuumBuilder::add(string const & name,
const std::string NTContinuum::URI("epics:nt/NTContinuum:1.0");
NTContinuum::shared_pointer NTContinuum::wrap(PVStructurePtr const & structure)
NTContinuum::shared_pointer NTContinuum::wrap(PVStructurePtr const & pvStructure)
{
if(!isCompatible(structure)) return shared_pointer();
return wrapUnsafe(structure);
if(!isCompatible(pvStructure)) return shared_pointer();
return wrapUnsafe(pvStructure);
}
NTContinuum::shared_pointer NTContinuum::wrapUnsafe(PVStructurePtr const & structure)
NTContinuum::shared_pointer NTContinuum::wrapUnsafe(PVStructurePtr const & pvStructure)
{
return shared_pointer(new NTContinuum(structure));
return shared_pointer(new NTContinuum(pvStructure));
}
bool NTContinuum::is_a(StructureConstPtr const & structure)

View File

@ -43,47 +43,48 @@ namespace detail {
POINTER_DEFINITIONS(NTContinuumBuilder);
/**
* Add descriptor field to the NTContinuum.
* Adds descriptor field to the NTContinuum.
* @return this instance of <b>NTContinuumBuilder</b>.
*/
shared_pointer addDescriptor();
/**
* Add alarm structure to the NTContinuum.
* Adds alarm field to the NTContinuum.
* @return this instance of <b>NTContinuumBuilder</b>.
*/
shared_pointer addAlarm();
/**
* Add timeStamp structure to the NTContinuum.
* Adds timeStamp field to the NTContinuum.
* @return this instance of <b>NTContinuumBuilder</b>.
*/
shared_pointer addTimeStamp();
/**
* Create a <b>Structure</b> that represents NTContinuum.
* Creates a <b>Structure</b> that represents NTContinuum.
* This resets this instance state and allows new instance to be created.
* @return a new instance of <b>Structure</b>.
*/
epics::pvData::StructureConstPtr createStructure();
/**
* Create a <b>PVStructure</b> that represents NTContinuum.
* Creates a <b>PVStructure</b> that represents NTContinuum.
* This resets this instance state and allows new instance to be created.
* @return a new instance of <b>PVStructure</b>.
*/
epics::pvData::PVStructurePtr createPVStructure();
/**
* Create a <b>NTContinuum</b> instance.
* Creates a <b>NTContinuum</b> instance.
* This resets this instance state and allows new instance to be created.
* @return a new instance of <b>NTContinuum</b>.
*/
NTContinuumPtr create();
/**
* Add extra <b>Field</b> to the type.
* @param name name of the field.
* @param field a field to add.
* Adds extra <b>Field</b> to the type.
* @param name the name of the field.
* @param field the field to be added.
* @return this instance of <b>NTContinuumBuilder</b>.
*/
shared_pointer add(std::string const & name, epics::pvData::FieldConstPtr const & field);
@ -124,65 +125,92 @@ public:
static const std::string URI;
/**
* Wrap (aka dynamic cast, or wrap) the structure to NTContinuum.
* First isCompatible is called.
* This method will nullptr if the structure is is not compatible.
* This method will nullptr if the structure is nullptr.
* @param structure The structure to wrap-ed (dynamic cast, wrapped) to NTContinuum.
* @return NTContinuum instance on success, nullptr otherwise.
* Creates an NTContinuum wrapping the specified PVStructure if the latter is compatible.
* <p>
* Checks the supplied structure is compatible with NTContinuum
* and if so returns an NTContinuum which wraps it.
* This method will return null if the structure is is not compatible
* or is null.
*
* @param pvStructure the PVStructure to be wrapped
* @return NTContinuum instance wrapping pvStructure on success, null otherwise
*/
static shared_pointer wrap(epics::pvData::PVStructurePtr const & structure);
static shared_pointer wrap(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Wrap (aka dynamic cast, or wrap) the structure to NTContinuum without checking for isCompatible
* @param structure The structure to wrap-ed (dynamic cast, wrapped) to NTContinuum.
* @return NTContinuum instance.
* Creates an NTContinuum wrapping the specified PVStructure, regardless of the latter's compatibility.
* <p>
* No checks are made as to whether the specified PVStructure
* is compatible with NTContinuum or is non-null.
*
* @param pvStructure the PVStructure to be wrapped
* @return NTContinuum instance wrapping pvStructure.
*/
static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const & structure);
static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Is the structure an NTContinuum.
* @param structure The structure to test.
* @return (false,true) if (is not, is) an NTContinuum.
* Returns whether the specified Structure reports to be a compatible NTContinuum.
* <p>
* Checks if the specified Structure reports compatibility with this
* version of NTContinuum through its type ID, including checking version numbers.
* The return value does not depend on whether the structure is actually
* compatible in terms of its introspection type
*
* @param structure the Structure to test
* @return (false,true) if the specified Structure (is not, is) a compatible NTContinuum
*/
static bool is_a(epics::pvData::StructureConstPtr const & structure);
/**
* Is the structure an NTContinuum.
* @param pvStructure The PVStructure to test.
* @return (false,true) if (is not, is) an NTContinuum.
* Returns whether the specified PVStructure reports to be a compatible NTContinuum.
* <p>
* Checks if the specified Structure reports compatibility with this
* version of NTContinuum through its type ID, including checking version numbers.
* The return value does not depend on whether the structure is actually
* compatible in terms of its introspection type
*
* @param pvStructure The PVStructure to test
* @return (false,true) if the specified PVStructure (is not, is) a compatible NTContinuum
*/
static bool is_a(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Is the Structure compatible with NTContinuum.
* This method introspects the fields to see if they are compatible.
* @param structure The Structure to test.
* @return (false,true) if (is not, is) an NTContinuum.
* Returns whether the specified Structure is compatible with NTContinuum.
* <p>
* Checks if the specified Structure is compatible with this version
* of NTContinuum through the introspection interface.
*
* @param structure the Structure to test
* @return (false,true) if the specified Structure (is not, is) a compatible NTContinuum
*/
static bool isCompatible(
epics::pvData::StructureConstPtr const &structure);
/**
* Is the PVStructure compatible with NTContinuum.
* This method introspects the fields to see if they are compatible.
* @param pvStructure The PVStructure to test.
* @return (false,true) if (is not, is) an NTContinuum.
* Returns whether the specified PVStructure is compatible with NTContinuum.
* <p>
* Checks if the specified PVStructure is compatible with this version
* of NTContinuum through the introspection interface.
*
* @param pvStructure the PVStructure to test
* @return (false,true) if the specified PVStructure (is not, is) a compatible NTContinuum
*/
static bool isCompatible(
epics::pvData::PVStructurePtr const &pvStructure);
/**
* Checks if the specified structure is a valid NTContinuum.
* Returns whether the wrapped structure is valid with respect to this
* version of NTContinuum.
* <p>
* Unlike isCompatible(), isValid() may perform checks on the value
* data as well as the introspection data.
*
* Checks whether the wrapped structure is valid with respect to this
* version of NTContinuum
* @return (false,true) if (is not, is) a valid NTContinuum.
* @return (false,true) if the wrapped PVStructure (is not, is) a valid NTContinuum
*/
bool isValid();
/**
* Create a NTContinuum builder instance.
* Creates an NTContinuum builder instance.
* @return builder instance.
*/
static NTContinuumBuilderPtr createBuilder();
@ -193,60 +221,60 @@ public:
~NTContinuum() {}
/**
* Attach a pvTimeStamp.
* @param pvTimeStamp The pvTimeStamp that will be attached.
* Does nothing if no timeStamp.
* Attaches a PVTimeStamp to the wrapped PVStructure.
* Does nothing if no timeStamp field.
* @param pvTimeStamp the PVTimeStamp that will be attached.
* @return true if the operation was successfull (i.e. this instance has a timeStamp field), otherwise false.
*/
bool attachTimeStamp(epics::pvData::PVTimeStamp &pvTimeStamp) const;
/**
* Attach an pvAlarm.
* @param pvAlarm The pvAlarm that will be attached.
* Does nothing if no alarm.
* @return true if the operation was successfull (i.e. this instance has a timeStamp field), otherwise false.
* Attaches a PVAlarm to the wrapped PVStructure.
* Does nothing if no alarm field.
* @param pvAlarm the PVAlarm that will be attached.
* @return true if the operation was successfull (i.e. this instance has an alarm field), otherwise false.
*/
bool attachAlarm(epics::pvData::PVAlarm &pvAlarm) const;
/**
* Get the pvStructure.
* @return PVStructurePtr.
* Returns the PVStructure wrapped by this instance.
* @return the PVStructure wrapped by this instance.
*/
epics::pvData::PVStructurePtr getPVStructure() const;
/**
* Get the descriptor field.
* @return The pvString or null if no function field.
* Returns the descriptor field.
* @return the descriptor field or null if no such field.
*/
epics::pvData::PVStringPtr getDescriptor() const;
/**
* Get the timeStamp.
* @return PVStructurePtr which may be null.
* Returns the timeStamp field.
* @return the timStamp field or null if no such field.
*/
epics::pvData::PVStructurePtr getTimeStamp() const;
/**
* Get the alarm.
* @return PVStructurePtr which may be null.
* Returns the alarm field.
* @return the alarm field or null if no such field.
*/
epics::pvData::PVStructurePtr getAlarm() const;
/**
* Get the base field.
* @return The PVDoubleArray for the base.
* Returns the base field.
* @return the base field.
*/
epics::pvData::PVDoubleArrayPtr getBase() const;
/**
* Get the value field.
* @return The PVDoubleArray for the values.
* Returns the value field.
* @return the value field.
*/
epics::pvData::PVDoubleArrayPtr getValue() const;
/**
* Get the units field.
* @return The PVStringArray for the units.
* Returns the units field.
* @return the units field.
*/
epics::pvData::PVStringArrayPtr getUnits() const;

View File

@ -99,15 +99,15 @@ NTEnumBuilder::shared_pointer NTEnumBuilder::add(string const & name, FieldConst
const std::string NTEnum::URI("epics:nt/NTEnum:1.0");
NTEnum::shared_pointer NTEnum::wrap(PVStructurePtr const & structure)
NTEnum::shared_pointer NTEnum::wrap(PVStructurePtr const & pvStructure)
{
if(!isCompatible(structure)) return shared_pointer();
return wrapUnsafe(structure);
if(!isCompatible(pvStructure)) return shared_pointer();
return wrapUnsafe(pvStructure);
}
NTEnum::shared_pointer NTEnum::wrapUnsafe(PVStructurePtr const & structure)
NTEnum::shared_pointer NTEnum::wrapUnsafe(PVStructurePtr const & pvStructure)
{
return shared_pointer(new NTEnum(structure));
return shared_pointer(new NTEnum(pvStructure));
}
bool NTEnum::is_a(StructureConstPtr const & structure)

View File

@ -42,47 +42,48 @@ namespace detail {
POINTER_DEFINITIONS(NTEnumBuilder);
/**
* Add descriptor field to the NTEnum.
* Adds descriptor field to the NTEnum.
* @return this instance of <b>NTEnumBuilder</b>.
*/
shared_pointer addDescriptor();
/**
* Add alarm structure to the NTEnum.
* Adds alarm field to the NTEnum.
* @return this instance of <b>NTEnumBuilder</b>.
*/
shared_pointer addAlarm();
/**
* Add timeStamp structure to the NTEnum.
* Adds timeStamp field to the NTEnum.
* @return this instance of <b>NTEnumBuilder</b>.
*/
shared_pointer addTimeStamp();
/**
* Create a <b>Structure</b> that represents NTEnum.
* Creates a <b>Structure</b> that represents NTEnum.
* This resets this instance state and allows new instance to be created.
* @return a new instance of a <b>Structure</b>.
*/
epics::pvData::StructureConstPtr createStructure();
/**
* Create a <b>PVStructure</b> that represents NTEnum.
* Creates a <b>PVStructure</b> that represents NTEnum.
* This resets this instance state and allows new instance to be created.
* @return a new instance of a <b>PVStructure</b>.
*/
epics::pvData::PVStructurePtr createPVStructure();
/**
* Create a <b>NTEnum</b> instance.
* Creates a <b>NTEnum</b> instance.
* This resets this instance state and allows new instance to be created.
* @return a new instance of a <b>NTEnum</b>.
*/
NTEnumPtr create();
/**
* Add extra <b>Field</b> to the type.
* @param name name of the field.
* @param field a field to add.
* Adds extra <b>Field</b> to the type.
* @param name the name of the field.
* @param field the field to be added.
* @return this instance of <b>NTEnumBuilder</b>.
*/
shared_pointer add(std::string const & name, epics::pvData::FieldConstPtr const & field);
@ -122,65 +123,90 @@ public:
static const std::string URI;
/**
* Wrap (aka dynamic cast, or wrap) the structure to NTEnum.
* First isCompatible is called.
* This method will nullptr if the structure is is not compatible.
* This method will nullptr if the structure is nullptr.
* @param structure The structure to wrap-ed (dynamic cast, wrapped) to NTEnum.
* @return NTEnum instance on success, nullptr otherwise.
* Creates an NTEnum wrapping the specified PVStructure, regardless of the latter's compatibility.
* <p>
* No checks are made as to whether the specified PVStructure
* is compatible with NTEnum or is non-null.
*
* @param pvStructure the PVStructure to be wrapped
* @return NTEnum instance wrapping pvStructure
*/
static shared_pointer wrap(epics::pvData::PVStructurePtr const & structure);
static shared_pointer wrap(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Wrap (aka dynamic cast, or wrap) the structure to NTEnum without checking for isCompatible
* @param structure The structure to wrap-ed (dynamic cast, wrapped) to NTEnum.
* @return NTEnum instance.
* Creates an NTEnum wrapping the specified PVStructure, regardless of the latter's compatibility.
* <p>
* No checks are made as to whether the specified PVStructure
* is compatible with NTEnum or is non-null.
*
* @param pvStructure the PVStructure to be wrapped
* @return NTEnum instance wrapping pvStructure
*/
static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const & structure);
static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Is the structure an NTEnum.
* @param structure The structure to test.
* @return (false,true) if (is not, is) an NTEnum.
* Returns whether the specified Structure reports to be a compatible NTEnum.
* <p>
* Checks if the specified Structure reports compatibility with this
* version of NTEnum through its type ID, including checking version numbers.
* The return value does not depend on whether the structure is actually
* compatible in terms of its introspection type.
*
* @param structure the Structure to test.
* @return (false,true) if the specified Structure (is not, is) a compatible NTEnum.
*/
static bool is_a(epics::pvData::StructureConstPtr const & structure);
/**
* Is the structure an NTEnum.
* @param pvStructure The PVStructure to test.
* @return (false,true) if (is not, is) an NTEnum.
* Returns whether the specified PVStructure reports to be a compatible NTEnum.
* <p>
* Checks if the specified PVStructure reports compatibility with this
* version of NTEnum through its type ID, including checking version numbers.
* The return value does not depend on whether the structure is actually
* compatible in terms of its introspection type.
*
* @param pvStructure the PVStructure to test
* @return (false,true) if the specified PVStructure (is not, is) a compatible NTEnum
*/
static bool is_a(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Is the Structure compatible with NTEnum.
* This method introspects the fields to see if they are compatible.
* @param structure The Structure to test.
* @return (false,true) if (is not, is) an NTEnum.
* Returns whether the specified Structure is compatible with NTEnum.
* <p>
* Checks if the specified Structure is compatible with this version
* of NTEnum through the introspection interface.
*
* @param structure The Structure to test
* @return (false,true) if the specified Structure (is not, is) a compatible NTEnum
*/
static bool isCompatible(
epics::pvData::StructureConstPtr const &structure);
/**
* Is the PVStructure compatible with NTEnum.
* This method introspects the fields to see if they are compatible.
* @param pvStructure The PVStructure to test.
* @return (false,true) if (is not, is) an NTEnum.
* Returns whether the specified PVStructure is compatible with NTEnum.
* <p>
* Checks if the specified PVStructure is compatible with this version
* of NTEnum through the introspection interface.
*
* @param pvStructure the PVStructure to test
* @return (false,true) if the specified PVStructure (is not, is) a compatible NTEnum
*/
static bool isCompatible(
epics::pvData::PVStructurePtr const &pvStructure);
/**
* Checks if the specified structure is a valid NTEnum.
* Returns whether the wrapped PVStructure is valid with respect to this
* version of NTEnum.
* <p>
* Unlike isCompatible(), isValid() may perform checks on the value
* data as well as the introspection data.
*
* Checks whether the wrapped structure is valid with respect to this
* version of NTEnum
* @return (false,true) if (is not, is) a valid NTEnum.
* @return (false,true) if the wrapped PVStructure (is not, is) a valid NTEnum
*/
bool isValid();
/**
* Create a NTEnum builder instance.
* Creates an NTEnum builder instance.
* @return builder instance.
*/
static NTEnumBuilderPtr createBuilder();
@ -191,48 +217,48 @@ public:
~NTEnum() {}
/**
* Attach a pvTimeStamp.
* @param pvTimeStamp The pvTimeStamp that will be attached.
* Does nothing if no timeStamp.
* Attaches a PVTimeStamp to the wrapped PVStructure.
* Does nothing if no timeStamp field.
* @param pvTimeStamp the PVTimeStamp that will be attached.
* @return true if the operation was successfull (i.e. this instance has a timeStamp field), otherwise false.
*/
bool attachTimeStamp(epics::pvData::PVTimeStamp &pvTimeStamp) const;
/**
* Attach an pvAlarm.
* @param pvAlarm The pvAlarm that will be attached.
* Does nothing if no alarm.
* @return true if the operation was successfull (i.e. this instance has a timeStamp field), otherwise false.
* Attaches a PVAlarm to the wrapped PVStructure.
* Does nothing if no alarm field.
* @param pvAlarm the PVAlarm that will be attached.
* @return true if the operation was successfull (i.e. this instance has an alarm field), otherwise false.
*/
bool attachAlarm(epics::pvData::PVAlarm &pvAlarm) const;
/**
* Get the pvStructure.
* @return PVStructurePtr.
* Returns the PVStructure wrapped by this instance.
* @return the PVStructure wrapped by this instance.
*/
epics::pvData::PVStructurePtr getPVStructure() const;
/**
* Get the descriptor field.
* @return The pvString or null if no function field.
* Returns the descriptor field.
* @return the descriptor field or null if no such field.
*/
epics::pvData::PVStringPtr getDescriptor() const;
/**
* Get the timeStamp.
* @return PVStructurePtr which may be null.
* Returns the timeStamp field.
* @return the timStamp field or or null if no such field.
*/
epics::pvData::PVStructurePtr getTimeStamp() const;
/**
* Get the alarm.
* @return PVStructurePtr which may be null.
* Returns the alarm field.
* @return the alarm field or or null if no such field.
*/
epics::pvData::PVStructurePtr getAlarm() const;
/**
* Get the value field.
* @return The PVStructure for the values.
* @return the value field.
*/
epics::pvData::PVStructurePtr getValue() const;

View File

@ -47,7 +47,7 @@ class epicsShareClass NTField {
public:
POINTER_DEFINITIONS(NTField);
/**
* get the single implementation of this class.
* Gets the single implementation of this class.
* @return the implementation
*/
static NTFieldPtr get();
@ -55,84 +55,97 @@ public:
* destructor
*/
~NTField() {}
/**
* Is field an enumerated structure.
* @param field The field to test.
* @param field the field to test.
* @return (false,true) if field (is not,is) an enumerated structure.
*/
bool isEnumerated(epics::pvData::FieldConstPtr const & field);
/**
* Is field a timeStamp structure.
* @param field The field to test.
* @param field the field to test.
* @return (false,true) if field (is not,is) a timeStamp structure.
*/
bool isTimeStamp(epics::pvData::FieldConstPtr const & field);
/**
* Is field an alarm structure.
* @param field The field to test.
* @param field the field to test.
* @return (false,true) if field (is not,is) an alarm structure.
*/
bool isAlarm(epics::pvData::FieldConstPtr const & field);
/**
* Is field a display structure.
* @param field The field to test.
* @param field the field to test.
* @return (false,true) if field (is not,is) a display structure.
*/
bool isDisplay(epics::pvData::FieldConstPtr const & field);
/**
* Is field an alarmLimit structure.
* @param field The field to test.
* @param field the field to test.
* @return (false,true) if field (is not,is) an alarmLimit structure.
*/
bool isAlarmLimit(epics::pvData::FieldConstPtr const & field);
/**
* Is field a control structure.
* @param field The field to test.
* @param field the field to test.
* @return (false,true) if field (is not,is) a control structure.
*/
bool isControl(epics::pvData::FieldConstPtr const & field);
/**
* Create an enumerated structure.
* Creates an enumerated structure.
* @return an enumerated structure.
*/
epics::pvData::StructureConstPtr createEnumerated();
/**
* Create a timeStamp structure.
* Creates a timeStamp structure.
* @return a timeStamp structure.
*/
epics::pvData::StructureConstPtr createTimeStamp();
/**
* Create an alarm structure.
* Creates an alarm structure.
* @return an alarm structure.
*/
epics::pvData::StructureConstPtr createAlarm();
/**
* Create a display structure.
* Creates a display structure.
* @return a displayalarm structure.
*/
epics::pvData::StructureConstPtr createDisplay();
/**
* Create a control structure.
* Creates a control structure.
* @return a control structure.
*/
epics::pvData::StructureConstPtr createControl();
/**
* Create an array of enumerated structures.
* Creates an array of enumerated structures.
* @return an array of enumerated structures.
*/
epics::pvData::StructureArrayConstPtr createEnumeratedArray();
/**
* Create an array of timeStamp structures.
* Creates an array of timeStamp structures.
* @return an array of timeStamp structures.
*/
epics::pvData::StructureArrayConstPtr createTimeStampArray();
/**
* Create an array of alarm structures.
* Creates an array of alarm structures.
* @return an array of alarm structures.
*/
epics::pvData::StructureArrayConstPtr createAlarmArray();
private:
NTField();
epics::pvData::FieldCreatePtr fieldCreate;
@ -149,62 +162,72 @@ class epicsShareClass PVNTField {
public:
POINTER_DEFINITIONS(PVNTField);
/**
* get the single implementation of this class.
* Returns the single implementation of this class.
* @return the implementation
*/
static PVNTFieldPtr get();
/**
* destructor
*/
~PVNTField() {}
/**
* Create an enumerated PVStructure.
* Creates an enumerated PVStructure.
* @param choices The array of choices.
* @return an enumerated PVStructure..
* @return an enumerated PVStructure.
*/
epics::pvData::PVStructurePtr createEnumerated(
epics::pvData::StringArray const & choices);
/**
* Create a timeStamp PVStructure.
* @return a timeStamp PVStructure..
* Creates a timeStamp PVStructure.
* @return a timeStamp PVStructure.
*/
epics::pvData::PVStructurePtr createTimeStamp();
/**
* Create an alarm PVStructure.
* @return an alarm PVStructure..
* Creates an alarm PVStructure.
* @return an alarm PVStructure.
*/
epics::pvData::PVStructurePtr createAlarm();
/**
* Create a display PVStructure.
* @return a display PVStructure..
* Creates a display PVStructure.
* @return a display PVStructure.
*/
epics::pvData::PVStructurePtr createDisplay();
/**
* Create an alarmLimit PVStructure.
* @return an alarmLimit PVStructure..
* Creates an alarmLimit PVStructure.
* @return an alarmLimit PVStructure.
*/
epics::pvData::PVStructurePtr createAlarmLimit();
/**
* Create a control PVStructure.
* @return a control PVStructure..
* Creates a control PVStructure.
* @return a control PVStructure.
*/
epics::pvData::PVStructurePtr createControl();
/**
* Create an enumerated PVStructureArray.
* @return an enumerated PVStructureArray..
* Creates an enumerated PVStructureArray.
* @return an enumerated PVStructureArray.
*/
epics::pvData::PVStructureArrayPtr createEnumeratedArray();
/**
* Create a timeStamp PVStructureArray.
* @return a timeStamp PVStructureArray
* Creates a timeStamp PVStructureArray.
* @return a timeStamp PVStructureArray.
*/
epics::pvData::PVStructureArrayPtr createTimeStampArray();
/**
* Create an alarm PVStructureArray.
* @return an alarm PVStructureArray..
* Creates an alarm PVStructureArray.
* @return an alarm PVStructureArray.
*/
epics::pvData::PVStructureArrayPtr createAlarmArray();
private:
PVNTField();
epics::pvData::PVDataCreatePtr pvDataCreate;

View File

@ -113,15 +113,15 @@ NTHistogramBuilder::shared_pointer NTHistogramBuilder::add(string const & name,
const std::string NTHistogram::URI("epics:nt/NTHistogram:1.0");
NTHistogram::shared_pointer NTHistogram::wrap(PVStructurePtr const & structure)
NTHistogram::shared_pointer NTHistogram::wrap(PVStructurePtr const & pvStructure)
{
if(!isCompatible(structure)) return shared_pointer();
return wrapUnsafe(structure);
if(!isCompatible(pvStructure)) return shared_pointer();
return wrapUnsafe(pvStructure);
}
NTHistogram::shared_pointer NTHistogram::wrapUnsafe(PVStructurePtr const & structure)
NTHistogram::shared_pointer NTHistogram::wrapUnsafe(PVStructurePtr const & pvStructure)
{
return shared_pointer(new NTHistogram(structure));
return shared_pointer(new NTHistogram(pvStructure));
}
bool NTHistogram::is_a(StructureConstPtr const & structure)

View File

@ -43,54 +43,55 @@ namespace detail {
POINTER_DEFINITIONS(NTHistogramBuilder);
/**
* Set a scalar type of value field array.
* @param scalarType the value type.
* Sets the scalar type of the value field array.
* @param scalarType the scalar type of the value field array.
* @return this instance of <b>NTHistogramBuilder</b>.
*/
shared_pointer value(epics::pvData::ScalarType scalarType);
/**
* Add descriptor field to the NTHistogram.
* Adds descriptor field to the NTHistogram.
* @return this instance of <b>NTHistogramBuilder</b>.
*/
shared_pointer addDescriptor();
/**
* Add alarm structure to the NTHistogram.
* Adds alarm field to the NTHistogram.
* @return this instance of <b>NTHistogramBuilder</b>.
*/
shared_pointer addAlarm();
/**
* Add timeStamp structure to the NTHistogram.
* Adds timeStamp field to the NTHistogram.
* @return this instance of <b>NTHistogramBuilder</b>.
*/
shared_pointer addTimeStamp();
/**
* Create a <b>Structure</b> that represents NTHistogram.
* Creates a <b>Structure</b> that represents NTHistogram.
* This resets this instance state and allows new instance to be created.
* @return a new instance of <b>Structure</b>.
*/
epics::pvData::StructureConstPtr createStructure();
/**
* Create a <b>PVStructure</b> that represents NTHistogram.
* Creates a <b>PVStructure</b> that represents NTHistogram.
* This resets this instance state and allows new instance to be created.
* @return a new instance of <b>PVStructure</b>.
*/
epics::pvData::PVStructurePtr createPVStructure();
/**
* Create a <b>NTHistogram</b> instance.
* Creates a <b>NTHistogram</b> instance.
* This resets this instance state and allows new instance to be created.
* @return a new instance of <b>NTHistogram</b>.
*/
NTHistogramPtr create();
/**
* Add extra <b>Field</b> to the type.
* @param name name of the field.
* @param field a field to add.
* Adds extra <b>Field</b> to the type.
* @param name the name of the field.
* @param field the field to be added.
* @return this instance of <b>NTHistogramBuilder</b>.
*/
shared_pointer add(std::string const & name, epics::pvData::FieldConstPtr const & field);
@ -134,65 +135,92 @@ public:
static const std::string URI;
/**
* Wrap (aka dynamic cast, or wrap) the structure to NTHistogram.
* First isCompatible is called.
* This method will nullptr if the structure is is not compatible.
* This method will nullptr if the structure is nullptr.
* @param structure The structure to wrap-ed (dynamic cast, wrapped) to NTHistogram.
* @return NTHistogram instance on success, nullptr otherwise.
* Creates an NTHistogram wrapping the specified PVStructure if the latter is compatible.
* <p>
* Checks the supplied PVStructure is compatible with NTHistogram
* and if so returns an NTHistogram which wraps it.
* This method will return null if the structure is is not compatible
* or is null.
*
* @param pvStructure the PVStructure to be wrapped
* @return NTHistogram instance wrapping pvStructure on success, null otherwise
*/
static shared_pointer wrap(epics::pvData::PVStructurePtr const & structure);
static shared_pointer wrap(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Wrap (aka dynamic cast, or wrap) the structure to NTHistogram without checking for isCompatible
* @param structure The structure to wrap-ed (dynamic cast, wrapped) to NTHistogram.
* @return NTHistogram instance.
* Creates an NTHistogram wrapping the specified PVStructure, regardless of the latter's compatibility.
* <p>
* No checks are made as to whether the specified PVStructure
* is compatible with NTHistogram or is non-null.
*
* @param pvStructure the PVStructure to be wrapped.
* @return NTHistogram instance wrapping pvStructure.
*/
static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const & structure);
static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Is the structure an NTHistogram.
* @param structure The structure to test.
* @return (false,true) if (is not, is) an NTHistogram.
* Returns whether the specified Structure reports to be a compatible NTHistogram.
* <p>
* Checks whether the specified Structure reports compatibility with this
* version of NTHistogram through its type ID, including checking version numbers.
* The return value does not depend on whether the structure is actually
* compatible in terms of its introspection type.
*
* @param structure the Structure to test.
* @return (false,true) if the specified Structure (is not, is) a compatible NTHistogram
*/
static bool is_a(epics::pvData::StructureConstPtr const & structure);
/**
* Is the structure an NTHistogram.
* @param pvStructure The PVStructure to test.
* @return (false,true) if (is not, is) an NTHistogram.
* Returns whether the specified PVStructure reports to be a compatible NTHistogram.
* <p>
* Checks whether the specified PVStructure reports compatibility with this
* version of NTHistogram through its type ID, including checking version numbers.
* The return value does not depend on whether the structure is actually
* compatible in terms of its introspection type.
*
* @param pvStructure the PVStructure to test
* @return (false,true) if the specified PVStructure (is not, is) a compatible NTHistogram
*/
static bool is_a(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Is the Structure compatible with NTHistogram.
* This method introspects the fields to see if they are compatible.
* @param structure The Structure to test.
* @return (false,true) if (is not, is) an NTHistogram.
* Returns whether the specified Structure is compatible with NTHistogram.
* <p>
* Checks whether the specified Structure is compatible with this version
* of NTHistogram through the introspection interface.
*
* @param structure the Structure to test
* @return (false,true) if the specified Structure (is not, is) a compatible NTHistogram
*/
static bool isCompatible(
epics::pvData::StructureConstPtr const &structure);
/**
* Is the PVStructure compatible with NTHistogram.
* This method introspects the fields to see if they are compatible.
* @param pvStructure The PVStructure to test.
* @return (false,true) if (is not, is) an NTHistogram.
* Returns whether the specified PVStructure is compatible with NTHistogram.
* <p>
* Checks whether the specified PVStructure is compatible with this version
* of NTHistogram through the introspection interface.
*
* @param pvStructure the PVStructure to test
* @return (false,true) if the specified PVStructure (is not, is) a compatible NTHistogram
*/
static bool isCompatible(
epics::pvData::PVStructurePtr const &pvStructure);
/**
* Checks if the specified structure is a valid NTHistogram.
* Returns whether the wrapped structure is valid with respect to this
* version of NTHistogram.
* <p>
* Unlike isCompatible(), isValid() may perform checks on the value
* data as well as the introspection data.
*
* Checks whether the wrapped structure is valid with respect to this
* version of NTHistogram
* @return (false,true) if (is not, is) a valid NTHistogram.
* @return (false,true) if the wrapped PVStructure (is not, is) a valid NTHistogram
*/
bool isValid();
/**
* Create a NTHistogram builder instance.
* Creates an NTHistogram builder instance.
* @return builder instance.
*/
static NTHistogramBuilderPtr createBuilder();
@ -203,60 +231,62 @@ public:
~NTHistogram() {}
/**
* Attach a pvTimeStamp.
* @param pvTimeStamp The pvTimeStamp that will be attached.
* Does nothing if no timeStamp.
* Attaches a PVTimeStamp to the wrapped PVStructure.
* Does nothing if no timeStamp field.
* @param pvTimeStamp the PVTimeStamp that will be attached.
* @return true if the operation was successfull (i.e. this instance has a timeStamp field), otherwise false.
*/
bool attachTimeStamp(epics::pvData::PVTimeStamp &pvTimeStamp) const;
/**
* Attach an pvAlarm.
* @param pvAlarm The pvAlarm that will be attached.
* Does nothing if no alarm.
* @return true if the operation was successfull (i.e. this instance has a timeStamp field), otherwise false.
* Attaches a PVAlarm to the wrapped PVStructure.
* Does nothing if no alarm field.
* @param pvAlarm the PVAlarm that will be attached.
* @return true if the operation was successfull (i.e. this instance has an alarm field), otherwise false.
*/
bool attachAlarm(epics::pvData::PVAlarm &pvAlarm) const;
/**
* Get the pvStructure.
* @return PVStructurePtr.
* Get the PVStructure wrapped by this instance.
* @return the PVStructure wrapped by this instance.
*/
epics::pvData::PVStructurePtr getPVStructure() const;
/**
* Get the descriptor field.
* @return The pvString or null if no function field.
* Returns the descriptor field.
* @return the descriptor field or null if no such field.
*/
epics::pvData::PVStringPtr getDescriptor() const;
/**
* Get the timeStamp.
* @return PVStructurePtr which may be null.
* Returns the timeStamp field.
* @return the timStamp field or null if no such field.
*/
epics::pvData::PVStructurePtr getTimeStamp() const;
/**
* Get the alarm.
* @return PVStructurePtr which may be null.
* Returns the alarm field.
* @return the alarm field or null if no such field.
*/
epics::pvData::PVStructurePtr getAlarm() const;
/**
* Get the base field.
* @return The PVDoubleArray for the base.
* Returns the ranges field.
* @return the ranges field.
*/
epics::pvData::PVDoubleArrayPtr getRanges() const;
/**
* Get the value field.
* @return The PVScalarArray for the values.
* Returns the value field.
* @return the value field.
*/
epics::pvData::PVScalarArrayPtr getValue() const;
/**
* Get the value field of a specified type (e.g. PVIntArray).
* @return The <PVT> field for the values.
* Returns the value field of a specified type (e.g. PVIntArray).
* @tparam PVT the expected type of the value field which should be
* be PVShortArray, PVIntArray pr PVLongArray.
* @return the value field or null if it is not of the expected type.
*/
template<typename PVT>
std::tr1::shared_ptr<PVT> getValue() const

View File

@ -13,104 +13,110 @@ namespace epics {
namespace nt {
/**
* Utility class for parsing an ID following the NT type ID conventions
* @brief Utility class for parsing a type ID that follows the NT type ID conventions
*
* An NT type ID will be of the from epics:nt/<type-name>:<Major>.<Minor>,
* e.g. epics:nt/NTNDArray:1.2
* An NT type ID will be of the from
@code
epics:nt/<type-name>:<Major>.<Minor>
@endcode
* e.g.
@code
epics:nt/NTNDArray:1.2
@endcode
* @author dgh
*/
class NTID
{
public:
/**
* Creates an NTID from the specified type ID
* Creates an NTID from the specified type ID.
*
* @param id The the id to be parsed.
* @param id the the ID to be parsed.
* @return NTNDArray instance on success, null otherwise.
*/
NTID(const std::string &id);
/**
* Get the full name of the id, i.e. the original ID
*
* For example above returns "epics:nt/NTNDArray:1.2"
* Returns the full name of the id, i.e. the original ID
* <p>
* For example above returns "epics:nt/NTNDArray:1.2".
* @return the full name
*/
std::string getFullName();
/**
* Get the fully qualified name including namespaces, but excluding version numbers
*
* Returns the fully qualified name including namespaces, but excluding version numbers.
* <p>
* For example above return "epics:nt/NTNDArray"
* @return the fully qualified name
*/
std::string getQualifiedName();
/**
* Get the namespace
*
* For example above return "epics:nt"
* Returns the namespace
* <p>
* For example above return "epics:nt".
* @return the namespace
*/
std::string getNamespace();
/**
* Get the unqualified name, without namespace or version
*
* For example above return "NTNDArray"
* Returns the unqualified name, without namespace or version.
* <p>
* For example above return "NTNDArray".
* @return the unqualified name
*/
std::string getName();
/**
* Get the unqualified name, without namespace or version
*
* For example above return "NTNDArray"
* @return the unqualified name
* Returns the version as a string.
* <p>
* For example above return "NTNDArray".
* @return the the version string
*/
std::string getVersion();
/**
* Get the Major version as a string
*
* For example above return "1"
* Returns the Major version as a string.
* <p>
* For example above return "1".
* @return the Major string
*/
std::string getMajorVersionString();
/**
* Does the ID contain a major version and is it a number
*
* Does the ID contain a major version and is it a number.
* <p>
* @return true if it contains a major version number
*/
bool hasMajorVersion();
/**
* Get the Major version as an integer
*
* For example above return 1
* Returns the Major version as an integer.
* <p>
* For example above return 1.
* @return the Major string
*/
int getMajorVersion();
/**
* Get the Major version as a string
*
* For example above return "1"
* Returns the Major version as a string.
* <p>
* For example above return "1".
* @return the Major string
*/
std::string getMinorVersionString();
/**
* Does the ID contain a minor version and is it a number
*
* Does the ID contain a minor version and is it a number.
* <p>
* @return true if it contains a minor version number
*/
bool hasMinorVersion();
/**
* Get the Minor version as an integer
*
* For example above return 1
* Returns the Minor version as an integer.
* <p>
* For example above return 1.
* @return the Minor string
*/
int getMinorVersion();

View File

@ -117,15 +117,15 @@ NTMatrixBuilder::shared_pointer NTMatrixBuilder::add(string const & name, FieldC
const std::string NTMatrix::URI("epics:nt/NTMatrix:1.0");
NTMatrix::shared_pointer NTMatrix::wrap(PVStructurePtr const & structure)
NTMatrix::shared_pointer NTMatrix::wrap(PVStructurePtr const & pvStructure)
{
if(!isCompatible(structure)) return shared_pointer();
return wrapUnsafe(structure);
if(!isCompatible(pvStructure)) return shared_pointer();
return wrapUnsafe(pvStructure);
}
NTMatrix::shared_pointer NTMatrix::wrapUnsafe(PVStructurePtr const & structure)
NTMatrix::shared_pointer NTMatrix::wrapUnsafe(PVStructurePtr const & pvStructure)
{
return shared_pointer(new NTMatrix(structure));
return shared_pointer(new NTMatrix(pvStructure));
}
bool NTMatrix::is_a(StructureConstPtr const & structure)

View File

@ -45,59 +45,60 @@ namespace detail {
POINTER_DEFINITIONS(NTMatrixBuilder);
/**
* Add dimensionfield to the NTMatrix.
* Adds dimension field to the NTMatrix.
* @return this instance of <b>NTMatrixBuilder</b>.
*/
shared_pointer addDim();
/**
* Add descriptor field to the NTMatrix.
* Adds descriptor field to the NTMatrix.
* @return this instance of <b>NTMatrixBuilder</b>.
*/
shared_pointer addDescriptor();
/**
* Add alarm structure to the NTMatrix.
* Adds alarm field to the NTMatrix.
* @return this instance of <b>NTMatrixBuilder</b>.
*/
shared_pointer addAlarm();
/**
* Add timeStamp structure to the NTMatrix.
* Adds timeStamp field to the NTMatrix.
* @return this instance of <b>NTMatrixBuilder</b>.
*/
shared_pointer addTimeStamp();
/**
* Add display structure to the NTMatrix.
* Adds display field to the NTMatrix.
* @return this instance of <b>NTMatrixBuilder</b>.
*/
shared_pointer addDisplay();
/**
* Create a <b>Structure</b> that represents NTMatrix.
* Creates a <b>Structure</b> that represents NTMatrix.
* This resets this instance state and allows new instance to be created.
* @return a new instance of <b>Structure</b>.
*/
epics::pvData::StructureConstPtr createStructure();
/**
* Create a <b>PVStructure</b> that represents NTMatrix.
* Creates a <b>PVStructure</b> that represents NTMatrix.
* This resets this instance state and allows new instance to be created.
* @return a new instance of <b>PVStructure</b>.
*/
epics::pvData::PVStructurePtr createPVStructure();
/**
* Create a <b>NTMatrix</b> instance.
* Creates a <b>NTMatrix</b> instance.
* This resets this instance state and allows new instance to be created.
* @return a new instance of <b>NTMatrix</b>.
*/
NTMatrixPtr create();
/**
* Add extra <b>Field</b> to the type.
* @param name name of the field.
* @param field a field to add.
* Adds extra <b>Field</b> to the type.
* @param name the name of the field.
* @param field the field to be added.
* @return this instance of <b>NTMatrixBuilder</b>.
*/
shared_pointer add(std::string const & name, epics::pvData::FieldConstPtr const & field);
@ -139,65 +140,92 @@ public:
static const std::string URI;
/**
* Wrap (aka dynamic cast, or wrap) the structure to NTMatrix.
* First isCompatible is called.
* This method will nullptr if the structure is is not compatible.
* This method will nullptr if the structure is nullptr.
* @param structure The structure to wrap-ed (dynamic cast, wrapped) to NTMatrix.
* @return NTMatrix instance on success, nullptr otherwise.
* Creates an NTMatrix wrapping the specified PVStructure if the latter is compatible.
* <p>
* Checks the supplied PVStructure is compatible with NTMatrix
* and if so returns an NTMatrix which wraps it.
* This method will return null if the structure is is not compatible
* or is null.
*
* @param pvStructure the PVStructure to be wrapped
* @return NTMatrix instance wrapping pvStructure on success, null otherwise
*/
static shared_pointer wrap(epics::pvData::PVStructurePtr const & structure);
static shared_pointer wrap(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Wrap (aka dynamic cast, or wrap) the structure to NTMatrix without checking for isCompatible
* @param structure The structure to wrap-ed (dynamic cast, wrapped) to NTMatrix.
* @return NTMatrix instance.
* Creates an NTMatrix wrapping the specified PVStructure, regardless of the latter's compatibility.
* <p>
* No checks are made as to whether the specified PVStructure
* is compatible with NTMatrix or is non-null.
*
* @param pvStructure the PVStructure to be wrapped
* @return NTMatrix instance wrapping pvStructure
*/
static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const & structure);
static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Is the structure an NTMatrix.
* @param structure The structure to test.
* @return (false,true) if (is not, is) an NTMatrix.
* Returns whether the specified Structure reports to be a compatible NTMatrix.
* <p>
* Checks if the specified Structure reports compatibility with this
* version of NTMatrix through its type ID, including checking version numbers.
* The return value does not depend on whether the structure is actually
* compatible in terms of its introspection type.
*
* @param structure the structure to test
* @return (false,true) if the specified Structure (is not, is) a compatible NTMatrix
*/
static bool is_a(epics::pvData::StructureConstPtr const & structure);
/**
* Is the structure an NTMatrix.
* @param pvStructure The PVStructure to test.
* @return (false,true) if (is not, is) an NTMatrix.
* Returns whether the specified PVStructure reports to be a compatible NTMatrix.
* <p>
* Checks if the specified PVStructure reports compatibility with this
* version of NTMatrix through its type ID, including checking version numbers.
* The return value does not depend on whether the structure is actually
* compatible in terms of its introspection type.
*
* @param pvStructure the PVStructure to test
* @return (false,true) if the specified PVStructure (is not, is) a compatible NTMatrix
*/
static bool is_a(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Is the Structure compatible with NTMatrix.
* This method introspects the fields to see if they are compatible.
* @param structure The Structure to test.
* @return (false,true) if (is not, is) an NTMatrix.
* Returns whether the specified Structure is compatible with NTMatrix.
* <p>
* Checks if the specified Structure is compatible with this version
* of NTMatrix through the introspection interface.
*
* @param structure the Structure to test
* @return (false,true) if the specified Structure (is not, is) a compatible NTMatrix
*/
static bool isCompatible(
epics::pvData::StructureConstPtr const &structure);
/**
* Is the PVStructure compatible with NTMatrix.
* This method introspects the fields to see if they are compatible.
* @param pvStructure The PVStructure to test.
* @return (false,true) if (is not, is) an NTMatrix.
* Returns whether the specified PVStructure is compatible with NTMatrix.
* <p>
* Checks if the specified PVStructure is compatible with this version
* of NTMatrix through the introspection interface.
*
* @param pvStructure the PVStructure to test
* @return (false,true) if the specified PVStructure (is not, is) a compatible NTMatrix
*/
static bool isCompatible(
epics::pvData::PVStructurePtr const &pvStructure);
/**
* Checks if the specified structure is a valid NTMatrix.
* Returns whether the wrapped PVStructure is valid with respect to this
* version of NTMatrix.
* <p>
* Unlike isCompatible(), isValid() may perform checks on the value
* data as well as the introspection data.
*
* Checks whether the wrapped structure is valid with respect to this
* version of NTMatrix
* @return (false,true) if (is not, is) a valid NTMatrix.
* @return (false,true) if the wrapped PVStructure (is not, is) a valid NTMatrix
*/
bool isValid();
/**
* Create a NTMatrix builder instance.
* Creates an NTMatrix builder instance.
* @return builder instance.
*/
static NTMatrixBuilderPtr createBuilder();
@ -208,68 +236,68 @@ public:
~NTMatrix() {}
/**
* Attach a pvTimeStamp.
* @param pvTimeStamp The pvTimeStamp that will be attached.
* Does nothing if no timeStamp.
* Attaches a PVTimeStamp to the wrapped PVStructure.
* Does nothing if no timeStamp field.
* @param pvTimeStamp the PVTimeStamp that will be attached.
* @return true if the operation was successfull (i.e. this instance has a timeStamp field), otherwise false.
*/
bool attachTimeStamp(epics::pvData::PVTimeStamp &pvTimeStamp) const;
/**
* Attach an pvAlarm.
* @param pvAlarm The pvAlarm that will be attached.
* Does nothing if no alarm.
* @return true if the operation was successfull (i.e. this instance has a timeStamp field), otherwise false.
* Attaches a PVAlarm to the wrapped PVStructure.
* Does nothing if no alarm field.
* @param pvAlarm the PVAlarm that will be attached.
* @return true if the operation was successfull (i.e. this instance has an alarm field), otherwise false.
*/
bool attachAlarm(epics::pvData::PVAlarm &pvAlarm) const;
/**
* Attach an pvDisplay.
* @param pvDisplay The pvDisplay that will be attached.
* Attaches a PVDisplay to the wrapped PVStructure.
* Does nothing if no display.
* @return true if the operation was successfull (i.e. this instance has a display field), otherwise false.
* @param pvDisplay the PVDisplay that will be attached.
* @return true if the operation was successfull (i.e. this instance has a display field), otherwise false.
*/
bool attachDisplay(epics::pvData::PVDisplay &pvDisplay) const;
/**
* Get the pvStructure.
* @return PVStructurePtr.
* Get the PVStructure wrapped by this instance.
* @return the PVStructure wrapped by this instance.
*/
epics::pvData::PVStructurePtr getPVStructure() const;
/**
* Get the descriptor field.
* @return The pvString or null if no function field.
* Returns the descriptor field.
* @return the descriptor field or null if no such field.
*/
epics::pvData::PVStringPtr getDescriptor() const;
/**
* Get the timeStamp.
* @return PVStructurePtr which may be null.
* Returns the timeStamp field.
* @return the timStamp field or null if no such field.
*/
epics::pvData::PVStructurePtr getTimeStamp() const;
/**
* Get the alarm.
* @return PVStructurePtr which may be null.
* Returns the alarm field.
* @return the alarm field or null if no such field.
*/
epics::pvData::PVStructurePtr getAlarm() const;
/**
* Get the display.
* @return PVStructurePtr which may be null.
* Returns the display field.
* @return the display field or null if no such field.
*/
epics::pvData::PVStructurePtr getDisplay() const;
/**
* Get the value field.
* @return The PVDoubleArray for the values.
* Returns the value field.
* @return the value field.
*/
epics::pvData::PVDoubleArrayPtr getValue() const;
/**
* Get the dim field.
* @return The PVIntArray for the dim which may be null.
* Returns the dim field.
* @return the dim field or or null if no such field.
*/
epics::pvData::PVIntArrayPtr getDim() const;

View File

@ -210,15 +210,15 @@ NTMultiChannelBuilder::shared_pointer NTMultiChannelBuilder::add(string const &
const std::string NTMultiChannel::URI("epics:nt/NTMultiChannel:1.0");
NTMultiChannel::shared_pointer NTMultiChannel::wrap(PVStructurePtr const & structure)
NTMultiChannel::shared_pointer NTMultiChannel::wrap(PVStructurePtr const & pvStructure)
{
if(!isCompatible(structure)) return shared_pointer();
return wrapUnsafe(structure);
if(!isCompatible(pvStructure)) return shared_pointer();
return wrapUnsafe(pvStructure);
}
NTMultiChannel::shared_pointer NTMultiChannel::wrapUnsafe(PVStructurePtr const & structure)
NTMultiChannel::shared_pointer NTMultiChannel::wrapUnsafe(PVStructurePtr const & pvStructure)
{
return shared_pointer(new NTMultiChannel(structure));
return shared_pointer(new NTMultiChannel(pvStructure));
}
bool NTMultiChannel::is_a(StructureConstPtr const &structure)

View File

@ -54,81 +54,96 @@ namespace detail {
* @return this instance of <b>NTMultiChannelBuilder</b>.
*/
shared_pointer value(epics::pvData::UnionConstPtr valuePtr);
/**
* Add descriptor field to the NTMultiChannel.
* Adds descriptor field to the NTMultiChannel.
* @return this instance of <b>NTMultiChannelBuilder</b>.
*/
shared_pointer addDescriptor();
/**
* Add alarm structure to the NTMultiChannel.
* Adds alarm field to the NTMultiChannel.
* @return this instance of <b>NTMultiChannelBuilder</b>.
*/
shared_pointer addAlarm();
/**
* Add timeStamp structure to the NTMultiChannel.
* Adds timeStamp field to the NTMultiChannel.
* @return this instance of <b>NTMultiChannelBuilder</b>.
*/
shared_pointer addTimeStamp();
/**
* Add severity array to the NTMultiChannel.
* Adds severity array to the NTMultiChannel.
* @return this instance of <b>NTMultiChannelBuilder</b>.
*/
shared_pointer addSeverity();
/**
* Add status array to the NTMultiChannel.
* Adds status array to the NTMultiChannel.
* @return this instance of <b>NTMultiChannelBuilder</b>.
*/
shared_pointer addStatus();
/**
* Add message array to the NTMultiChannel.
* Adds message array to the NTMultiChannel.
* @return this instance of <b>NTMultiChannelBuilder</b>.
*/
shared_pointer addMessage();
/**
* Add secondsPastEpoch array to the NTMultiChannel.
* Adds secondsPastEpoch array to the NTMultiChannel.
* @return this instance of <b>NTMultiChannelBuilder</b>.
*/
shared_pointer addSecondsPastEpoch();
/**
* Add nanoseconds array to the NTMultiChannel.
* Adds nanoseconds array to the NTMultiChannel.
* @return this instance of <b>NTMultiChannelBuilder</b>.
*/
shared_pointer addNanoseconds();
/**
* Add userTag array to the NTMultiChannel.
* Adds userTag array to the NTMultiChannel.
* @return this instance of <b>NTMultiChannelBuilder</b>.
*/
shared_pointer addUserTag();
/**
* Add isConnected array to the NTMultiChannel.
* Adds isConnected array to the NTMultiChannel.
* @return this instance of <b>NTMultiChannelBuilder</b>.
*/
shared_pointer addIsConnected();
/**
* Create a <b>Structure</b> that represents NTMultiChannel.
* Creates a <b>Structure</b> that represents NTMultiChannel.
* This resets this instance state and allows new instance to be created.
* @return a new instance of a <b>Structure</b>.
*/
epics::pvData::StructureConstPtr createStructure();
/**
* Create a <b>PVStructure</b> that represents NTMultiChannel.
* This resets this instance state and allows new {@code instance to be created.}
* Creates a <b>PVStructure</b> that represents NTMultiChannel.
* This resets this instance state and allows new instance to be created.
* @return a new instance of a <b>PVStructure</b>
*/
epics::pvData::PVStructurePtr createPVStructure();
/**
* Create a <b>NTMultiChannel</b> instance.
* This resets this instance state and allows new {@code instance to be created.}
* Creates a <b>NTMultiChannel</b> instance.
* This resets this instance state and allows new instance to be created.
* @return a new instance of a <b>NTMultiChannel</b>
*/
NTMultiChannelPtr create();
/**
* Add extra <b>Field</b> to the type.
* @param name name of the field.
* @param field a field to add.
* Adds extra <b>Field</b> to the type.
* @param name the name of the field.
* @param field the field to be added.
* @return this instance of a <b>NTMultiChannelBuilder</b>
*/
shared_pointer add(std::string const & name, epics::pvData::FieldConstPtr const & field);
private:
NTMultiChannelBuilder();
@ -172,64 +187,92 @@ public:
static const std::string URI;
/**
* Wrap (aka dynamic cast, or wrap) the structure to NTMultiChannel.
* First isCompatible is called.
* This method will nullptr if the structure is is not compatible.
* @param structure The structure to wrap-ed (dynamic cast, wrapped) to NTMultiChannel.
* @return NTMultiChannel instance on success, nullptr otherwise.
* Creates an NTMultiChannel wrapping the specified PVStructure if the latter is compatible.
* <p>
* Checks the supplied PVStructure is compatible with NTMultiChannel
* and if so returns an NTMultiChannel which wraps it.
* This method will return null if the structure is is not compatible
* or is null.
*
* @param pvStructure the PVStructure to be wrapped
* @return NTMultiChannel instance wrapping pvStructure on success, null otherwise
*/
static shared_pointer wrap(epics::pvData::PVStructurePtr const & structure);
static shared_pointer wrap(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Wrap (aka dynamic cast, or wrap) the structure to NTMultiChannel without checking for isCompatible
* @param structure The structure to wrap-ed (dynamic cast, wrapped) to NTMultiChannel.
* @return NTMultiChannel instance.
* Creates an NTMultiChannel wrapping the specified PVStructure, regardless of the latter's compatibility.
* <p>
* No checks are made as to whether the specified PVStructure
* is compatible with NTMultiChannel or is non-null.
*
* @param pvStructure the PVStructure to be wrapped
* @return NTMultiChannel instance wrapping pvStructure
*/
static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const & structure);
static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Is the structure an NTMultiChannel.
* @param structure The structure to test.
* @return (false,true) if (is not, is) an NTMultiChannel.
* Returns whether the specified Structure reports to be a compatible NTMultiChannel.
* <p>
* Checks whether the specified Structure reports compatibility with this
* version of NTMultiChannel through its type ID, including checking version numbers.
* The return value does not depend on whether the structure is actually
* compatible in terms of its introspection type.
*
* @param structure the Structure to test
* @return (false,true) if the specified Structure (is not, is) a compatible NTMultiChannel
*/
static bool is_a(epics::pvData::StructureConstPtr const & structure);
/**
* Is the structure an NTMultiChannel.
* @param pvStructure The PVStructure to test.
* @return (false,true) if (is not, is) an NTMultiChannel.
* Returns whether the specified PVStructure reports to be a compatible NTMultiChannel.
* <p>
* Checks whether the specified PVStructure reports compatibility with this
* version of NTMultiChannel through its type ID, including checking version numbers.
* The return value does not depend on whether the structure is actually
* compatible in terms of its introspection type.
*
* @param pvStructure the PVStructure to test
* @return (false,true) if the specified PVStructure (is not, is) a compatible NTMultiChannel
*/
static bool is_a(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Is the Structure compatible with NTMultiChannel.
* This method introspects the fields to see if they are compatible.
* @param structure The Structure to test.
* @return (false,true) if (is not, is) an NTMultiChannel.
* Returns whether the specified Structure is compatible with NTMultiChannel.
* <p>
* Checks whether the specified Structure is compatible with this version
* of NTMultiChannel through the introspection interface.
*
* @param structure the Structure to test
* @return (false,true) if the specified Structure (is not, is) a compatible NTMultiChannel
*/
static bool isCompatible(
epics::pvData::StructureConstPtr const &structure);
/**
* Is the PVStructure compatible with NTMultiChannel.
* This method introspects the fields to see if they are compatible.
* @param pvStructure The PVStructure to test.
* @return (false,true) if (is not, is) an NTMultiChannel.
* Returns whether the specified PVStructure is compatible with NTMultiChannel.
* <p>
* Checks whether the specified PVStructure is compatible with this version
* of NTMultiChannel through the introspection interface.
*
* @param pvStructure the PVStructure to test
* @return (false,true) if the specified PVStructure (is not, is) a compatible NTMultiChannel
*/
static bool isCompatible(
epics::pvData::PVStructurePtr const &pvStructure);
/**
* Checks if the specified structure is a valid NTMultiChannel.
* Checks whether the wrapped PVStructure is valid with respect to this
* version of NTMultiChannel.
* <p>
* Unlike isCompatible(), isValid() may perform checks on the value
* data as well as the introspection data.
*
* Checks whether the wrapped structure is valid with respect to this
* version of NTMultiChannel
* @return (false,true) if (is not, is) a valid NTMultiChannel.
* @return (false,true) if the wrapped PVStructure (is not, is) a valid NTMultiChannel
*/
bool isValid();
/**
* Create a NTMultiChannelBuilder instance
* Creates an NTMultiChannelBuilder instance
* @return builder instance.
*/
static NTMultiChannelBuilderPtr createBuilder();
@ -238,99 +281,113 @@ public:
* Destructor
*/
~NTMultiChannel() {}
/**
* Attach a pvTimeStamp.
* @param pvTimeStamp The pvTimeStamp that will be attached.
* Does nothing if no timeStamp.
* @return true if the operation was successfull (i.e. this instance
has a timeStamp field), otherwise false.
*/
/**
* Attaches a PVTimeStamp to the wrapped PVStructure.
* Does nothing if no timeStamp field.
* @param pvTimeStamp the PVTimeStamp that will be attached.
* @return true if the operation was successfull (i.e. this instance has a timeStamp field), otherwise false.
*/
bool attachTimeStamp(epics::pvData::PVTimeStamp &pvTimeStamp) const;
/**
* Attach a pvAlarm.
* @param pvAlarm The pvAlarm that will be attached.
* Does nothing if no alarm.
* @return true if the operation was successfull (i.e. this instance has a timeStamp field), otherwise false.
* Attaches a PVAlarm to the wrapped PVStructure.
* Does nothing if no alarm field.
* @param pvAlarm the PVAlarm that will be attached.
* @return true if the operation was successfull (i.e. this instance has an alarm field), otherwise false.
*/
bool attachAlarm(epics::pvData::PVAlarm &pvAlarm) const;
/**
* Get the pvStructure.
* @return PVStructurePtr.
* Returns the PVStructure wrapped by this instance.
* @return the PVStructure wrapped by this instance.
*/
epics::pvData::PVStructurePtr getPVStructure() const
{return pvNTMultiChannel;}
/**
* Get the timeStamp.
* @return PVStructurePtr which may be null.
*/
epics::pvData::PVStructurePtr getTimeStamp() const
{return pvTimeStamp;}
/**
* Get the alarm.
* @return PVStructurePtr which may be null.
*/
epics::pvData::PVStructurePtr getAlarm() const
{return pvAlarm;}
/**
* Get the value of each channel.
* @return PVUnionArrayPtr
*/
epics::pvData::PVUnionArrayPtr getValue() const
{return pvValue;}
/**
* Get the channelName of each channel.
* @return PVStringArrayPtr
*/
epics::pvData::PVStringArrayPtr getChannelName() const
{ return pvChannelName;};
/**
* Get the connection state of each channel.
* @return PVBooleanArrayPtr
*/
epics::pvData::PVBooleanArrayPtr getIsConnected() const
{ return pvIsConnected;};
/**
* Get the severity of each channel.
* @return PVIntArrayPtr which may be null.
*/
epics::pvData::PVIntArrayPtr getSeverity() const
{return pvSeverity;}
/**
* Get the status of each channel.
* @return PVIntArrayPtr which may be null.
*/
epics::pvData::PVIntArrayPtr getStatus() const
{return pvStatus;}
/**
* Get the message of each chnnel.
* @return PVStringArrayPtr which may be null.
*/
epics::pvData::PVStringArrayPtr getMessage() const
{return pvMessage;}
/**
* Get the secondsPastEpoch of each channel.
* @return PVLongArrayPtr which may be null.
*/
epics::pvData::PVLongArrayPtr getSecondsPastEpoch() const
{return pvSecondsPastEpoch;}
/**
* Get the nanoseconds of each channel.
* @return PVIntArrayPtr which may be null.
*/
epics::pvData::PVIntArrayPtr getNanoseconds() const
{return pvNanoseconds;}
/**
* Get the userTag of each channel.
* @return PVIntArrayPtr which may be null.
*/
epics::pvData::PVIntArrayPtr getUserTag() const
{return pvUserTag;}
/**
* Get the descriptor.
* @return PVStringPtr which may be null.
* Return the descriptor field.
* @return the descriptor field or null if no descriptor field.
*/
epics::pvData::PVStringPtr getDescriptor() const
{return pvDescriptor;}
/**
* Returns the timeStamp field.
* @return the timeStamp field or null if no such field.
*/
epics::pvData::PVStructurePtr getTimeStamp() const
{return pvTimeStamp;}
/**
* Returns the alarm field.
* @return the alarm field or null if no such field.
*/
epics::pvData::PVStructurePtr getAlarm() const
{return pvAlarm;}
/**
* Returns the field with the value of each channel.
* @return the value field.
*/
epics::pvData::PVUnionArrayPtr getValue() const
{return pvValue;}
/**
* Returns the field with the channelName of each channel.
* @return the channelName field
*/
epics::pvData::PVStringArrayPtr getChannelName() const
{ return pvChannelName;};
/**
* Returns the field with the connection state of each channel.
* @return the isConnected field or null if no such field
*/
epics::pvData::PVBooleanArrayPtr getIsConnected() const
{ return pvIsConnected;};
/**
* Returns the field with the severity of each channel.
* @return the severity field or null if no such field.
*/
epics::pvData::PVIntArrayPtr getSeverity() const
{return pvSeverity;}
/**
* Returns the field with the status of each channel.
* @return the status field or null if no such field
*/
epics::pvData::PVIntArrayPtr getStatus() const
{return pvStatus;}
/**
* Returns the field with the message of each channel.
* @return message field or null if no such field.
*/
epics::pvData::PVStringArrayPtr getMessage() const
{return pvMessage;}
/**
* Returns the field with the secondsPastEpoch of each channel.
* @return the secondsPastEpoch field or null if no such field.
*/
epics::pvData::PVLongArrayPtr getSecondsPastEpoch() const
{return pvSecondsPastEpoch;}
/**
* Returns the field with the nanoseconds of each channel.
* @return nanoseconds field or null if no such field.
*/
epics::pvData::PVIntArrayPtr getNanoseconds() const
{return pvNanoseconds;}
/**
* Returns the field with the userTag of each channel.
* @return the userTag field or null if no such field.
*/
epics::pvData::PVIntArrayPtr getUserTag() const
{return pvUserTag;}
private:
NTMultiChannel(epics::pvData::PVStructurePtr const & pvStructure);
epics::pvData::PVStructurePtr pvNTMultiChannel;

View File

@ -112,10 +112,10 @@ NTNameValueBuilder::shared_pointer NTNameValueBuilder::add(string const & name,
const std::string NTNameValue::URI("epics:nt/NTNameValue:1.0");
NTNameValue::shared_pointer NTNameValue::wrap(PVStructurePtr const & structure)
NTNameValue::shared_pointer NTNameValue::wrap(PVStructurePtr const & pvStructure)
{
if(!isCompatible(structure)) return shared_pointer();
return wrapUnsafe(structure);
if(!isCompatible(pvStructure)) return shared_pointer();
return wrapUnsafe(pvStructure);
}
NTNameValue::shared_pointer NTNameValue::wrapUnsafe(PVStructurePtr const & structure)

View File

@ -45,55 +45,55 @@ namespace detail {
POINTER_DEFINITIONS(NTNameValueBuilder);
/**
* Set a value array <b>Scalar</b> type.
* @param scalarType value array scalar array.
* Sets the value array <b>Scalar</b> type.
* @param scalarType the value field element ScalarType
* @return this instance of <b>NTTableBuilder</b>.
*/
shared_pointer value(epics::pvData::ScalarType scalarType);
/**
* Add descriptor field to the NTNameValue.
* Adds descriptor field to the NTNameValue.
* @return this instance of <b>NTTableBuilder</b>.
*/
shared_pointer addDescriptor();
/**
* Add alarm structure to the NTNameValue.
* Adds alarm field to the NTNameValue.
* @return this instance of <b>NTTableBuilder</b>.
*/
shared_pointer addAlarm();
/**
* Add timeStamp structure to the NTNameValue.
* Adds timeStamp field to the NTNameValue.
* @return this instance of <b>NTTableBuilder</b>.
*/
shared_pointer addTimeStamp();
/**
* Create a <b>Structure</b> that represents NTNameValue.
* Creates a <b>Structure</b> that represents NTNameValue.
* This resets this instance state and allows new instance to be created.
* @return a new instance of <b>Structure</b>.
*/
epics::pvData::StructureConstPtr createStructure();
/**
* Create a <b>PVStructure</b> that represents NTNameValue.
* Creates a <b>PVStructure</b> that represents NTNameValue.
* This resets this instance state and allows new instance to be created.
* @return a new instance of <b>PVStructure</b>
*/
epics::pvData::PVStructurePtr createPVStructure();
/**
* Create a <b>NTNameValue</b> instance.
* Creates a <b>NTNameValue</b> instance.
* This resets this instance state and allows new instance to be created.
* @return a new instance of <b>NTNameValue</b>
*/
NTNameValuePtr create();
/**
* Add extra <b>Field</b> to the type.
* @param name name of the field.
* @param field a field to add.
* Adds extra <b>Field</b> to the type.
* @param name the name of the field.
* @param field the field to be added.
* @return this instance of <b>NTTableBuilder</b>.
*/
shared_pointer add(std::string const & name, epics::pvData::FieldConstPtr const & field);
@ -134,65 +134,90 @@ public:
static const std::string URI;
/**
* Wrap (aka dynamic cast, or wrap) the structure to NTNameValue.
* First isCompatible is called.
* This method will nullptr if the structure is is not compatible.
* This method will nullptr if the structure is nullptr.
* @param structure The structure to wrap-ed (dynamic cast, wrapped) to NTNameValue.
* @return NTNameValue instance on success, nullptr otherwise.
* Creates an NTNameValue wrapping the specified PVStructure if the latter is compatible.
* <p>
* Checks the supplied PVStructure is compatible with NTNameValue
* and if so returns an NTNameValue which wraps it.
* This method will return null if the structure is is not compatible
* or is null.
*
* @param pvStructure the PVStructure to be wrapped.
* @return NTNameValue instance wrapping pvStructure on success, null otherwise.
*/
static shared_pointer wrap(epics::pvData::PVStructurePtr const & structure);
static shared_pointer wrap(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Wrap (aka dynamic cast, or wrap) the structure to NTNameValue without checking for isCompatible
* @param structure The structure to wrap-ed (dynamic cast, wrapped) to NTNameValue.
* @return NTNameValue instance.
* Creates an NTNameValue wrapping the specified PVStructure, regardless of the latter's compatibility.
* <p>
* No checks are made as to whether the specified PVStructure
* is compatible with NTNameValue or is non-null.
*
* @param pvStructure the PVStructure to be wrapped.
* @return NTNameValue instance wrapping pvStructure.
*/
static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const & structure);
static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Is the structure an NTNameValue.
* @param structure The structure to test.
* @return (false,true) if (is not, is) an NTNameValue.
* Returns whether the specified Structure reports to be a compatible NTNameValue.
* <p>
* Checks if the specified Structure reports compatibility with this
* version of NTNameValue through its type ID, including checking version numbers.
* The return value does not depend on whether the structure is actually
* compatible in terms of its introspection type.
*
* @param structure the Structure to test.
* @return (false,true) if the specified Structure (is not, is) a compatible NTNameValue.
*/
static bool is_a(epics::pvData::StructureConstPtr const & structure);
/**
* Is the structure an NTNameValue.
* Returns whether the specified PVStructure reports to be a compatible NTNameValue.
* <p>
* Checks if the specified PVStructure reports compatibility with this
* version of NTNameValue through its type ID, including checking version numbers.
* The return value does not depend on whether the structure is actually
* compatible in terms of its introspection type
* @param pvStructure The PVStructure to test.
* @return (false,true) if (is not, is) an NTNameValue.
* @return (false,true) if the specified PVStructure (is not, is) a compatible NTNameValue.
*/
static bool is_a(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Is the Structure compatible with NTNameValue.
* This method introspects the fields to see if they are compatible.
* @param structure The Structure to test.
* @return (false,true) if (is not, is) an NTNameValue.
* Returns whether the specified Structure is compatible with NTNameValue.
* <p>
* Checks if the specified PVStructure is compatible with this version
* of NTNameValue through the introspection interface.
* @param structure the Structure to test.
* @return (false,true) if the specified Structure (is not, is) a compatible NTNameValue.
*/
static bool isCompatible(
epics::pvData::StructureConstPtr const &structure);
/**
* Is the PVStructure compatible with NTNameValue.
* This method introspects the fields to see if they are compatible.
* @param pvStructure The PVStructure to test.
* @return (false,true) if (is not, is) an NTNameValue.
* Returns whether the specified PVStructure is compatible with NTNameValue.
* <p>
* Checks if the specified PVStructure is compatible with this version
* of NTNameValue through the introspection interface.
*
* @param pvStructure the PVStructure to test
* @return (false,true) if the specified PVStructure (is not, is) a compatible NTNameValue
*/
static bool isCompatible(
epics::pvData::PVStructurePtr const &pvStructure);
/**
* Checks if the specified structure is a valid NTNameValue.
* Returns whether the wrapped PVStructure is valid with respect to this
* version of NTNameValue.
* <p>
* Unlike isCompatible(), isValid() may perform checks on the value
* data as well as the introspection data.
*
* Checks whether the wrapped structure is valid with respect to this
* version of NTNameValue
* @return (false,true) if (is not, is) a valid NTNameValue.
* @return (false,true) if the wrapped PVStructure (is not, is) a valid NTNameValue
*/
bool isValid();
/**
* Create a NTNameValue builder instance.
* Creates an NTNameValue builder instance.
* @return builder instance.
*/
static NTNameValueBuilderPtr createBuilder();
@ -203,60 +228,63 @@ public:
~NTNameValue() {}
/**
* Attach a pvTimeStamp.
* @param pvTimeStamp The pvTimeStamp that will be attached.
* Does nothing if no timeStamp.
* Attaches a PVTimeStamp to the wrapped PVStructure.
* Does nothing if no timeStamp field.
* @param pvTimeStamp the PVTimeStamp that will be attached.
* @return true if the operation was successfull (i.e. this instance has a timeStamp field), otherwise false.
*/
bool attachTimeStamp(epics::pvData::PVTimeStamp &pvTimeStamp) const;
/**
* Attach an pvAlarm.
* @param pvAlarm The pvAlarm that will be attached.
* Does nothing if no alarm.
* @return true if the operation was successfull (i.e. this instance has a timeStamp field), otherwise false.
* Attaches a PVAlarm to the wrapped PVStructure.
* Does nothing if no alarm field.
* @param pvAlarm the PVAlarm that will be attached.
* @return true if the operation was successfull (i.e. this instance has an alarm field), otherwise false.
*/
bool attachAlarm(epics::pvData::PVAlarm &pvAlarm) const;
/**
* Get the pvStructure.
* @return PVStructurePtr.
* Returns the PVStructure wrapped by this instance.
* @return the PVStructure wrapped by this instance.
*/
epics::pvData::PVStructurePtr getPVStructure() const;
/**
* Get the descriptor field.
* @return The pvString or null if no function field.
* Returns the descriptor field.
* @return the descriptor field or null if no descriptor field.
*/
epics::pvData::PVStringPtr getDescriptor() const;
/**
* Get the timeStamp.
* @return PVStructurePtr which may be null.
* Returns the timeStamp field.
* @return the timStamp field or null if no timeStamp field.
*/
epics::pvData::PVStructurePtr getTimeStamp() const;
/**
* Get the alarm.
* @return PVStructurePtr which may be null.
* Returns the alarm field.
* @return the alarm field or null if no alarm field.
*/
epics::pvData::PVStructurePtr getAlarm() const;
/**
* Get the name array field.
* Returns the name array field.
* @return The PVStringArray for the name.
*/
epics::pvData::PVStringArrayPtr getName() const;
/**
* Get the value array field.
* Returns the value array field.
* @return The PVField for the value.
*/
epics::pvData::PVFieldPtr getValue() const;
/**
* Get the value array field of a specified type (e.g. PVDoubleArray).
* @return The <PVT> array for the value.
* Returns the value array field of a specified expected type (e.g. PVDoubleArray).
*
* @tparam PVT The expected type of the value field which should be
* be PVScalarArray or a derived class.
* @return The PVT array for the value.
*/
template<typename PVT>
std::tr1::shared_ptr<PVT> getValue() const

View File

@ -280,15 +280,15 @@ public:
}
};
NTNDArray::shared_pointer NTNDArray::wrap(PVStructurePtr const & structure)
NTNDArray::shared_pointer NTNDArray::wrap(PVStructurePtr const & pvStructure)
{
if(!isCompatible(structure)) return shared_pointer();
return wrapUnsafe(structure);
if(!isCompatible(pvStructure)) return shared_pointer();
return wrapUnsafe(pvStructure);
}
NTNDArray::shared_pointer NTNDArray::wrapUnsafe(PVStructurePtr const & structure)
NTNDArray::shared_pointer NTNDArray::wrapUnsafe(PVStructurePtr const & pvStructure)
{
return shared_pointer(new NTNDArray(structure));
return shared_pointer(new NTNDArray(pvStructure));
}
bool NTNDArray::is_a(StructureConstPtr const & structure)
@ -506,6 +506,15 @@ bool NTNDArray::attachAlarm(PVAlarm &pvAlarm) const
return false;
}
bool NTNDArray::attachDisplay(PVDisplay &pvDisplay) const
{
PVStructurePtr dp = getDisplay();
if (dp)
return pvDisplay.attach(dp);
else
return false;
}
PVStructurePtr NTNDArray::getPVStructure() const
{
return pvNTNDArray;

View File

@ -48,53 +48,54 @@ namespace detail {
POINTER_DEFINITIONS(NTNDArrayBuilder);
/**
* Add descriptor field to the NTNDArray.
* Adds descriptor field to the NTNDArray.
* @return this instance of <b>NTNDArrayBuilder</b>.
*/
shared_pointer addDescriptor();
/**
* Add alarm structure to the NTNDArray.
* Adds alarm field to the NTNDArray.
* @return this instance of <b>NTNDArrayBuilder</b>.
*/
shared_pointer addAlarm();
/**
* Add timeStamp structure to the NTNDArray.
* Adds timeStamp field to the NTNDArray.
* @return this instance of <b>NTNDArrayBuilder</b>.
*/
shared_pointer addTimeStamp();
/**
* Add display structure to the NTNDArray.
* Adds display field to the NTNDArray.
* @return this instance of <b>NTNDArrayBuilder</b>.
*/
shared_pointer addDisplay();
/**
* Create a <b>Structure</b> that represents NTNDArray.
* Creates a <b>Structure</b> that represents NTNDArray.
* This resets this instance state and allows new instance to be created.
* @return a new instance of a <b>Structure</b>.
*/
epics::pvData::StructureConstPtr createStructure();
/**
* Create a <b>PVStructure</b> that represents NTNDArray.
* Creates a <b>PVStructure</b> that represents NTNDArray.
* This resets this instance state and allows new instance to be created.
* @return a new instance of a <b>PVStructure</b>
*/
epics::pvData::PVStructurePtr createPVStructure();
/**
* Create a <b>NTNDArray</b> instance.
* Creates a <b>NTNDArray</b> instance.
* This resets this instance state and allows new instance to be created.
* @return a new instance of a <b>NTNDArray</b>
*/
NTNDArrayPtr create();
/**
* Add extra <b>Field</b> to the type.
* @param name name of the field.
* @param field a field to add.
* Adds extra <b>Field</b> to the type.
* @param name the name of the field.
* @param field the field to be added.
* @return this instance of a <b>NTArrayBuilder</b>.
*/
shared_pointer add(std::string const & name, epics::pvData::FieldConstPtr const & field);
@ -133,65 +134,91 @@ public:
static const std::string URI;
/**
* Wrap (aka dynamic cast, or wrap) the structure to NTNDArray.
* First isCompatible is called.
* This method will nullptr if the structure is is not compatible.
* This method will nullptr if the structure is nullptr.
* @param structure The structure to wrap-ed (dynamic cast, wrapped) to NTNDArray.
* @return NTNDArray instance on success, nullptr otherwise.
* Creates an NTScalarArray wrapping the specified PVStructure if the latter is compatible.
* <p>
* Checks the supplied PVStructure is compatible with NTScalarArray
* and if so returns an NTScalarArray which wraps it.
* This method will return null if the structure is is not compatible
* or is null.
*
* @param pvStructure the PVStructure to be wrapped
* @return NTScalarArray instance wrapping pvStructure on success, null otherwise
*/
static shared_pointer wrap(epics::pvData::PVStructurePtr const & structure);
static shared_pointer wrap(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Wrap (aka dynamic cast, or wrap) the structure to NTNDArray without checking for isCompatible
* @param structure The structure to wrap-ed (dynamic cast, wrapped) to NTNDArray.
* @return NTNDArray instance.
* Creates an NTNDArray wrapping the specified PVStructure, regardless of the latter's compatibility.
* <p>
* No checks are made as to whether the specified PVStructure
* is compatible with NTNDArray or is non-null.
*
* @param pvStructure the PVStructure to be wrapped
* @return NTNDArray instance wrapping pvStructure
*/
static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const & structure);
static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Is the structure an NTNDArray.
* @param structure The structure to test.
* @return (false,true) if (is not, is) an NTNDArray.
* Returns whether the specified Structure reports to be a compatible NTNDArray.
* <p>
* Checks if the specified Structure reports compatibility with this
* version of NTNDArray through its type ID, including checking version numbers.
* The return value does not depend on whether the structure is actually
* compatible in terms of its introspection type.
*
* @param structure the pvStructure to test
* @return (false,true) if the specified Structure (is not, is) a compatible NTNDArray
*/
static bool is_a(epics::pvData::StructureConstPtr const & structure);
/**
* Is the structure an NTNDArray.
* @param pvStructure The PVStructure to test.
* @return (false,true) if (is not, is) an NTNDArray.
* Returns whether the specified PVStructure reports to be a compatible NTNDArray.
*
* Checks if the specified PVStructure reports compatibility with this
* version of NTNDArray through its type ID, including checking version numbers.
* The return value does not depend on whether the structure is actually
* compatible in terms of its introspection type.
*
* @param pvStructure the PVStructure to test
* @return (false,true) if the specified PVStructure (is not, is) a compatible NTNDArray
*/
static bool is_a(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Is the Structure compatible with NTNDArray.
* This method introspects the fields to see if they are compatible.
* @param structure The Structure to test.
* @return (false,true) if (is not, is) an NTNDArray.
* Returns whether the specified Structure is compatible with NTNDArray.
* <p>
* Checks if the specified Structure is compatible with this version
* of NTNDArray through the introspection interface.
*
* @param structure the Structure to test
* @return (false,true) if the specified Structure (is not, is) a compatible NTNDArray
*/
static bool isCompatible(
epics::pvData::StructureConstPtr const &structure);
/**
* Is the PVStructure compatible with NTNDArray.
* This method introspects the fields to see if they are compatible.
* @param pvStructure The PVStructure to test.
* @return (false,true) if (is not, is) an NTNDArray.
* Returns whether the specified PVStructure is compatible with NTNDArray.
* <p>
* Checks if the specified PVStructure is compatible with this version
* of NTNDArray through the introspection interface.
* @param pvStructure the PVStructure to test
* @return (false,true) if the specified PVStructure (is not, is) a compatible NTNDArray
*/
static bool isCompatible(
epics::pvData::PVStructurePtr const &pvStructure);
/**
* Checks if the specified structure is a valid NTNDArray.
* Returns whether the wrapped PVStructure is valid with respect to this
* version of NTNDArray.
* <p>
* Unlike isCompatible(), isValid() may perform checks on the value
* data as well as the introspection data.
*
* Checks whether the wrapped structure is valid with respect to this
* version of NTNDArray
* @return (false,true) if (is not, is) a valid NTNDArray.
* @return (false,true) if the wrapped PVStructure (is not, is) a valid NTNDArray
*/
bool isValid();
/**
* Create a NTNDArrayBuilder instance
* Creates an NTNDArrayBuilder instance
* @return builder instance.
*/
static NTNDArrayBuilderPtr createBuilder();
@ -202,15 +229,15 @@ public:
~NTNDArray() {}
/**
* Attach a pvTimeStamp to timeStamp field.
* @param pvTimeStamp The pvTimeStamp that will be attached.
* Does nothing if no timeStamp.
* Attaches a PVTimeStamp to the wrapped PVStructure.
* Does nothing if no timeStamp field.
* @param pvTimeStamp the PVTimeStamp that will be attached.
* @return true if the operation was successfull (i.e. this instance has a timeStamp field), otherwise false.
*/
bool attachTimeStamp(epics::pvData::PVTimeStamp &pvTimeStamp) const;
/**
* Attach a pvTimeStamp to dataTimeStamp field.
* Attaches a pvTimeStamp to dataTimeStamp field.
* @param pvTimeStamp The pvTimeStamp that will be attached.
* Does nothing if no timeStamp.
* @return true if the operation was successfull (i.e. this instance has a timeStamp field), otherwise false.
@ -218,88 +245,96 @@ public:
bool attachDataTimeStamp(epics::pvData::PVTimeStamp &pvTimeStamp) const;
/**
* Attach an pvAlarm.
* @param pvAlarm The pvAlarm that will be attached.
* Does nothing if no alarm.
* @return true if the operation was successfull (i.e. this instance has a timeStamp field), otherwise false.
* Attaches a PVAlarm to the wrapped PVStructure.
* Does nothing if no alarm field.
* @param pvAlarm the PVAlarm that will be attached.
* @return true if the operation was successfull (i.e. this instance has an alarm field), otherwise false.
*/
bool attachAlarm(epics::pvData::PVAlarm &pvAlarm) const;
/**
* Get the pvStructure.
* @return PVStructurePtr.
* Returns the PVStructure wrapped by this instance.
* @return the PVStructure wrapped by this instance.
*/
epics::pvData::PVStructurePtr getPVStructure() const;
/**
* Get the value field.
* @return The PVField for the values.
* Returns the value field.
* Returns the value field.
*/
epics::pvData::PVUnionPtr getValue() const;
/**
* Get the codec field.
* @return the PVStructurePtr.
* Returns the codec field.
* @return the codec field.
*/
epics::pvData::PVStructurePtr getCodec() const;
/**
* Get the compressedDataSize field.
* @return PVStructurePtr.
* Returns the compressedDataSize field.
* @return the compressedDataSize field.
*/
epics::pvData::PVLongPtr getCompressedDataSize() const;
/**
* Get the uncompressedDataSize field.
* @return PVStructurePtr.
* Returns the uncompressedDataSize field.
* @return the uncompressedDataSize field.
*/
epics::pvData::PVLongPtr getUncompressedDataSize() const;
/**
* Get the dimension field.
* @return the PVStructurePtr.
* Returns the dimension field.
* @return the dimension field.
*/
epics::pvData::PVStructureArrayPtr getDimension() const;
/**
* Get the uniqueId field.
* @return PVStructurePtr.
* Returns the uniqueId field.
* @return the uniqueId field.
*/
epics::pvData::PVIntPtr getUniqueId() const;
/**
* Get the data timeStamp field.
* @return PVStructurePtr.
* Returns the dataTimeStamp field.
* @return the dataTimeStamp field.
*/
epics::pvData::PVStructurePtr getDataTimeStamp() const;
/**
* Get the attribute field.
* @return the PVStructurePtr.
* Returns the attribute field.
* @return the attribute field.
*/
epics::pvData::PVStructureArrayPtr getAttribute() const;
/**
* Get the descriptor field.
* @return The pvString or null if no function field.
* Returns the descriptor field.
* @return the descriptor field or null if no descriptor field.
*/
epics::pvData::PVStringPtr getDescriptor() const;
/**
* Get the timeStamp field.
* @return PVStructurePtr which may be null.
* Returns the timeStamp field.
* @return the timStamp field or null if no timeStamp field.
*/
epics::pvData::PVStructurePtr getTimeStamp() const;
/**
* Get the alarm field.
* @return PVStructurePtr which may be null.
* Returns the alarm field.
* @return the alarm field or null if no alarm field.
*/
epics::pvData::PVStructurePtr getAlarm() const;
/**
* Get the display field.
* @return PVStructurePtr which may be null.
* Attaches a PVDisplay to the wrapped PVStructure.
* Does nothing if no display.
* @param pvDisplay the PVDisplay that will be attached.
* @return true if the operation was successfull (i.e. this instance has a display field), otherwise false.
*/
bool attachDisplay(epics::pvData::PVDisplay &pvDisplay) const;
/**
* Returns the display field.
* @return PVStructurePtr or null if no alarm field.
*/
epics::pvData::PVStructurePtr getDisplay() const;

View File

@ -111,15 +111,15 @@ NTNDArrayAttributeBuilder::shared_pointer NTNDArrayAttributeBuilder::add(string
const std::string NTNDArrayAttribute::URI("epics:nt/NTAttribute:1.0");
NTNDArrayAttribute::shared_pointer NTNDArrayAttribute::wrap(PVStructurePtr const & structure)
NTNDArrayAttribute::shared_pointer NTNDArrayAttribute::wrap(PVStructurePtr const & pvStructure)
{
if(!isCompatible(structure)) return shared_pointer();
return wrapUnsafe(structure);
if(!isCompatible(pvStructure)) return shared_pointer();
return wrapUnsafe(pvStructure);
}
NTNDArrayAttribute::shared_pointer NTNDArrayAttribute::wrapUnsafe(PVStructurePtr const & structure)
NTNDArrayAttribute::shared_pointer NTNDArrayAttribute::wrapUnsafe(PVStructurePtr const & pvStructure)
{
return shared_pointer(new NTNDArrayAttribute(structure));
return shared_pointer(new NTNDArrayAttribute(pvStructure));
}
bool NTNDArrayAttribute::is_a(StructureConstPtr const & structure)

View File

@ -42,53 +42,54 @@ namespace detail {
POINTER_DEFINITIONS(NTNDArrayAttributeBuilder);
/**
* Add tags field to the NTNDArrayAttribute.
* Adds tags field to the NTNDArrayAttribute.
* @return this instance of <b>NTNDArrayAttributeBuilder</b>.
*/
virtual shared_pointer addTags();
/**
* Add descriptor field to the NTNDArrayAttribute.
* Adds descriptor field to the NTNDArrayAttribute.
* @return this instance of <b>NTNDArrayAttributeBuilder</b>.
*/
shared_pointer addDescriptor();
/**
* Add alarm structure to the NTNDArrayAttribute.
* Adds alarm field to the NTNDArrayAttribute.
* @return this instance of <b>NTNDArrayAttributeBuilder</b>.
*/
shared_pointer addAlarm();
/**
* Add timeStamp structure to the NTNDArrayAttribute.
* Adds timeStamp field to the NTNDArrayAttribute.
* @return this instance of <b>NTNDArrayAttributeBuilder</b>.
*/
shared_pointer addTimeStamp();
/**
* Create a <b>Structure</b> that represents NTNDArrayAttribute.
* Creates a <b>Structure</b> that represents NTNDArrayAttribute.
* This resets this instance state and allows new instance to be created.
* @return a new instance of a <b>Structure</b>.
*/
epics::pvData::StructureConstPtr createStructure();
/**
* Create a <b>PVStructure</b> that represents NTNDArrayAttribute.
* Creates a <b>PVStructure</b> that represents NTNDArrayAttribute.
* This resets this instance state and allows new instance to be created.
* @return a new instance of a <b>PVStructure</b>.
*/
epics::pvData::PVStructurePtr createPVStructure();
/**
* Create a <b>NTNDArrayAttribute</b> instance.
* Creates a <b>NTNDArrayAttribute</b> instance.
* This resets this instance state and allows new instance to be created.
* @return a new instance of a <b>NTNDArrayAttribute</b>.
*/
NTNDArrayAttributePtr create();
/**
* Add extra <b>Field</b> to the type.
* @param name name of the field.
* @param field a field to add.
* Adds extra <b>Field</b> to the type.
* @param name the name of the field.
* @param field the field to be added.
* @return this instance of <b>NTNDArrayAttributeBuilder</b>.
*/
shared_pointer add(std::string const & name, epics::pvData::FieldConstPtr const & field);
@ -117,7 +118,7 @@ typedef std::tr1::shared_ptr<detail::NTNDArrayAttributeBuilder> NTNDArrayAttribu
/**
* @briVIntPtref Convenience Class for NTNDArrayAttribute
* @brief Convenience Class for NTNDArrayAttribute
*
* @author dgh
*/
@ -129,65 +130,98 @@ public:
static const std::string URI;
/**
* Wrap (aka dynamic cast, or wrap) the structure to NTNDArrayAttribute.
* First isCompatible is called.
* This method will nullptr if the structure is is not compatible.
* This method will nullptr if the structure is nullptr.
* @param structure The structure to wrap-ed (dynamic cast, wrapped) to NTNDArrayAttribute.
* @return NTNDArrayAttribute instance on success, nullptr otherwise.
* Creates an NTNDArrayAttribute wrapping the specified PVStructure if the latter is compatible.
* <p>
* Checks the supplied PVStructure is compatible with NTAttribute
* extended as required by NTNDArray and if so returns an
* NTNDArrayAttribute which wraps it.
* This method will return null if the structure is is not compatible
* or is null.
*
* @param pvStructure the PVStructure to be wrapped
* @return NTAttribute instance wrapping pvStructure on success, null otherwise
*/
static shared_pointer wrap(epics::pvData::PVStructurePtr const & structure);
static shared_pointer wrap(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Wrap (aka dynamic cast, or wrap) the structure to NTNDArrayAttribute without checking for isCompatible
* @param structure The structure to wrap-ed (dynamic cast, wrapped) to NTNDArrayAttribute.
* @return NTNDArrayAttribute instance.
* Creates an NTNDArrayAttribute wrapping the specified PVStructure, regardless of the latter's compatibility.
* <p>
* No checks are made as to whether the specified PVStructure
* is compatible with NTAttribute extended as required by NTNDArray
* or is non-null.
*
* @param pvStructure the PVStructure to be wrapped
* @return NTAttribute instance wrapping pvStructure
*/
static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const & structure);
static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Is the structure an NTNDArrayAttribute.
* @param structure The structure to test.
* @return (false,true) if (is not, is) an NTNDArrayAttribute.
* Returns whether the specified Structure reports to be a compatible NTAttribute.
* <p>
* Checks if the specified Structure reports compatibility with this
* version of NTAttribute through its type ID, including checking version numbers.
* The return value does not depend on whether the structure is actually
* compatible in terms of its introspection type.
*
* @param structure the Structure to test
* @return (false,true) if the specified Structure (is not, is) a compatible NTAttribute
*/
static bool is_a(epics::pvData::StructureConstPtr const & structure);
/**
* Is the structure an NTNDArrayAttribute.
* @param pvStructure The PVStructure to test.
* @return (false,true) if (is not, is) an NTNDArrayAttribute.
* Returns whether the specified PVStructure reports to be a compatible NTAttribute.
* <p>
* Checks if the specified PVStructure reports compatibility with this
* version of NTAttribute through its type ID, including checking version numbers.
* The return value does not depend on whether the structure is actually
* compatible in terms of its introspection type.
*
* @param pvStructure the PVStructure to test
* @return (false,true) if the specified PVStructure (is not, is) a compatible NTAttribute
*/
static bool is_a(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Is the Structure compatible with NTNDArrayAttribute.
* This method introspects the fields to see if they are compatible.
* @param structure The Structure to test.
* @return (false,true) if (is not, is) an NTNDArrayAttribute.
* Returns whether the specified Structure is compatible with NTAttribute
* extended as required by NTNDArray.
* <p>
* Checks if the specified Structure is compatible with this version
* of NTAttribute extended as required by this version of NTNDArray
* through the introspection interface.
*
* @param structure the Structure to test
* @return (false,true) if the specified Structure (is not, is) a compatible NTAttribute
*/
static bool isCompatible(
epics::pvData::StructureConstPtr const &structure);
/**
* Is the PVStructure compatible with NTNDArrayAttribute.
* This method introspects the fields to see if they are compatible.
* @param pvStructure The PVStructure to test.
* @return (false,true) if (is not, is) an NTNDArrayAttribute.
* Returns whether the specified PVStructure is compatible with NTAttribute
* extended as required by NTNDArray.
* <p>
* Checks if the specified PVStructure is compatible with this version
* of NTAttribute extended as required by this version of NTNDArray
* through the introspection interface.
* @param pvStructure the PVStructure to test
* @return (false,true) if the specified PVStructure (is not, is) a compatible NTAttribute
*/
static bool isCompatible(
epics::pvData::PVStructurePtr const &pvStructure);
/**
* Checks if the specified structure is a valid NTNDArrayAttribute.
* Returns whether the wrapped PVStructure is valid with respect to this
* version of NTAttribute extended as per this version of NTNDArray.
* <p>
* Unlike isCompatible(), isValid() may perform checks on the value
* data as well as the introspection data.
*
* Checks whether the wrapped structure is valid with respect to this
* version of NTNDArrayAttribute
* @return (false,true) if (is not, is) a valid NTNDArrayAttribute.
* @return (false,true) if the wrapped PVStructure (is not, is) a valid NTNDArrayAttribute
*/
bool isValid();
/**
* Create a NTNDArrayAttribute builder instance.
* Creates an NTNDArrayAttribute builder instance.
* @return builder instance.
*/
static NTNDArrayAttributeBuilderPtr createBuilder();
@ -198,72 +232,72 @@ public:
~NTNDArrayAttribute() {}
/**
* Attach a pvTimeStamp.
* @param pvTimeStamp The pvTimeStamp that will be attached.
* Does nothing if no timeStamp.
* Attaches a PVTimeStamp to the wrapped PVStructure.
* Does nothing if no timeStamp field.
* @param pvTimeStamp the PVTimeStamp that will be attached.
* @return true if the operation was successfull (i.e. this instance has a timeStamp field), otherwise false.
*/
bool attachTimeStamp(epics::pvData::PVTimeStamp &pvTimeStamp) const;
/**
* Attach an pvAlarm.
* @param pvAlarm The pvAlarm that will be attached.
* Does nothing if no alarm.
* @return true if the operation was successfull (i.e. this instance has a timeStamp field), otherwise false.
* Attaches a PVAlarm to the wrapped PVStructure.
* Does nothing if no alarm field.
* @param pvAlarm the PVAlarm that will be attached.
* @return true if the operation was successfull (i.e. this instance has an alarm field), otherwise false.
*/
bool attachAlarm(epics::pvData::PVAlarm &pvAlarm) const;
/**
* Get the pvStructure.
* @return PVStructurePtr.
* Returns the PVStructure wrapped by this instance.
* @return the PVStructure wrapped by this instance.
*/
epics::pvData::PVStructurePtr getPVStructure() const;
/**
* Get the descriptor field.
* @return The pvString
* Returns the descriptor field.
* @return the descriptor field.
*/
epics::pvData::PVStringPtr getDescriptor() const;
/**
* Get the timeStamp.
* @return PVStructurePtr which may be null.
* Returns the timeStamp field.
* @return the timStamp field or null if no such field.
*/
epics::pvData::PVStructurePtr getTimeStamp() const;
/**
* Get the alarm.
* @return PVStructurePtr which may be null.
* Returns the alarm field.
* @return the alarm field or null if no alarm field.
*/
epics::pvData::PVStructurePtr getAlarm() const;
/**
* Get the name field.
* @return The PVString for the name.
* Returns the name field.
* @return the name field.
*/
epics::pvData::PVStringPtr getName() const;
/**
* Get the value field.
* @return The PVUnion for the values.
* Returns the value field.
* @return the value field.
*/
epics::pvData::PVUnionPtr getValue() const;
/**
* Get the tags field.
* @return The PVStringArray for the tags, which may be null.
* Returns the tags field.
* @return the tags field or null if no such field.
*/
epics::pvData::PVStringArrayPtr getTags() const;
/**
* Get the sourceType field.
* @return The PVInt for the sourceType field.
* Returns the sourceType field.
* @return the sourceType field.
*/
epics::pvData::PVIntPtr getSourceType() const;
/**
* Get the source field.
* @return The PVString for the source field, which may be null.
* Returns the source field.
* @return the source field.
*/
epics::pvData::PVStringPtr getSource() const;

View File

@ -130,15 +130,15 @@ NTScalarBuilder::shared_pointer NTScalarBuilder::add(string const & name, FieldC
const std::string NTScalar::URI("epics:nt/NTScalar:1.0");
NTScalar::shared_pointer NTScalar::wrap(PVStructurePtr const & structure)
NTScalar::shared_pointer NTScalar::wrap(PVStructurePtr const & pvStructure)
{
if(!isCompatible(structure)) return shared_pointer();
return wrapUnsafe(structure);
if(!isCompatible(pvStructure)) return shared_pointer();
return wrapUnsafe(pvStructure);
}
NTScalar::shared_pointer NTScalar::wrapUnsafe(PVStructurePtr const & structure)
NTScalar::shared_pointer NTScalar::wrapUnsafe(PVStructurePtr const & pvStructure)
{
return shared_pointer(new NTScalar(structure));
return shared_pointer(new NTScalar(pvStructure));
}
bool NTScalar::is_a(StructureConstPtr const & structure)

View File

@ -45,66 +45,67 @@ namespace detail {
POINTER_DEFINITIONS(NTScalarBuilder);
/**
* Set a value type of a NTScalar.
* Sets the value type of an NTScalar.
* @param scalarType the value type.
* @return this instance of <b>NTScalarBuilder</b>.
*/
shared_pointer value(epics::pvData::ScalarType scalarType);
/**
* Add descriptor field to the NTScalar.
* Adds descriptor field to the NTScalar.
* @return this instance of <b>NTScalarBuilder</b>.
*/
shared_pointer addDescriptor();
/**
* Add alarm structure to the NTScalar.
* Adds alarm field to the NTScalar.
* @return this instance of <b>NTScalarBuilder</b>.
*/
shared_pointer addAlarm();
/**
* Add timeStamp structure to the NTScalar.
* Adds timeStamp field to the NTScalar.
* @return this instance of <b>NTScalarBuilder</b>.
*/
shared_pointer addTimeStamp();
/**
* Add display structure to the NTScalar.
* Adds display field to the NTScalar.
* @return this instance of <b>NTScalarBuilder</b>.
*/
shared_pointer addDisplay();
/**
* Add control structure to the NTScalar.
* Adds control field to the NTScalar.
* @return this instance of <b>NTScalarBuilder</b>.
*/
shared_pointer addControl();
/**
* Create a <b>Structure</b> that represents NTScalar.
* Creates a <b>Structure</b> that represents NTScalar.
* This resets this instance state and allows new instance to be created.
* @return a new instance of a <b>Structure</b>.
*/
epics::pvData::StructureConstPtr createStructure();
/**
* Create a <b>PVStructure</b> that represents NTScalar.
* Creates a <b>PVStructure</b> that represents NTScalar.
* This resets this instance state and allows new instance to be created.
* @return a new instance of a <b>PVStructure</b>.
*/
epics::pvData::PVStructurePtr createPVStructure();
/**
* Create a <b>NTScalar</b> instance.
* Creates a <b>NTScalar</b> instance.
* This resets this instance state and allows new instance to be created.
* @return a new instance of a <b>NTScalar</b>.
*/
NTScalarPtr create();
/**
* Add extra <b>Field</b> to the type.
* @param name name of the field.
* @param field a field to add.
* Adds extra <b>Field</b> to the type.
* @param name the name of the field.
* @param field the field to be added.
* @return this instance of <b>NTScalarBuilder</b>.
*/
shared_pointer add(std::string const & name, epics::pvData::FieldConstPtr const & field);
@ -149,65 +150,92 @@ public:
static const std::string URI;
/**
* Wrap (aka dynamic cast, or wrap) the structure to NTScalar.
* First isCompatible is called.
* This method will nullptr if the structure is is not compatible.
* This method will nullptr if the structure is nullptr.
* @param structure The structure to wrap-ed (dynamic cast, wrapped) to NTScalar.
* @return NTScalar instance on success, nullptr otherwise.
* Creates an NTScalar wrapping the specified PVStructure if the latter is compatible.
* <p>
* Checks the supplied PVStructure is compatible with NTScalar
* and if so returns an NTScalar which wraps it.
* This method will return null if the structure is is not compatible
* or is null.
*
* @param pvStructure the PVStructure to be wrapped
* @return NTScalar instance wrapping pvStructure on success, null otherwise
*/
static shared_pointer wrap(epics::pvData::PVStructurePtr const & structure);
static shared_pointer wrap(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Wrap (aka dynamic cast, or wrap) the structure to NTMultiChannel without checking for isCompatible
* @param structure The structure to wrap-ed (dynamic cast, wrapped) to NTScalar.
* @return NTScalar instance.
* Creates an NTScalar wrapping the specified PVStructure, regardless of the latter's compatibility.
* <p>
* No checks are made as to whether the specified PVStructure
* is compatible with NTScalar or is non-null.
*
* @param pvStructure the PVStructure to be wrapped
* @return NTScalar instance wrapping pvStructure
*/
static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const & structure);
static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Is the structure an NTScalar.
* @param structure The structure to test.
* @return (false,true) if (is not, is) an NTScalar.
* Returns whether the specified Structure reports to be a compatible NTScalar.
* <p>
* Checks if the specified Structure reports compatibility with this
* version of NTScalar through its type ID, including checking version numbers.
* The return value does not depend on whether the structure is actually
* compatible in terms of its introspection type.
*
* @param structure the Structure to test
* @return (false,true) if the specified Structure (is not, is) a compatible NTScalar
*/
static bool is_a(epics::pvData::StructureConstPtr const & structure);
/**
* Is the structure an NTScalar.
* @param pvStructure The PVStructure to test.
* @return (false,true) if (is not, is) an NTScalar.
* Returns whether the specified PVStructure reports to be a compatible NTScalar.
* <p>
* Checks if the specified PVStructure reports compatibility with this
* version of NTScalar through its type ID, including checking version numbers.
* The return value does not depend on whether the structure is actually
* compatible in terms of its introspection type.
*
* @param pvStructure the PVStructure to test
* @return (false,true) if the specified PVStructure (is not, is) a compatible NTScalar
*/
static bool is_a(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Is the Structure compatible with NTScalar.
* This method introspects the fields to see if they are compatible.
* @param structure The Structure to test.
* @return (false,true) if (is not, is) an NTScalar.
* Returns whether the specified Structure is compatible with NTScalar.
* <p>
* Checks if the specified Structure is compatible with this version
* of NTScalar through the introspection interface.
*
* @param structure the Structure to test
* @return (false,true) if the specified Structure (is not, is) a compatible NTScalar
*/
static bool isCompatible(
epics::pvData::StructureConstPtr const &structure);
/**
* Is the PVStructure compatible with NTScalar.
* This method introspects the fields to see if they are compatible.
* @param pvStructure The PVStructure to test.
* @return (false,true) if (is not, is) an NTScalar.
* Returns whether the specified PVStructure is compatible with NTScalar.
* <p>
* Checks if the specified PVStructure is compatible with this version
* of NTScalar through the introspection interface.
*
* @param pvStructure the PVStructure to test
* @return (false,true) if the specified PVStructure (is not, is) a compatible NTScalar
*/
static bool isCompatible(
epics::pvData::PVStructurePtr const &pvStructure);
/**
* Checks if the specified structure is a valid NTScalar.
* Returns whether the wrapped PVStructure is valid with respect to this
* version of NTScalar.
* <p>
* Unlike isCompatible(), isValid() may perform checks on the value
* data as well as the introspection data.
*
* Checks whether the wrapped structure is valid with respect to this
* version of NTScalar
* @return (false,true) if (is not, is) a valid NTScalar.
* @return (false,true) if wrapped PVStructure (is not, is) a valid NTScalar
*/
bool isValid();
/**
* Create a NTScalar builder instance.
* Creates an NTScalar builder instance.
* @return builder instance.
*/
static NTScalarBuilderPtr createBuilder();
@ -218,82 +246,84 @@ public:
~NTScalar() {}
/**
* Attach a pvTimeStamp.
* @param pvTimeStamp The pvTimeStamp that will be attached.
* Does nothing if no timeStamp.
* Attaches a PVTimeStamp to the wrapped PVStructure.
* Does nothing if no timeStamp field.
* @param pvTimeStamp the PVTimeStamp that will be attached.
* @return true if the operation was successfull (i.e. this instance has a timeStamp field), otherwise false.
*/
bool attachTimeStamp(epics::pvData::PVTimeStamp &pvTimeStamp) const;
/**
* Attach an pvAlarm.
* @param pvAlarm The pvAlarm that will be attached.
* Does nothing if no alarm.
* @return true if the operation was successfull (i.e. this instance has a timeStamp field), otherwise false.
* Attaches a PVAlarm to the wrapped PVStructure.
* Does nothing if no alarm field.
* @param pvAlarm the PVAlarm that will be attached.
* @return true if the operation was successfull (i.e. this instance has an alarm field), otherwise false.
*/
bool attachAlarm(epics::pvData::PVAlarm &pvAlarm) const;
/**
* Attach an pvDisplay.
* @param pvDisplay The pvDisplay that will be attached.
* Does nothing if no display.
* @return true if the operation was successfull (i.e. this instance has a display field), otherwise false.
* Attaches a PVDisplay to the wrapped PVStructure.
* Does nothing if no display field.
* @param pvDisplay the PVDisplay that will be attached.
* @return true if the operation was successfull (i.e. this instance has a display field), otherwise false.
*/
bool attachDisplay(epics::pvData::PVDisplay &pvDisplay) const;
/**
* Attach an pvControl.
* @param pvControl The pvControl that will be attached.
* Does nothing if no control.
* @return true if the operation was successfull (i.e. this instance has a control field), otherwise false.
* Attaches an PVControl to the wrapped PVStructure.
* Does nothing if no control field.
* @param pvControl The PVControl that will be attached.
* @return true if the operation was successfull (i.e. this instance has a control field), otherwise false.
*/
bool attachControl(epics::pvData::PVControl &pvControl) const;
/**
* Get the pvStructure.
* @return PVStructurePtr.
* Returns the PVStructure wrapped by this instance.
* @return the PVStructure wrapped by this instance.
*/
epics::pvData::PVStructurePtr getPVStructure() const;
/**
* Get the descriptor field.
* @return The pvString or null if no function field.
* Returns the descriptor field.
* @return the descriptor field or null if no descriptor field.
*/
epics::pvData::PVStringPtr getDescriptor() const;
/**
* Get the timeStamp.
* @return PVStructurePtr which may be null.
* Returns the timeStamp field.
* @return the timStamp field or null if no timeStamp field.
*/
epics::pvData::PVStructurePtr getTimeStamp() const;
/**
* Get the alarm.
* @return PVStructurePtr which may be null.
* Returns the alarm field.
* @return the alarm field or null if no alarm field.
*/
epics::pvData::PVStructurePtr getAlarm() const;
/**
* Get the display.
* Returns the display.
* @return PVStructurePtr which may be null.
*/
epics::pvData::PVStructurePtr getDisplay() const;
/**
* Get the control.
* Returns the control.
* @return PVStructurePtr which may be null.
*/
epics::pvData::PVStructurePtr getControl() const;
/**
* Get the value field.
* Returns the value field.
* @return The PVField for the values.
*/
epics::pvData::PVFieldPtr getValue() const;
/**
* Get the value field of a specified type (e.g. PVDouble).
* @return The <PVT> field for the values.
* Returns the value field of a specified type (for example, PVDouble).
* @tparam PVT the expected type of the value field which should be
* be PVScalar or a derived class.
* @return the value field or null if it is not of the expected type.
*/
template<typename PVT>
std::tr1::shared_ptr<PVT> getValue() const

View File

@ -18,6 +18,16 @@ static NTFieldPtr ntField = NTField::get();
namespace detail {
NTScalarArrayBuilder::shared_pointer NTScalarArrayBuilder::value(
epics::pvData::ScalarType elementType
)
{
valueType = elementType;
valueTypeSet = true;
return shared_from_this();
}
NTScalarArrayBuilder::shared_pointer NTScalarArrayBuilder::arrayValue(
epics::pvData::ScalarType elementType
)
@ -129,15 +139,15 @@ NTScalarArrayBuilder::shared_pointer NTScalarArrayBuilder::add(string const & na
const std::string NTScalarArray::URI("epics:nt/NTScalarArray:1.0");
NTScalarArray::shared_pointer NTScalarArray::wrap(PVStructurePtr const & structure)
NTScalarArray::shared_pointer NTScalarArray::wrap(PVStructurePtr const & pvStructure)
{
if(!isCompatible(structure)) return shared_pointer();
return wrapUnsafe(structure);
if(!isCompatible(pvStructure)) return shared_pointer();
return wrapUnsafe(pvStructure);
}
NTScalarArray::shared_pointer NTScalarArray::wrapUnsafe(PVStructurePtr const & structure)
NTScalarArray::shared_pointer NTScalarArray::wrapUnsafe(PVStructurePtr const & pvStructure)
{
return shared_pointer(new NTScalarArray(structure));
return shared_pointer(new NTScalarArray(pvStructure));
}
bool NTScalarArray::is_a(StructureConstPtr const & structure)

View File

@ -46,66 +46,75 @@ namespace detail {
POINTER_DEFINITIONS(NTScalarArrayBuilder);
/**
* Set a value type of a NTScalarArray.
* @param elementType the value array element type.
* Sets the value type of the NTScalarArray.
* @param elementType the value field element ScalarType.
* @return this instance of <b>NTScalarArrayBuilder</b>.
*/
shared_pointer value(epics::pvData::ScalarType elementType);
/**
* Sets the value type of the NTScalarArray.
* @param elementType the value field element ScalarType.
* @return this instance of <b>NTScalarArrayBuilder</b>.
* @deprecated use value instead.
*/
shared_pointer arrayValue(epics::pvData::ScalarType elementType);
/**
* Add descriptor field to the NTScalarArray.
* Adds descriptor field to the NTScalarArray.
* @return this instance of <b>NTScalarArrayBuilder</b>.
*/
shared_pointer addDescriptor();
/**
* Add alarm structure to the NTScalarArray.
* Adds alarm field to the NTScalarArray.
* @return this instance of <b>NTScalarArrayBuilder</b>.
*/
shared_pointer addAlarm();
/**
* Add timeStamp structure to the NTScalarArray.
* Adds timeStamp field to the NTScalarArray.
* @return this instance of <b>NTScalarArrayBuilder</b>.
*/
shared_pointer addTimeStamp();
/**
* Add display structure to the NTScalarArray.
* Adds display field to the NTScalarArray.
* @return this instance of <b>NTScalarArrayBuilder</b>.
*/
shared_pointer addDisplay();
/**
* Add control structure to the NTScalarArray.
* Adds control field to the NTScalarArray.
* @return this instance of <b>NTScalarArrayBuilder</b>.
*/
shared_pointer addControl();
/**
* Create a <b>Structure</b> that represents NTScalarArray.
* Creates a <b>Structure</b> that represents NTScalarArray.
* This resets this instance state and allows new instance to be created.
* @return a new instance of <b>Structure</b>.
*/
epics::pvData::StructureConstPtr createStructure();
/**
* Create a <b>PVStructure</b> that represents NTScalarArray.
* Creates a <b>PVStructure</b> that represents NTScalarArray.
* This resets this instance state and allows new instance to be created.
* @return a new instance of <b>PVStructure</b>.
*/
epics::pvData::PVStructurePtr createPVStructure();
/**
* Create a <b>NTScalarArray</b> instance.
* Creates a <b>NTScalarArray</b> instance.
* This resets this instance state and allows new instance to be created.
* @return a new instance of <b>NTScalarArray</b>.
*/
NTScalarArrayPtr create();
/**
* Add extra <b>Field</b> to the type.
* @param name name of the field.
* @param field a field to add.
* Adds extra <b>Field</b> to the type.
* @param name the name of the field.
* @param field the field to be added.
* @return this instance of <b>NTScalarArrayBuilder</b>.
*/
shared_pointer add(std::string const & name, epics::pvData::FieldConstPtr const & field);
@ -150,65 +159,91 @@ public:
static const std::string URI;
/**
* Wrap (aka dynamic cast, or wrap) the structure to NTScalarArray.
* First isCompatible is called.
* This method will nullptr if the structure is is not compatible.
* This method will nullptr if the structure is nullptr.
* @param structure The structure to wrap-ed (dynamic cast, wrapped) to NTScalarArray.
* @return NTScalarArray instance on success, nullptr otherwise.
* Creates an NTScalarArray wrapping the specified PVStructure if the latter is compatible.
* <p>
* Checks the supplied PVStructure is compatible with NTScalarArray
* and if so returns an NTScalarArray which wraps it.
* This method will return null if the structure is is not compatible
* or is null.
*
* @param pvStructure the PVStructure to be wrapped
* @return NTScalarArray instance wrapping pvStructure on success, null otherwise
*/
static shared_pointer wrap(epics::pvData::PVStructurePtr const & structure);
static shared_pointer wrap(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Wrap (aka dynamic cast, or wrap) the structure to NTMatrix without checking for isCompatible
* @param structure The structure to wrap-ed (dynamic cast, wrapped) to NTScalarArray.
* @return NTScalarArray instance.
* Creates an NTScalarArray wrapping the specified PVStructure, regardless of the latter's compatibility.
* <p>
* No checks are made as to whether the specified PVStructure
* is compatible with NTScalarArray or is non-null.
*
* @param pvStructure the PVStructure to be wrapped
* @return NTScalarArray instance wrapping pvStructure
*/
static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const & structure);
static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Is the structure an NTScalarArray.
* @param structure The structure to test.
* @return (false,true) if (is not, is) an NTScalarArray.
* Returns whether the specified Structure reports to be a compatible NTScalarArray.
* <p>
* Checks if the specified Structure reports compatibility with this
* version of NTScalarArray through its type ID, including checking version numbers.
* The return value does not depend on whether the structure is actually
* compatible in terms of its introspection type.
*
* @param structure the Structure to test
* @return (false,true) if the specified Structure (is not, is) a compatible NTScalarArray
*/
static bool is_a(epics::pvData::StructureConstPtr const & structure);
/**
* Is the structure an NTScalarArray.
* @param pvStructure The PVStructure to test.
* @return (false,true) if (is not, is) an NTScalarArray.
* Returns whether the specified PVStructure reports to be a compatible NTScalarArray.
* <p>
* Checks if the specified PVStructure reports compatibility with this
* version of NTScalarArray through its type ID, including checking version numbers.
* The return value does not depend on whether the structure is actually
* compatible in terms of its introspection type.
*
* @param pvStructure the PVStructure to test
* @return (false,true) if the specified PVStructure (is not, is) a compatible NTScalarArray
*/
static bool is_a(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Is the Structure compatible with NTScalarArray.
* This method introspects the fields to see if they are compatible.
* @param structure The Structure to test.
* @return (false,true) if (is not, is) an NTScalarArray.
* Returns whether the specified Structure is compatible with NTScalarArray.
* <p>
* Checks if the specified Structure is compatible with this version
* of NTScalarArray through the introspection interface.
*
* @param structure the Structure to test.
* @return (false,true) if the specified Structure (is not, is) a compatible NTScalarArray
*/
static bool isCompatible(
epics::pvData::StructureConstPtr const &structure);
/**
* Is the PVStructure compatible with NTScalarArray.
* This method introspects the fields to see if they are compatible.
* @param pvStructure The PVStructure to test.
* @return (false,true) if (is not, is) an NTScalarArray.
* Returns whether the specified PVStructure is compatible with NTScalarArray.
* <p>
* Checks if the specified PVStructure is compatible with this version
* of NTScalarArray through the introspection interface.
*
* @param pvStructure the PVStructure to test
* @return (false,true) if the specified PVStructure (is not, is) a compatible NTScalarArray
*/
static bool isCompatible(
epics::pvData::PVStructurePtr const &pvStructure);
/**
* Checks if the specified structure is a valid NTScalarArray.
* Returns whether the wrapped PVStructure is a valid NTScalarArray.
* <p>
* Unlike isCompatible(), isValid() may perform checks on the value
* data as well as the introspection data.
*
* Checks whether the wrapped structure is valid with respect to this
* version of NTScalarArray
* @return (false,true) if (is not, is) a valid NTScalarArray.
* @return (false,true) if the wrapped PVStructure (is not, is) a valid NTScalarArray.
*/
bool isValid();
/**
* Create a NTScalarArray builder instance.
* Creates an NTScalarArray builder instance.
* @return builder instance.
*/
static NTScalarArrayBuilderPtr createBuilder();
@ -219,82 +254,84 @@ public:
~NTScalarArray() {}
/**
* Attach a pvTimeStamp.
* @param pvTimeStamp The pvTimeStamp that will be attached.
* Does nothing if no timeStamp.
* Attaches a PVTimeStamp to the wrapped PVStructure.
* Does nothing if no timeStamp field.
* @param pvTimeStamp the PVTimeStamp that will be attached.
* @return true if the operation was successfull (i.e. this instance has a timeStamp field), otherwise false.
*/
bool attachTimeStamp(epics::pvData::PVTimeStamp &pvTimeStamp) const;
/**
* Attach an pvAlarm.
* @param pvAlarm The pvAlarm that will be attached.
* Does nothing if no alarm.
* @return true if the operation was successfull (i.e. this instance has a timeStamp field), otherwise false.
* Attaches a PVAlarm to the wrapped PVStructure.
* Does nothing if no alarm field.
* @param pvAlarm the PVAlarm that will be attached.
* @return true if the operation was successfull (i.e. this instance has an alarm field), otherwise false.
*/
bool attachAlarm(epics::pvData::PVAlarm &pvAlarm) const;
/**
* Attach an pvDisplay.
* @param pvDisplay The pvDisplay that will be attached.
* Does nothing if no display.
* @return true if the operation was successfull (i.e. this instance has a display field), otherwise false.
* Attaches a PVDisplay to the wrapped PVStructure.
* Does nothing if no display field.
* @param pvDisplay the PVDisplay that will be attached.
* @return true if the operation was successfull (i.e. this instance has a display field), otherwise false.
*/
bool attachDisplay(epics::pvData::PVDisplay &pvDisplay) const;
/**
* Attach an pvControl.
* Attaches an pvControl.
* @param pvControl The pvControl that will be attached.
* Does nothing if no control.
* Does nothing if no control field.
* @return true if the operation was successfull (i.e. this instance has a control field), otherwise false.
*/
bool attachControl(epics::pvData::PVControl &pvControl) const;
/**
* Get the pvStructure.
* @return PVStructurePtr.
* Returns the PVStructure wrapped by this instance.
* @return the PVStructure wrapped by this instance.
*/
epics::pvData::PVStructurePtr getPVStructure() const;
/**
* Get the descriptor field.
* @return The pvString or null if no function field.
* Returns the descriptor field.
* @return the descriptor field or null if no descriptor field.
*/
epics::pvData::PVStringPtr getDescriptor() const;
/**
* Get the timeStamp.
* @return PVStructurePtr which may be null.
* Returns the timeStamp field.
* @return the timStamp field or null if no timeStamp field.
*/
epics::pvData::PVStructurePtr getTimeStamp() const;
/**
* Get the alarm.
* @return PVStructurePtr which may be null.
* Returns the alarm field.
* @return the alarm field or null if no alarm field.
*/
epics::pvData::PVStructurePtr getAlarm() const;
/**
* Get the display.
* Returns the display.
* @return PVStructurePtr which may be null.
*/
epics::pvData::PVStructurePtr getDisplay() const;
/**
* Get the control.
* Returns the control.
* @return PVStructurePtr which may be null.
*/
epics::pvData::PVStructurePtr getControl() const;
/**
* Get the value field.
* Returns the value field.
* @return The PVField for the values.
*/
epics::pvData::PVFieldPtr getValue() const;
/**
* Get the value field of a specified type (e.g. PVDoubleArray).
* @return The <PVT> field for the values.
* Returns the value field of a specified type (e.g. PVDoubleArray).
* @tparam PVT the expected type of the value field which should be
* be PVScalarArray or a derived class.
* @return the value field or null if it is not of the expected type.
*/
template<typename PVT>
std::tr1::shared_ptr<PVT> getValue() const

View File

@ -207,15 +207,15 @@ NTScalarMultiChannelBuilder::shared_pointer NTScalarMultiChannelBuilder::add(str
const std::string NTScalarMultiChannel::URI("epics:nt/NTScalarMultiChannel:1.0");
NTScalarMultiChannel::shared_pointer NTScalarMultiChannel::wrap(PVStructurePtr const & structure)
NTScalarMultiChannel::shared_pointer NTScalarMultiChannel::wrap(PVStructurePtr const & pvStructure)
{
if(!isCompatible(structure)) return shared_pointer();
return wrapUnsafe(structure);
if(!isCompatible(pvStructure)) return shared_pointer();
return wrapUnsafe(pvStructure);
}
NTScalarMultiChannel::shared_pointer NTScalarMultiChannel::wrapUnsafe(PVStructurePtr const & structure)
NTScalarMultiChannel::shared_pointer NTScalarMultiChannel::wrapUnsafe(PVStructurePtr const & pvStructure)
{
return shared_pointer(new NTScalarMultiChannel(structure));
return shared_pointer(new NTScalarMultiChannel(pvStructure));
}
bool NTScalarMultiChannel::is_a(StructureConstPtr const &structure)

View File

@ -49,87 +49,104 @@ namespace detail {
{
public:
POINTER_DEFINITIONS(NTScalarMultiChannelBuilder);
/**
* specify the scalar type for the value field.
* Sets the scalar type for the value field.
* If this is not called then pvDouble is the default.
* @param scalarType the value field element ScalarType.
* @return this instance of <b>NTScalarMultiChannelBuilder</b>.
*/
shared_pointer value(epics::pvData::ScalarType scalarType);
/**
* Add descriptor field to the NTScalarMultiChannel.
* Adds descriptor field to the NTScalarMultiChannel.
* @return this instance of <b>NTScalarMultiChannelBuilder</b>.
*/
shared_pointer addDescriptor();
/**
* Add alarm structure to the NTScalarMultiChannel.
* Adds alarm field to the NTScalarMultiChannel.
* @return this instance of <b>NTScalarMultiChannelBuilder</b>.
*/
shared_pointer addAlarm();
/**
* Add timeStamp structure to the NTScalarMultiChannel.
* Adds timeStamp field to the NTScalarMultiChannel.
* @return this instance of <b>NTScalarMultiChannelBuilder</b>.
*/
shared_pointer addTimeStamp();
/**
* Add severity array to the NTScalarMultiChannel.
* Adds severity array to the NTScalarMultiChannel.
* @return this instance of <b>NTScalarMultiChannelBuilder</b>.
*/
shared_pointer addSeverity();
/**
* Add status array to the NTScalarMultiChannel.
* Adds status array to the NTScalarMultiChannel.
* @return this instance of <b>NTScalarMultiChannelBuilder</b>.
*/
shared_pointer addStatus();
/**
* Add message array to the NTScalarMultiChannel.
* Adds message array to the NTScalarMultiChannel.
* @return this instance of <b>NTScalarMultiChannelBuilder</b>.
*/
shared_pointer addMessage();
/**
* Add secondsPastEpoch array to the NTScalarMultiChannel.
* Adds secondsPastEpoch array to the NTScalarMultiChannel.
* @return this instance of <b>NTScalarMultiChannelBuilder</b>.
*/
shared_pointer addSecondsPastEpoch();
/**
* Add nanoseconds array to the NTScalarMultiChannel.
* Adds nanoseconds array to the NTScalarMultiChannel.
* @return this instance of <b>NTScalarMultiChannelBuilder</b>.
*/
shared_pointer addNanoseconds();
/**
* Add userTag array to the NTScalarMultiChannel.
* Adds userTag array to the NTScalarMultiChannel.
* @return this instance of <b>NTScalarMultiChannelBuilder</b>.
*/
shared_pointer addUserTag();
/**
* Add isConnected array to the NTScalarMultiChannel.
* Adds isConnected array to the NTScalarMultiChannel.
* @return this instance of <b>NTScalarMultiChannelBuilder</b>.
*/
shared_pointer addIsConnected();
/**
* Create a <b>Structure</b> that represents NTScalarMultiChannel.
* Creates a <b>Structure</b> that represents NTScalarMultiChannel.
* This resets this instance state and allows new instance to be created.
* @return a new instance of a <b>Structure</b>.
*/
epics::pvData::StructureConstPtr createStructure();
/**
* Create a <b>PVStructure</b> that represents NTScalarMultiChannel.
* This resets this instance state and allows new {@code instance to be created.}
* Creates a <b>PVStructure</b> that represents NTScalarMultiChannel.
* This resets this instance state and allows new instance to be created.
* @return a new instance of a <b>PVStructure</b>
*/
epics::pvData::PVStructurePtr createPVStructure();
/**
* Create a <b>NTScalarMultiChannel</b> instance.
* This resets this instance state and allows new {@code instance to be created.}
* Creates a <b>NTScalarMultiChannel</b> instance.
* This resets this instance state and allows new instance to be created.
* @return a new instance of a <b>NTScalarMultiChannel</b>
*/
NTScalarMultiChannelPtr create();
/**
* Add extra <b>Field</b> to the type.
* @param name name of the field.
* @param field a field to add.
* Adds extra <b>Field</b> to the type.
* @param name the name of the field.
* @param field the field to be added.
* @return this instance of a <b>NTScalarMultiChannelBuilder</b>
*/
shared_pointer add(std::string const & name, epics::pvData::FieldConstPtr const & field);
private:
NTScalarMultiChannelBuilder();
@ -173,64 +190,90 @@ public:
static const std::string URI;
/**
* Wrap (aka dynamic cast, or wrap) the structure to NTScalarMultiChannel.
* First isCompatible is called.
* This method will nullptr if the structure is is not compatible.
* @param structure The structure to wrap-ed (dynamic cast, wrapped) to NTScalarMultiChannel.
* @return NTScalarMultiChannel instance on success, nullptr otherwise.
* Creates an NTScalarMultiChannel wrapping the specified PVStructure if the latter is compatible.
* <p>
* Checks the supplied PVStructure is compatible with NTScalarMultiChannel
* and if so returns an NTScalarMultiChannel which wraps it.
* This method will return null if the structure is is not compatible
* or is null.
*
* @param pvStructure the PVStructure to be wrapped
* @return NTScalarMultiChannel instance wrapping pvStructure on success, null otherwise
*/
static shared_pointer wrap(epics::pvData::PVStructurePtr const & structure);
static shared_pointer wrap(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Wrap (aka dynamic cast, or wrap) the structure to NTScalarMultiChannel without checking for isCompatible
* @param structure The structure to wrap-ed (dynamic cast, wrapped) to NTScalarMultiChannel.
* @return NTScalarMultiChannel instance.
* Creates an NTScalarMultiChannel wrapping the specified PVStructure, regardless of the latter's compatibility.
* <p>
* No checks are made as to whether the specified PVStructure
* is compatible with NTScalarMultiChannel or is non-null.
*
* @param pvStructure the PVStructure to be wrapped
* @return NTScalarMultiChannel instance wrapping pvStructure
*/
static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const & structure);
static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Is the structure an NTScalarMultiChannel.
* @param structure The structure to test.
* @return (false,true) if (is not, is) an NTScalarMultiChannel.
* Returns whether the specified Structure reports to be a compatible NTScalarMultiChannel.
* <p>
* Checks if the specified Structure reports compatibility with this
* version of NTScalarMultiChannel through its type ID, including checking version numbers.
* The return value does not depend on whether the structure is actually
* compatible in terms of its introspection type.
*
* @param structure the Structure to test
* @return (false,true) if the specified Structure (is not, is) a compatible NTScalarMultiChannel
*/
static bool is_a(epics::pvData::StructureConstPtr const & structure);
/**
* Is the structure an NTScalarMultiChannel.
* @param pvStructure The PVStructure to test.
* @return (false,true) if (is not, is) an NTScalarMultiChannel.
* Returns whether the specified PVStructure reports to be a compatible NTScalarMultiChannel.
* <p>
* Checks if the specified PVStructure reports compatibility with this
* version of NTScalarMultiChannel through its type ID, including checking version numbers.
* The return value does not depend on whether the structure is actually
* compatible in terms of its introspection type.
*
* @param pvStructure the PVStructure to test
* @return (false,true) if the specified PVStructure (is not, is) a compatible NTScalarMultiChannel
*/
static bool is_a(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Is the Structure compatible with NTScalarMultiChannel.
* This method introspects the fields to see if they are compatible.
* @param structure The Structure to test.
* @return (false,true) if (is not, is) an NTScalarMultiChannel.
* Returns whether the specified Structure is compatible with NTScalarMultiChannel.
* <p>
* Checks if the specified Structure is compatible with this version
* of NTScalarMultiChannel through the introspection interface.
*
* @param structure the Structure to test
* @return (false,true) if the specified Structure (is not, is) a compatible NTScalarMultiChannel
*/
static bool isCompatible(
epics::pvData::StructureConstPtr const &structure);
/**
* Is the PVStructure compatible with NTScalarMultiChannel.
* This method introspects the fields to see if they are compatible.
* @param pvStructure The PVStructure to test.
* @return (false,true) if (is not, is) an NTScalarMultiChannel.
* Returns whether the wrapped PVStructure is a valid NTScalarMultiChannel.
* <p>
* Unlike isCompatible(), isValid() may perform checks on the value
* data as well as the introspection data.
*
* @return (false,true) if wrapped PVStructure (is not, is) a valid NTScalarMultiChannel
*/
static bool isCompatible(
epics::pvData::PVStructurePtr const &pvStructure);
/**
* Checks if the specified structure is a valid NTScalarMultiChannel.
* Returns whether the specified PVStructure is a valid NTScalarMultiChannel.
* <p>
* Unlike isCompatible(), isValid() may perform checks on the value
* data as well as the introspection data.
*
* Checks whether the wrapped structure is valid with respect to this
* version of NTScalarMultiChannel
* @return (false,true) if (is not, is) a valid NTScalarMultiChannel.
* @return (false,true) if wrapped PVStructure (is not, is) a valid NTScalarMultiChannel.
*/
bool isValid();
/**
* Create a NTScalarMultiChannelBuilder instance
* Creates an NTScalarMultiChannelBuilder instance
* @return builder instance.
*/
static NTScalarMultiChannelBuilderPtr createBuilder();
@ -239,107 +282,126 @@ public:
* Destructor
*/
~NTScalarMultiChannel() {}
/**
* Attach a pvTimeStamp.
* @param pvTimeStamp The pvTimeStamp that will be attached.
* Does nothing if no timeStamp.
* @return true if the operation was successfull (i.e. this instance has a timeStamp field), otherwise false.
*/
/**
* Attaches a PVTimeStamp to the wrapped PVStructure.
* Does nothing if no timeStamp field.
* @param pvTimeStamp the PVTimeStamp that will be attached.
* @return true if the operation was successfull (i.e. this instance has a timeStamp field), otherwise false.
*/
bool attachTimeStamp(epics::pvData::PVTimeStamp &pvTimeStamp) const;
/**
* Attach a pvAlarm.
* @param pvAlarm The pvAlarm that will be attached.
* Does nothing if no alarm.
* @return true if the operation was successfull (i.e. this instance has a timeStamp field), otherwise false.
* Attaches a PVAlarm to the wrapped PVStructure.
* Does nothing if no alarm field.
* @param pvAlarm the PVAlarm that will be attached.
* @return true if the operation was successfull (i.e. this instance has an alarm field), otherwise false.
*/
bool attachAlarm(epics::pvData::PVAlarm &pvAlarm) const;
/**
* Get the pvStructure.
* @return PVStructurePtr.
* Returns the PVStructure wrapped by this instance.
* @return the PVStructure wrapped by this instance.
*/
epics::pvData::PVStructurePtr getPVStructure() const
{return pvNTScalarMultiChannel;}
/**
* Get the timeStamp.
* @return PVStructurePtr which may be null.
* Return the descriptor field.
* @return the descriptor field or null if no descriptor field.
*/
epics::pvData::PVStringPtr getDescriptor() const
{return pvDescriptor;}
/**
* Returns the timeStamp field.
* @return the timeStamp field or null if no such field.
*/
epics::pvData::PVStructurePtr getTimeStamp() const
{return pvTimeStamp;}
/**
* Get the alarm.
* @return PVStructurePtr which may be null.
* Returns the alarm field.
* @return the alarm field or null if no such field.
*/
epics::pvData::PVStructurePtr getAlarm() const
{return pvAlarm;}
/**
* Get the value of each channel.
* @return PVScalarArrayPtr
* Returns the field with the value of each channel.
* @return the value field.
*/
epics::pvData::PVScalarArrayPtr getValue() const
{return pvValue;}
/**
* Get the value field of a specified type (e.g. PVDoubleArray).
* @return The <PVT> field for the values.
* Returns the value of each channel of a specified expected type
* (for example, PVDoubleArray).
* @tparam PVT the expected type of the value field which should be
* be PVScalarArray or a derived class.
* @return the value field or null if it is not of the expected type.
*/
template<typename PVT>
std::tr1::shared_ptr<PVT> getValue() const
{
return std::tr1::dynamic_pointer_cast<PVT>(pvValue);
}
/**
* Get the channelName of each channel.
* @return PVStringArrayPtr
* Returns the field with the channelName of each channel.
* @return the channelName field
*/
epics::pvData::PVStringArrayPtr getChannelName() const
{ return pvChannelName;};
/**
* Get the connection state of each channel.
* @return PVBooleanArrayPtr
* Returns the field with the connection state of each channel.
* @return the isConnected field or null if no such field
*/
epics::pvData::PVBooleanArrayPtr getIsConnected() const
{ return pvIsConnected;};
/**
* Get the severity of each channel.
* @return PVIntArrayPtr which may be null.
* Returns the field with the severity of each channel.
* @return the severity field or null if no such field
*/
epics::pvData::PVIntArrayPtr getSeverity() const
{return pvSeverity;}
/**
* Get the status of each channel.
* @return PVIntArrayPtr which may be null.
* Returns the field with the status of each channel.
* @return the status field or null if no such field
*/
epics::pvData::PVIntArrayPtr getStatus() const
{return pvStatus;}
/**
* Get the message of each chnnel.
* @return PVStringArrayPtr which may be null.
* Returns the field with the message of each channel.
* @return message field or null if no such field.
*/
epics::pvData::PVStringArrayPtr getMessage() const
{return pvMessage;}
/**
* Get the secondsPastEpoch of each channel.
* @return PVLongArrayPtr which may be null.
* Returns the field with the secondsPastEpoch of each channel.
* @return the secondsPastEpoch field or null if no such field.
*/
epics::pvData::PVLongArrayPtr getSecondsPastEpoch() const
{return pvSecondsPastEpoch;}
/**
* Get the nanoseconds of each channel.
* @return PVIntArrayPtr which may be null.
* Returns the field with the nanoseconds of each channel.
* @return nanoseconds field or null if no such field.
*/
epics::pvData::PVIntArrayPtr getNanoseconds() const
{return pvNanoseconds;}
/**
* Get the userTag of each channel.
* @return PVIntArrayPtr which may be null.
* Returns the field with the userTag of each channel.
* @return the userTag field or null if no such field.
*/
epics::pvData::PVIntArrayPtr getUserTag() const
{return pvUserTag;}
/**
* Get the descriptor.
* @return PVStringPtr which may be null.
*/
epics::pvData::PVStringPtr getDescriptor() const
{return pvDescriptor;}
private:
NTScalarMultiChannel(epics::pvData::PVStructurePtr const & pvStructure);
epics::pvData::PVStructurePtr pvNTScalarMultiChannel;

View File

@ -127,15 +127,15 @@ NTTableBuilder::shared_pointer NTTableBuilder::add(string const & name, FieldCon
const std::string NTTable::URI("epics:nt/NTTable:1.0");
NTTable::shared_pointer NTTable::wrap(PVStructurePtr const & structure)
NTTable::shared_pointer NTTable::wrap(PVStructurePtr const & pvStructure)
{
if(!isCompatible(structure)) return shared_pointer();
return wrapUnsafe(structure);
if(!isCompatible(pvStructure)) return shared_pointer();
return wrapUnsafe(pvStructure);
}
NTTable::shared_pointer NTTable::wrapUnsafe(PVStructurePtr const & structure)
NTTable::shared_pointer NTTable::wrapUnsafe(PVStructurePtr const & pvStructure)
{
return shared_pointer(new NTTable(structure));
return shared_pointer(new NTTable(pvStructure));
}
bool NTTable::is_a(StructureConstPtr const & structure)

View File

@ -48,7 +48,7 @@ namespace detail {
POINTER_DEFINITIONS(NTTableBuilder);
/**
* Add a column of given <b>Scalar</b> type.
* Adds a column of given <b>Scalar</b> type.
* @param name name of the column.
* @param elementType column type, a scalar array.
* @return this instance of <b>NTTableBuilder</b>.
@ -56,32 +56,32 @@ namespace detail {
shared_pointer addColumn(std::string const & name, epics::pvData::ScalarType elementType);
/**
* Add descriptor field to the NTTable.
* Adds descriptor field to the NTTable.
* @return this instance of <b>NTTableBuilder</b>.
*/
shared_pointer addDescriptor();
/**
* Add alarm structure to the NTTable.
* Adds alarm field to the NTTable.
* @return this instance of <b>NTTableBuilder</b>.
*/
shared_pointer addAlarm();
/**
* Add timeStamp structure to the NTTable.
* Adds timeStamp field to the NTTable.
* @return this instance of <b>NTTableBuilder</b>.
*/
shared_pointer addTimeStamp();
/**
* Create a <b>Structure</b> that represents NTTable.
* Creates a <b>Structure</b> that represents NTTable.
* This resets this instance state and allows new instance to be created.
* @return a new instance of <b>Structure</b>.
*/
epics::pvData::StructureConstPtr createStructure();
/**
* Create a <b>PVStructure</b> that represents NTTable.
* Creates a <b>PVStructure</b> that represents NTTable.
* The returned PVStructure will have labels equal to the column names.
* This resets this instance state and allows new instance to be created.
* @return a new instance of <b>PVStructure</b>.
@ -89,17 +89,18 @@ namespace detail {
epics::pvData::PVStructurePtr createPVStructure();
/**
* Create a <b>NTTable</b> instance.
* Creates a <b>NTTable</b> instance.
* The returned NTTable will wrap a PVStructure which will have
* labels equal to the column names.
* This resets this instance state and allows new instance to be created.
* @return a new instance of <b>NTTable</b>.
*/
NTTablePtr create();
/**
* Add extra <b>Field</b> to the type.
* @param name name of the field.
* @param field a field to add.
* Adds extra <b>Field</b> to the type.
* @param name the name of the field.
* @param field the field to be added.
* @return this instance of <b>NTTableBuilder</b>.
*/
shared_pointer add(std::string const & name, epics::pvData::FieldConstPtr const & field);
@ -142,65 +143,91 @@ public:
static const std::string URI;
/**
* Wrap (aka dynamic cast, or wrap) the structure to NTTable.
* First isCompatible is called.
* This method will nullptr if the structure is is not compatible.
* This method will nullptr if the structure is nullptr.
* @param structure The structure to wrap-ed (dynamic cast, wrapped) to NTTable.
* @return NTTable instance on success, nullptr otherwise.
* Creates an NTTable wrapping the specified PVStructure if the latter is compatible.
* <p>
* Checks the supplied PVStructure is compatible with NTTable
* and if so returns an NTTable which wraps it.
* This method will return null if the structure is is not compatible
* or is null.
*
* @param pvStructure the PVStructure to be wrapped
* @return NTTable instance wrapping pvStructure on success, null otherwise
*/
static shared_pointer wrap(epics::pvData::PVStructurePtr const & structure);
static shared_pointer wrap(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Wrap (aka dynamic cast, or wrap) the structure to NTMultiChannel without checking for isCompatible
* @param structure The structure to wrap-ed (dynamic cast, wrapped) to NTTable.
* @return NTTable instance.
* Creates an NTTable wrapping the specified PVStructure, regardless of the latter's compatibility.
* <p>
* No checks are made as to whether the specified PVStructure
* is compatible with NTTable or is non-null.
*
* @param pvStructure the PVStructure to be wrapped
* @return NTTable instance wrapping pvStructure
*/
static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const & structure);
static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Is the structure an NTTable.
* @param structure The structure to test.
* @return (false,true) if (is not, is) an NTTable.
* Returns whether the specified Structure reports to be a compatible NTTable.
* <p>
* Checks if the specified Structure reports compatibility with this
* version of NTTable through its type ID, including checking version numbers.
* The return value does not depend on whether the structure is actually
* compatible in terms of its introspection type.
*
* @param structure the Structure to test
* @return (false,true) if the specified Structure (is not, is) a compatible NTTable
*/
static bool is_a(epics::pvData::StructureConstPtr const & structure);
/**
* Is the structure an NTTable.
* @param pvStructure The PVStructure to test.
* @return (false,true) if (is not, is) an NTTable.
* Returns whether the specified PVStructure reports to be a compatible NTTable.
* <p>
* Checks if the specified PVStructure reports compatibility with this
* version of NTTable through its type ID, including checking version numbers.
* The return value does not depend on whether the structure is actually
* compatible in terms of its introspection type.
*
* @param pvStructure the PVStructure to test
* @return (false,true) if the specified PVStructure (is not, is) a compatible NTTable
*/
static bool is_a(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Is the Structure compatible with NTTable.
* This method introspects the fields to see if they are compatible.
* @param structure The Structure to test.
* @return (false,true) if (is not, is) an NTTable.
* Returns whether the specified Structure is compatible with NTTable.
* <p>
* Checks if the specified Structure is compatible with this version
* of NTTable through the introspection interface.
*
* @param structure the Structure to test
* @return (false,true) if the specified Structure (is not, is) a compatible NTTable
*/
static bool isCompatible(
epics::pvData::StructureConstPtr const &structure);
/**
* Is the PVStructure compatible with NTTable.
* This method introspects the fields to see if they are compatible.
* @param pvStructure The PVStructure to test.
* @return (false,true) if (is not, is) an NTTable.
* Returns whether the specified PVStructure is compatible with NTTable.
*
* Checks if the specified PVStructure is compatible with this version
* of NTTable through the introspection interface.
*
* @param pvStructure the PVStructure to test
* @return (false,true) if the specified PVStructure (is not, is) a compatible NTTable
*/
static bool isCompatible(
epics::pvData::PVStructurePtr const &pvStructure);
/**
* Checks if the specified structure is a valid NTTable.
* Returns whether the specified structure is a valid NTTable.
* <p>
* Unlike isCompatible(), isValid() may perform checks on the value
* data as well as the introspection data.
*
* Checks whether the wrapped structure is valid with respect to this
* version of NTTable
* @return (false,true) if (is not, is) a valid NTTable.
* @return (false,true) if wrapped PVStructure (is not, is) a valid NTTable
*/
bool isValid();
/**
* Create a NTTable builder instance.
* Creates an NTTable builder instance.
* @return builder instance.
*/
static NTTableBuilderPtr createBuilder();
@ -211,69 +238,73 @@ public:
~NTTable() {}
/**
* Attach a pvTimeStamp.
* @param pvTimeStamp The pvTimeStamp that will be attached.
* Does nothing if no timeStamp.
* Attaches a PVTimeStamp to the wrapped PVStructure.
* Does nothing if no timeStamp field.
* @param pvTimeStamp the PVTimeStamp that will be attached.
* @return true if the operation was successfull (i.e. this instance has a timeStamp field), otherwise false.
*/
bool attachTimeStamp(epics::pvData::PVTimeStamp &pvTimeStamp) const;
/**
* Attach an pvAlarm.
* @param pvAlarm The pvAlarm that will be attached.
* Does nothing if no alarm.
* @return true if the operation was successfull (i.e. this instance has a timeStamp field), otherwise false.
* Attaches a PVAlarm to the wrapped PVStructure.
* Does nothing if no alarm field.
* @param pvAlarm the PVAlarm that will be attached.
* @return true if the operation was successfull (i.e. this instance has an alarm field), otherwise false.
*/
bool attachAlarm(epics::pvData::PVAlarm &pvAlarm) const;
/**
* Get the pvStructure.
* @return PVStructurePtr.
* Returns the PVStructure wrapped by this instance.
* @return the PVStructure wrapped by this instance.
*/
epics::pvData::PVStructurePtr getPVStructure() const;
/**
* Get the descriptor field.
* @return The pvString or null if no function field.
* Returns the descriptor field.
* @return the descriptor field or null if no descriptor field.
*/
epics::pvData::PVStringPtr getDescriptor() const;
/**
* Get the timeStamp.
* @return PVStructurePtr which may be null.
* Returns the timeStamp field.
* @return the timStamp field or null if no such field.
*/
epics::pvData::PVStructurePtr getTimeStamp() const;
/**
* Get the alarm.
* @return PVStructurePtr which may be null.
* Returns the alarm field.
* @return the alarm field or null if no such field.
*/
epics::pvData::PVStructurePtr getAlarm() const;
/**
* Get the labels field.
* @return The pvStringArray for the labels.
* Returns the labels field.
* @return the labels field.
*/
epics::pvData::PVStringArrayPtr getLabels() const;
/**
* Get the column names for the table.
* Returns the column names for the table.
* For each name, calling getColumn should return the column, which should not be null.
* @return The column names.
* @return the column names.
*/
epics::pvData::StringArray const & getColumnNames() const;
/**
* Get the PVField (column) for a field that follows the label field.
* @param columnName The name of the column.
* @return The PVFieldPtr for the field.
* Returns the PVField for the column with the specified colum name.
* @param columnName the name of the column.
* @return the field for the column or null if column does not exist.
*/
epics::pvData::PVFieldPtr getColumn(std::string const & columnName) const;
/**
* Get the PVField (column) for a field that follows the label field of a specified type (e.g. PVDoubleArray).
* @param columnName The name of the column.
* @return The <PVT> field.
* Returns the column with the specified column name and of a specified
* expected type (for example, PVDoubleArray).
* @tparam PVT the expected type of the column which should be
* be PVScalarArray or a derived class.
* @param columnName the name of the column.
* @return the field for the column or null if column does not exist
* or is not of the specified type.
*/
template<typename PVT>
std::tr1::shared_ptr<PVT> getColumn(std::string const & columnName) const

View File

@ -100,15 +100,15 @@ NTUnionBuilder::shared_pointer NTUnionBuilder::add(string const & name, FieldCon
const std::string NTUnion::URI("epics:nt/NTUnion:1.0");
NTUnion::shared_pointer NTUnion::wrap(PVStructurePtr const & structure)
NTUnion::shared_pointer NTUnion::wrap(PVStructurePtr const & pvStructure)
{
if(!isCompatible(structure)) return shared_pointer();
return wrapUnsafe(structure);
if(!isCompatible(pvStructure)) return shared_pointer();
return wrapUnsafe(pvStructure);
}
NTUnion::shared_pointer NTUnion::wrapUnsafe(PVStructurePtr const & structure)
NTUnion::shared_pointer NTUnion::wrapUnsafe(PVStructurePtr const & pvStructure)
{
return shared_pointer(new NTUnion(structure));
return shared_pointer(new NTUnion(pvStructure));
}
bool NTUnion::is_a(StructureConstPtr const & structure)

View File

@ -42,47 +42,47 @@ namespace detail {
POINTER_DEFINITIONS(NTUnionBuilder);
/**
* Add descriptor field to the NTUnion.
* Adds descriptor field to the NTUnion.
* @return this instance of <b>NTUnionBuilder</b>.
*/
shared_pointer addDescriptor();
/**
* Add alarm structure to the NTUnion.
* Adds alarm field to the NTUnion.
* @return this instance of <b>NTUnionBuilder</b>.
*/
shared_pointer addAlarm();
/**
* Add timeStamp structure to the NTUnion.
* Adds timeStamp field to the NTUnion.
* @return this instance of <b>NTUnionBuilder</b>.
*/
shared_pointer addTimeStamp();
/**
* Create a <b>Structure</b> that represents NTUnion.
* Creates a <b>Structure</b> that represents NTUnion.
* This resets this instance state and allows new instance to be created.
* @return a new instance of a <b>Structure</b>.
*/
epics::pvData::StructureConstPtr createStructure();
/**
* Create a <b>PVStructure</b> that represents NTUnion.
* Creates a <b>PVStructure</b> that represents NTUnion.
* This resets this instance state and allows new instance to be created.
* @return a new instance of a <b>PVStructure</b>.
*/
epics::pvData::PVStructurePtr createPVStructure();
/**
* Create a <b>NTUnion</b> instance.
* Creates a <b>NTUnion</b> instance.
* This resets this instance state and allows new instance to be created.
* @return a new instance of a <b>NTUnion</b>.
*/
NTUnionPtr create();
/**
* Add extra <b>Field</b> to the type.
* @param name name of the field.
* @param field a field to add.
* Adds extra <b>Field</b> to the type.
* @param name the name of the field.
* @param field the field to be added.
* @return this instance of <b>NTUnionBuilder</b>.
*/
shared_pointer add(std::string const & name, epics::pvData::FieldConstPtr const & field);
@ -124,65 +124,88 @@ public:
static const std::string URI;
/**
* Wrap (aka dynamic cast, or wrap) the structure to NTUnion.
* First isCompatible is called.
* This method will nullptr if the structure is is not compatible.
* This method will nullptr if the structure is nullptr.
* @param structure The structure to wrap-ed (dynamic cast, wrapped) to NTUnion.
* @return NTUnion instance on success, nullptr otherwise.
* Creates an NTUnion wrapping the specified PVStructure if the latter is compatible.
* <p>
* Checks the supplied PVStructure is compatible with NTUnion
* and if so returns an NTUnion which wraps it.
* This method will return null if the structure is is not compatible
* or is null.
*
* @param pvStructure the PVStructure to be wrapped
* @return NTUnion instance wrapping pvStructure on success, null otherwise
*/
static shared_pointer wrap(epics::pvData::PVStructurePtr const & structure);
static shared_pointer wrap(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Wrap (aka dynamic cast, or wrap) the structure to NTUnion without checking for isCompatible
* @param structure The structure to wrap-ed (dynamic cast, wrapped) to NTUnion.
* @return NTUnion instance.
* Creates an NTUnion wrapping the specified PVStructure, regardless of the latter's compatibility.
* <p>
* No checks are made as to whether the specified PVStructure
* is compatible with NTUnion or is non-null.
* @param pvStructure the PVStructure to be wrapped
* @return NTUnion instance wrapping pvStructure
*/
static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const & structure);
static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Is the structure an NTUnion.
* @param structure The structure to test.
* @return (false,true) if (is not, is) an NTUnion.
* Returns whether the specified Structure reports to be a compatible NTUnion.
* <p>
* Checks if the specified Structure reports compatibility with this
* version of NTUnion through its type ID, including checking version numbers.
* The return value does not depend on whether the structure is actually
* compatible in terms of its introspection type.
*
* @param structure the Structure to test
* @return (false,true) if the specified Structure (is not, is) a compatible NTUnion
*/
static bool is_a(epics::pvData::StructureConstPtr const & structure);
/**
* Is the structure an NTUnion.
* @param pvStructure The PVStructure to test.
* @return (false,true) if (is not, is) an NTUnion.
* Returns whether the specified PVStructure reports to be a compatible NTUnion.
*
* Checks if the specified PVStructure reports compatibility with this
* version of NTUnion through its type ID, including checking version numbers.
* The return value does not depend on whether the structure is actually
* compatible in terms of its introspection type.
*
* @param pvStructure the PVStructure to test
* @return (false,true) if the specified PVStructure (is not, is) a compatible NTUnion
*/
static bool is_a(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Is the Structure compatible with NTUnion.
* This method introspects the fields to see if they are compatible.
* @param structure The Structure to test.
* @return (false,true) if (is not, is) an NTUnion.
* Returns whether the specified Structure is compatible with NTUnion.
* <p>
* Checks if the specified Structure is compatible with this version
* of NTUnion through the introspection interface.
* @param structure the Structure to test
* @return (false,true) if the specified Structure (is not, is) a compatible NTUnion
*/
static bool isCompatible(
epics::pvData::StructureConstPtr const &structure);
/**
* Is the PVStructure compatible with NTUnion.
* This method introspects the fields to see if they are compatible.
* @param pvStructure The PVStructure to test.
* @return (false,true) if (is not, is) an NTUnion.
* Returns whether the specified PVStructure is compatible with NTUnion.
* <p>
* Checks if the specified PVStructure is compatible with this version
* of NTUnion through the introspection interface
* @param pvStructure the PVStructure to test
* @return (false,true) if the specified PVStructure (is not, is) a compatible NTUnion
*/
static bool isCompatible(
epics::pvData::PVStructurePtr const &pvStructure);
/**
* Checks if the specified structure is a valid NTUnion.
* Returns whether the wrapped PVStructure is a valid NTUnion.
* <p>
* Unlike isCompatible(), isValid() may perform checks on the value
* data as well as the introspection data.
*
* Checks whether the wrapped structure is valid with respect to this
* version of NTUnion
* @return (false,true) if (is not, is) a valid NTUnion.
* @return (false,true) if wrapped PVStructure (is not, is) a valid NTUnion
*/
bool isValid();
/**
* Create a NTUnion builder instance.
* Creates an NTUnion builder instance.
* @return builder instance.
*/
static NTUnionBuilderPtr createBuilder();
@ -193,48 +216,48 @@ public:
~NTUnion() {}
/**
* Attach a pvTimeStamp.
* @param pvTimeStamp The pvTimeStamp that will be attached.
* Does nothing if no timeStamp.
* Attaches a PVTimeStamp to the wrapped PVStructure.
* Does nothing if no timeStamp field.
* @param pvTimeStamp the PVTimeStamp that will be attached.
* @return true if the operation was successfull (i.e. this instance has a timeStamp field), otherwise false.
*/
bool attachTimeStamp(epics::pvData::PVTimeStamp &pvTimeStamp) const;
/**
* Attach an pvAlarm.
* @param pvAlarm The pvAlarm that will be attached.
* Does nothing if no alarm.
* @return true if the operation was successfull (i.e. this instance has a timeStamp field), otherwise false.
* Attaches a PVAlarm to the wrapped PVStructure.
* Does nothing if no alarm field.
* @param pvAlarm the PVAlarm that will be attached.
* @return true if the operation was successfull (i.e. this instance has an alarm field), otherwise false.
*/
bool attachAlarm(epics::pvData::PVAlarm &pvAlarm) const;
/**
* Get the pvStructure.
* @return PVStructurePtr.
* Returns the PVStructure wrapped by this instance.
* @return the PVStructure wrapped by this instance.
*/
epics::pvData::PVStructurePtr getPVStructure() const;
/**
* Get the descriptor field.
* @return The pvString or null if no function field.
* Returns the descriptor field.
* @return the descriptor field or null if no descriptor field.
*/
epics::pvData::PVStringPtr getDescriptor() const;
/**
* Get the timeStamp.
* @return PVStructurePtr which may be null.
* Returns the timeStamp field.
* @return the timStamp field or null if no timeStamp field.
*/
epics::pvData::PVStructurePtr getTimeStamp() const;
/**
* Get the alarm.
* @return PVStructurePtr which may be null.
* Returns the alarm field.
* @return the alarm field or null if no alarm field.
*/
epics::pvData::PVStructurePtr getAlarm() const;
/**
* Get the value field.
* @return The PVUnion for the values.
* Returns the value field.
* @return the value field.
*/
epics::pvData::PVUnionPtr getValue() const;

View File

@ -127,15 +127,15 @@ NTURIBuilder::shared_pointer NTURIBuilder::add(string const & name, FieldConstPt
const std::string NTURI::URI("epics:nt/NTURI:1.0");
NTURI::shared_pointer NTURI::wrap(PVStructurePtr const & structure)
NTURI::shared_pointer NTURI::wrap(PVStructurePtr const & pvStructure)
{
if(!isCompatible(structure)) return shared_pointer();
return wrapUnsafe(structure);
if(!isCompatible(pvStructure)) return shared_pointer();
return wrapUnsafe(pvStructure);
}
NTURI::shared_pointer NTURI::wrapUnsafe(PVStructurePtr const & structure)
NTURI::shared_pointer NTURI::wrapUnsafe(PVStructurePtr const & pvStructure)
{
return shared_pointer(new NTURI(structure));
return shared_pointer(new NTURI(pvStructure));
}
bool NTURI::is_a(StructureConstPtr const & structure)

View File

@ -45,13 +45,13 @@ namespace detail {
POINTER_DEFINITIONS(NTURIBuilder);
/**
* Add authority field to the NTURI.
* Adds authority field to the NTURI.
* @return this instance of <b>NTURIBuilder</b>.
*/
shared_pointer addAuthority();
/**
* Add extra <b>Scalar</b> of ScalarType pvString
* Adds extra <b>Scalar</b> of ScalarType pvString
* to the query field of the type.
* @param name name of the field.
* @return this instance of <b>NTURIBuilder</b>.
@ -59,7 +59,7 @@ namespace detail {
shared_pointer addQueryString(std::string const & name);
/**
* Add extra <b>Scalar</b> of ScalarType pvDouble
* Adds extra <b>Scalar</b> of ScalarType pvDouble
* to the query field of the type.
* @param name name of the field.
* @return this instance of <b>NTURIBuilder</b>.
@ -67,7 +67,7 @@ namespace detail {
shared_pointer addQueryDouble(std::string const & name);
/**
* Add extra <b>Scalar</b> of ScalarType pvInt
* Adds extra <b>Scalar</b> of ScalarType pvInt
* to the query field of the type.
* @param name name of the field.
* @return this instance of <b>NTURIBuilder</b>.
@ -75,14 +75,14 @@ namespace detail {
shared_pointer addQueryInt(std::string const & name);
/**
* Create a <b>Structure</b> that represents NTURI.
* Creates a <b>Structure</b> that represents NTURI.
* This resets this instance state and allows new instance to be created.
* @return a new instance of <b>Structure</b>.
*/
epics::pvData::StructureConstPtr createStructure();
/**
* Create a <b>PVStructure</b> that represents NTURI.
* Creates a <b>PVStructure</b> that represents NTURI.
* The returned PVStructure will have labels equal to the column names.
* This resets this instance state and allows new instance to be created.
* @return a new instance of <b>PVStructure</b>.
@ -90,17 +90,18 @@ namespace detail {
epics::pvData::PVStructurePtr createPVStructure();
/**
* Create a <b>NTURI</b> instance.
* Creates a <b>NTURI</b> instance.
* The returned NTURI will wrap a PVStructure which will have
* labels equal to the column names.
* This resets this instance state and allows new instance to be created.
* @return a new instance of <b>NTURI</b>.
*/
NTURIPtr create();
/**
* Add extra <b>Field</b> to the type.
* @param name name of the field.
* @param field a field to add.
* Adds extra <b>Field</b> to the type.
* @param name the name of the field.
* @param field the field to be added.
* @return this instance of <b>NTURIBuilder</b>.
*/
shared_pointer add(std::string const & name, epics::pvData::FieldConstPtr const & field);
@ -141,65 +142,91 @@ public:
static const std::string URI;
/**
* Wrap (aka dynamic cast, or wrap) the structure to NTURI.
* First isCompatible is called.
* This method will nullptr if the structure is is not compatible.
* This method will nullptr if the structure is nullptr.
* @param structure The structure to wrap-ed (dynamic cast, wrapped) to NTURI.
* @return NTURI instance on success, nullptr otherwise.
* Creates an NTURI wrapping the specified PVStructure if the latter is compatible.
* <p>
* Checks the supplied PVStructure is compatible with NTURI
* and if so returns an NTURI which wraps it.
* This method will return null if the structure is is not compatible
* or is null.
*
* @param pvStructure the PVStructure to be wrapped
* @return NTURI instance wrapping pvStructure on success, null otherwise
*/
static shared_pointer wrap(epics::pvData::PVStructurePtr const & structure);
static shared_pointer wrap(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Wrap (aka dynamic cast, or wrap) the structure to NTMultiChannel without checking for isCompatible
* @param structure The structure to wrap-ed (dynamic cast, wrapped) to NTURI.
* @return NTURI instance.
* Creates an NTScalar wrapping the specified PVStructure, regardless of the latter's compatibility.
* <p>
* No checks are made as to whether the specified PVStructure
* is compatible with NTScalar or is non-null.
*
* @param pvStructure the PVStructure to be wrapped
* @return NTScalar instance wrapping pvStructure
*/
static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const & structure);
static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Is the structure an NTURI.
* @param structure The structure to test.
* @return (false,true) if (is not, is) an NTURI.
* Returns whether the specified Structure reports to be a compatible NTScalar.
* <p>
* Checks if the specified Structure reports compatibility with this
* version of NTScalar through its type ID, including checking version numbers.
* The return value does not depend on whether the structure is actually
* compatible in terms of its introspection type.
*
* @param structure the Structure to test
* @return (false,true) if (is not, is) a compatible NTScalar
*/
static bool is_a(epics::pvData::StructureConstPtr const & structure);
/**
* Is the structure an NTURI.
* @param pvStructure The PVStructure to test.
* @return (false,true) if (is not, is) an NTURI.
* Returns whether the specified PVStructure reports to be a compatible NTURI.
* <p>
* Checks if the specified PVStructure reports compatibility with this
* version of NTURI through its type ID, including checking version numbers.
* The return value does not depend on whether the structure is actually
* compatible in terms of its introspection type.
*
* @param pvStructure the PVStructure to test.
* @return (false,true) if the specified PVStructure (is not, is) a compatible NTURI.
*/
static bool is_a(epics::pvData::PVStructurePtr const & pvStructure);
/**
* Is the Structure compatible with NTURI.
* This method introspects the fields to see if they are compatible.
* @param structure The Structure to test.
* @return (false,true) if (is not, is) an NTURI.
* Returns whether the specified Structure is compatible with NTURI.
* <p>
* Checks if the specified Structure is compatible with this version
* of NTURI through the introspection interface.
*
* @param structure the Structure to test
* @return (false,true) if the specified Structure (is not, is) a compatible NTURI
*/
static bool isCompatible(
epics::pvData::StructureConstPtr const &structure);
/**
* Is the PVStructure compatible with NTURI.
* This method introspects the fields to see if they are compatible.
* @param pvStructure The PVStructure to test.
* @return (false,true) if (is not, is) an NTURI.
* Returns whether the specified PVStructure is compatible with NTURI.
* <p>
* Checks if the specified PVStructure is compatible with this version
* of NTURI through the introspection interface.
*
* @param pvStructure the PVStructure to test
* @return (false,true) if the specified PVStructure (is not, is) a compatible NTURI
*/
static bool isCompatible(
epics::pvData::PVStructurePtr const &pvStructure);
/**
* Checks if the specified structure is a valid NTURI.
* Returns whether the wrapped PVStructure is a valid NTURI.
* <p>
* Unlike isCompatible(), isValid() may perform checks on the value
* data as well as the introspection data.
*
* Checks whether the wrapped structure is valid with respect to this
* version of NTURI
* @return (false,true) if (is not, is) a valid NTURI.
* @return (false,true) if wrapped PVStructure (is not, is) a valid NTURI.
*/
bool isValid();
/**
* Create a NTURI builder instance.
* Creates an NTURI builder instance.
* @return builder instance.
*/
static NTURIBuilderPtr createBuilder();
@ -210,37 +237,37 @@ public:
~NTURI() {}
/**
* Get the pvStructure.
* @return PVStructurePtr.
* Returns the PVStructure wrapped by this instance.
* @return the PVStructure wrapped by this instance.
*/
epics::pvData::PVStructurePtr getPVStructure() const;
/**
* Get the scheme field.
* @return The PVString for the scheme.
* Returns the scheme field.
* @return the scheme field.
*/
epics::pvData::PVStringPtr getScheme() const;
/**
* Get the authority field.
* @return The PVString for the authority.
* Returns the authority field.
* @return the authority field or null if no such field.
*/
epics::pvData::PVStringPtr getAuthority() const;
/**
* Get the path field.
* @return The PVString for the path.
* Returns the path field.
* @return the path field.
*/
epics::pvData::PVStringPtr getPath() const;
/**
* Get the query field.
* @return The PVStructure for the query.
* Returns the query field.
* @return the query field or null if no such field.
*/
epics::pvData::PVStructurePtr getQuery() const;
/**
* Get the names of the query fields for the URI.
* Returns the names of the query fields for the URI.
* For each name, calling getQueryField should return
* the query field, which should not be null.
* @return The query field names.
@ -248,21 +275,25 @@ public:
epics::pvData::StringArray const & getQueryNames() const;
/**
* Get the PVField (column) for a field that follows the label field.
* @param columnName The name of the column.
* @return The PVFieldPtr for the field.
* Returns the subfield of the query field with the specified name.
* @param name the name of the subfield.
* @return the the subfield of the query field or null if the field does not exist.
*/
epics::pvData::PVFieldPtr getQueryField(std::string const & columnName) const;
epics::pvData::PVFieldPtr getQueryField(std::string const & name) const;
/**
* Get the PVField (column) for a field that follows the label field of a specified type (e.g. PVDoubleArray).
* @param columnName The name of the column.
* @return The <PVT> field.
* Returns the subfield of the query field (parameter) with the specified
* name and of a specified expected type (for example, PVString).
* @tparam PVT the expected type of the subfield which should be
* be PVString, PVInt pr PVDouble.
* @param name the subfield of the query field or null if the field does
* not exist or is not of the expected type.
* @return The PVT field.
*/
template<typename PVT>
std::tr1::shared_ptr<PVT> getQueryField(std::string const & columnName) const
std::tr1::shared_ptr<PVT> getQueryField(std::string const & name) const
{
epics::pvData::PVFieldPtr pvField = getQueryField(columnName);
epics::pvData::PVFieldPtr pvField = getQueryField(name);
if (pvField.get())
return std::tr1::dynamic_pointer_cast<PVT>(pvField);
else

View File

@ -23,9 +23,9 @@ public:
/**
* Checks whether NT types are compatible by checking their IDs,
* i.e. their names and major version must match.
* @param u1 the first uri.
* @param u2 the second uri.
* @return true of URIs are compatible, false otherwise.
* @param u1 the first URI.
* @param u2 the second URI.
* @return true if URIs are compatible, false otherwise.
*/
static bool is_a(const std::string &u1, const std::string &u2);

View File

@ -23,7 +23,7 @@ void test_builder()
testOk(builder.get() != 0, "Got builder");
StructureConstPtr structure = builder->
arrayValue(pvDouble)->
value(pvDouble)->
addDescriptor()->
addAlarm()->
addTimeStamp()->
@ -75,7 +75,7 @@ void test_ntscalarArray()
testOk(builder.get() != 0, "Got builder");
NTScalarArrayPtr ntScalarArray = builder->
arrayValue(pvInt)->
value(pvInt)->
addDescriptor()->
addAlarm()->
addTimeStamp()->
@ -220,7 +220,7 @@ void test_wrap()
testOk(builder.get() != 0, "Got builder");
PVStructurePtr pvStructure = builder->
arrayValue(pvDouble)->
value(pvDouble)->
createPVStructure();
testOk1(pvStructure.get() != 0);
if (!pvStructure)