33 Commits

Author SHA1 Message Date
Ralph Lange
32be30f554 jenkins: fix CloudBees doc job (SourceForge upload) 2016-08-20 21:41:27 +02:00
Andrew Johnson
01ba7dd0f4 Set dependency branch for cloudbees builds 2016-08-02 11:00:13 -05:00
Dave Hickin
6e355a614e Update documentation for 5.1.0 2016-08-02 10:17:35 +01:00
Dave Hickin
af236369db Update release notes for 5.1.0 2016-08-02 10:17:15 +01:00
Ralph Lange
3f233f1350 Add QtCreator wildcard to .gitignore 2016-07-28 11:57:48 +02:00
Dave Hickin
d13696f943 SHRLIB: Add ABI version (5.1) 2016-07-22 17:01:38 +01:00
Dave Hickin
e6597bc2f0 Update source boilerplate for new LICENSE file 2016-07-22 16:56:01 +01:00
Dave Hickin
3d4083221d Remove COPYRIGHT file
Copyright is now in LICENSE file
2016-07-22 16:43:57 +01:00
Dave Hickin
6b64adc150 Update LICENSE to new version 2016-07-22 16:43:24 +01:00
Ralph Lange
c35e78b797 jenkins: update CloudBees jobs to new standard 2016-07-22 14:56:24 +02:00
Dave Hickin
08234150dc Add tests for is_a and isCompatible for PVStructures 2016-04-12 03:24:47 +01:00
Dave Hickin
5dfc4ffd16 Rename ntScalarArray ntMatrix in NTMatrix tests 2016-04-12 03:23:03 +01:00
Dave Hickin
ff4b88754f Add missing is_a(PVStructurePtr) implementations 2016-04-12 03:19:42 +01:00
Dave Hickin
8794d5b6c0 Run NTAttribute and NTContinuum unit tests 2016-04-12 03:16:48 +01:00
Dave Hickin
00aab51203 Documentation: Remove old versions 2016-03-18 22:00:29 +00:00
Dave Hickin
df023e6103 Documentation: Change to release-based versioning
Replace dated documentation scheme by one using release version.
2016-03-18 21:56:15 +00:00
Ralph Lange
e07a42fb48 jenkins: switch to Base 3.15.3 2016-02-16 10:17:24 +01:00
Dave Hickin
6dd63a74a6 Make addTags() non-virtual 2016-02-16 08:32:27 +00:00
dhickin
f90549aba8 Merge pull request #7 from mdavidsaver/master
Move headers to pv/
2016-02-10 20:45:01 +00:00
Michael Davidsaver
4f3f6784d4 adjust Makefiles 2016-02-09 19:25:37 -05:00
Michael Davidsaver
cfe939ca7a Moves source and headers
src/nt/*.h   => src/pv/*.h
src/nt/*.cpp => src/*.cpp
test/nt/*.*  => test/*.*
2016-02-09 19:25:37 -05:00
Dave Hickin
eb440e4662 Corrections to ntCPP.html 2015-10-17 10:29:39 +01:00
Dave Hickin
bd5d0dee12 Add new (markdown) README 2015-10-17 00:33:02 +01:00
Dave Hickin
3b645933f5 Javadoc corrections 2015-10-16 19:19:58 +01:00
Dave Hickin
5cca3a10ac Rename variable to match header. 2015-10-16 15:47:38 +01:00
Dave Hickin
bab0d964ab Add missing implementation of NTScalarArray::value
Use value in unit tests instead of deprecated arrayValue.
2015-10-16 15:46:56 +01:00
Dave Hickin
51d4d270cd Multiple Doxygen improvements 2015-10-16 15:42:56 +01:00
Dave Hickin
3aa1f533bf Add new version of ntCPP.html
Only state that the new types have been added.
Document these in next version.
2015-10-16 15:38:55 +01:00
Dave Hickin
cebc68474d Update TODO 2015-10-16 15:37:03 +01:00
Dave Hickin
a1ac2f41b4 Doxygen fix 2015-10-09 11:44:36 +01:00
Dave Hickin
d8eb50bff8 Release notes: add for 5.0 and improve for 4.0
Add list of new supported types and summary of API changes.
2015-10-08 10:05:42 +01:00
Ralph Lange
e93d1c5c42 jenkins: fix CloudBees doc job 2015-09-28 15:00:47 +02:00
Ralph Lange
8e97c2e8bd jenkins: adapt doc script to new CloudBees jenkins job 2015-09-14 15:13:51 +02:00
81 changed files with 4087 additions and 6491 deletions

1
.gitignore vendored
View File

@@ -7,3 +7,4 @@ configure/*.local
html/
**/O.*
**/**/O.*
QtC-*

View File

@@ -1,31 +0,0 @@
This software is in part copyrighted by the various organizations and
individuals listed below. Permission to use it is set out in the file
LICENSE that accompanies the software.
In no event shall any copyright holder be liable to any party for
direct, indirect, special, incidental, or consequential damages arising
out of the use of this software, its documentation, or any derivatives
thereof, even if they have been advised of the possibility of such
damage.
The copyright holders specifically disclaim any warranties, including,
but not limited to, the implied warranties of merchantability, fitness
for a particular purpose, and non-infringement. This software is
provided on an "as is" basis, and the copyright holders have no
obligation either collectively or individually to provide maintenance,
support, updates, enhancements, or modifications.
Copyright (c) 2006 - 2015 All rights reserved
Martin R. Kraimer
The University of Chicago, as Operator of Argonne National Laboratory.
Deutsches Elektronen-Synchroton, Member of the Helmholtz Association,
(DESY), HAMBURG, GERMANY,
BERLINER SPEICHERRING GESELLSCHAFT FUER SYNCHROTRONSTRAHLUNG M.B.H.
(BESSY), BERLIN, GERMANY.
COSYLAB (Control System Laboratory), Ljubljana, Slovenia.
Brookhaven Science Associates, as Operator of Brookhaven
National Laboratory.
Diamond Light Source Ltd., Didcot, United Kingdom.

109
LICENSE
View File

@@ -1,14 +1,16 @@
Copyright and License Terms
---------------------------
Copyright (c) 2006-2015 Martin R. Kraimer
Copyright (c) 2006 The University of Chicago, as Operator of Argonne
Copyright (c) 2006-2016 Martin R. Kraimer
Copyright (c) 2006-2016 UChicago Argonne LLC, as Operator of Argonne
National Laboratory.
Copyright (c) 2006 Deutsches Elektronen-Synchrotron,
Member of the Helmholtz Association, (DESY), HAMBURG, GERMANY.
Copyright (c) 2007-2015 Control System Laboratory,
Copyright (c) 2007-2016 Control System Laboratory,
(COSYLAB) Ljubljana Slovenia
Copyright (c) 2010-2015 Brookhaven Science Associates, as Operator of Brookhaven
National Laboratory
Copyright (c) 2011-2015 Diamond Light Source Limited,
Copyright (c) 2010-2016 Brookhaven Science Associates, as Operator
of Brookhaven National Laboratory
Copyright (c) 2011-2016 Diamond Light Source Limited,
(DLS) Didcot, United Kingdom
Permission is hereby granted, free of charge, to any person
@@ -34,81 +36,30 @@ OTHER DEALINGS IN THE SOFTWARE.
________________________________________________________________________
This software is in part copyrighted by the University of Chicago (UofC)
Additional Disclaimers
----------------------
In no event shall UofC be liable to any party for direct, indirect,
special, incidental, or consequential damages arising out of the use of
this software, its documentation, or any derivatives thereof, even if
UofC has been advised of the possibility of such damage.
This software is copyright in part by these institutions:
UofC specifically disclaims any warranties, including, but not limited
to, the implied warranties of merchantability, fitness for a particular
purpose, and non-infringement. This software is provided on an "as is"
basis, and UofC has no obligation to provide maintenance, support,
updates, enhancements, or modifications.
* Brookhaven Science Associates, as Operator of Brookhaven
National Laboratory, New York, USA
* Control System Laboratory, Ljubljana, Slovenia
* Deutsches Elektronen-Synchroton, Member of the Helmholtz
Association, Hamburg, Germany
* Diamond Light Source Limited, Didcot, United Kingdom
* Helmholtz-Zentrum Berlin fuer Materialien und Energie m.b.H.,
Berlin, Germany.
* UChicage Argonne LLC, as Operator of Argonne National Laboratory,
Illinois, USA
________________________________________________________________________
In no event shall these institutions be liable to any party for direct,
indirect, special, incidental, or consequential damages arising out of
the use of this software, its documentation, or any derivatives thereof,
even if advised of the possibility of such damage.
This software is in part copyrighted by the BERLINER SPEICHERRING
GESELLSCHAFT FUER SYNCHROTRONSTRAHLUNG M.B.H. (BESSY), BERLIN, GERMANY.
In no event shall BESSY be liable to any party for direct, indirect,
special, incidental, or consequential damages arising out of the use of
this software, its documentation, or any derivatives thereof, even if
BESSY has been advised of the possibility of such damage.
BESSY specifically disclaims any warranties, including, but not limited
to, the implied warranties of merchantability, fitness for a particular
purpose, and non-infringement. This software is provided on an "as is"
basis, and BESSY has no obligation to provide maintenance, support,
updates, enhancements, or modifications.
________________________________________________________________________
This software is in part copyrighted by the Deutsches Elektronen-Synchroton,
Member of the Helmholtz Association, (DESY), HAMBURG, GERMANY.
In no event shall DESY be liable to any party for direct, indirect,
special, incidental, or consequential damages arising out of the use of
this software, its documentation, or any derivatives thereof, even if
DESY has been advised of the possibility of such damage.
DESY specifically disclaims any warranties, including, but not limited
to, the implied warranties of merchantability, fitness for a particular
purpose, and non-infringement. This software is provided on an "as is"
basis, and DESY has no obligation to provide maintenance, support,
updates, enhancements, or modifications.
______________________________________________________________________
This software is in part copyrighted by the Brookhaven
National Laboratory (BNL).
In no event shall BNL be liable to any party for direct, indirect,
special, incidental, or consequential damages arising out of the use of
this software, its documentation, or any derivatives thereof, even if
BNL has been advised of the possibility of such damage.
BNL specifically disclaims any warranties, including, but not limited
to, the implied warranties of merchantability, fitness for a particular
purpose, and non-infringement. This software is provided on an "as is"
basis, and BNL has no obligation to provide maintenance, support,
updates, enhancements, or modifications.
________________________________________________________________________
This software is in part copyrighted by Diamond Light Source Limited (DLS)
In no event shall DLS be liable to any party for direct, indirect,
special, incidental, or consequential damages arising out of the use of
this software, its documentation, or any derivatives thereof, even if
DLS has been advised of the possibility of such damage.
DLS specifically disclaims any warranties, including, but not limited
to, the implied warranties of merchantability, fitness for a particular
purpose, and non-infringement. This software is provided on an "as is"
basis, and DLS has no obligation to provide maintenance, support,
updates, enhancements, or modifications.
________________________________________________________________________
These institutions specifically disclaim any warranties, including, but
not limited to, the implied warranties of merchantability, fitness for a
particular purpose, and non-infringement. This software is provided on
an "as is" basis, and these institutions have no obligation to provide
maintenance, support, updates, enhancements, or modifications.

4
README
View File

@@ -1,4 +0,0 @@
Since the Normative Types specification is not yet at Public Working Draft level,
any implementation must be considered alpha. The implementations of helpers under
this repo must be considered alpha level.

78
README.md Normal file
View File

@@ -0,0 +1,78 @@
normativeTypesCPP
=================
normativeTypesCPP is a C++ module containing helper classes which implement
and provide support for the EPICS V4 Normative Types.
The latter are a set of standard high-level data types to aid interoperability
of EPICS V4 applications and are specified in the
[NormativeTypes Specification](http://epics-pvdata.sourceforge.net/alpha/normativeTypes/normativeTypes.html).
Status
------
The current release (5.0) implements fully the
[16 Mar 2015 version](http://epics-pvdata.sourceforge.net/alpha/normativeTypes/normativeTypes_20150316.html)
of the Normative Types Specification.
The module status is alpha and the API and behaviour may change in future
versions.
The previous release (4.0) supported only 6 types.
There is no documentation yet for the new types added in 5.0.
Further Info
------------
Consult the documents in the documentation directory, in particular
* normativeTypesCPP.html
* RELEASE_NOTES.md
Also see the [EPICS Version 4 website](http://epics-pvdata.sourceforge.net)
Prerequisites
-------------
normativeTypesCPP requires recent versions of the following software:
1. EPICS Base (v3.14.12.3 or later)
2. EPICS4 pvCommonCPP (4.1.0 or later)
2. pvDataCPP (5.0.0 or later)
(pvCommonCPP may not be needed depending on host/compiler.)
Building
--------
Building uses the make utility and the EPICS base build system.
The build system needs the location of the prerequisites, e.g. by placing the
lines of the form
PVDATA = /home/install/epicsV4/pvDataCPP
PVCOMMON = /home/install/epicsV4/pvCommonCPP
EPICS_BASE = /home/install/epics/base
pointing to the locations in a file called RELEASE.local
in the configure directory or the parent directory of normativeTypesCPP.
With this in place, to build type make
make
To perform a clean build type
make clean uninstall
To run the unit tests type
make runtests
For more information on the EPICS build system consult the
[Application Development guide](http://www.aps.anl.gov/epics/base/R3-14/12-docs/AppDevGuide.pdf).

View File

@@ -29,9 +29,6 @@ USR_CPPFLAGS += --coverage
USR_LDFLAGS += --coverage
endif
INSTALL_INCLUDE = $(INSTALL_LOCATION)/include/pv
USR_INCLUDES += -I $(INSTALL_LOCATION)/include
-include $(TOP)/../CONFIG_SITE.local
-include $(TOP)/configure/CONFIG_SITE.local

View File

@@ -1,4 +1,113 @@
<h1>Release 4.0 IN DEVELOPMENT</h1>
<h1>Release 5.1.0</h1>
<p>The main changes since release 5.0 are:</p>
<ul>
<li>Linux shared library version added</li>
<li>Headers and source locations have changed</li>
<li>Missing is_a implementations added</li>
<li>NTAttribute::addTags() is now non-virtual</li>
<li>New license file replaces LICENSE and COPYRIGHT</li>
</ul>
<h2>Shared library version added</h2>
<p>Linux shared library version numbers have been added by setting SHRLIB_VERSION
(to 5.1 in this case). So shared object will be libnt.so.5.1 instead of
libpvData.so.</p>
<h2>Headers and source locations have changed</h2>
<p>Source has moved out of nt directory directly into src.</p>
<p>Headers have been moved into a pv directory. This facilitates using some IDEs
such as Qt Creator.</p>
<p>src/nt/ntscalar.cpp -> src/ntscalar.cpp
src/nt/ntscalar.h -> src/pv/ntscalar.h</p>
<h2>Missing is_a implementations added</h2>
<p>is_a(PVStructurePtr const &amp;) implementation has been added for each type.</p>
<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,110 @@
Release 4.0 IN DEVELOPMENT
Release 5.1.0
=============
The main changes since release 5.0 are:
* Linux shared library version added
* Headers and source locations have changed
* Missing is_a implementations added
* NTAttribute::addTags() is now non-virtual
* New license file replaces LICENSE and COPYRIGHT
Shared library version added
----------------------------
Linux shared library version numbers have been added by setting SHRLIB_VERSION
(to 5.1 in this case). So shared object will be libnt.so.5.1 instead of
libpvData.so.
Headers and source locations have changed
-----------------------------------------
Source has moved out of nt directory directly into src.
Headers have been moved into a pv directory. This facilitates using some IDEs
such as Qt Creator.
src/nt/ntscalar.cpp -> src/ntscalar.cpp
src/nt/ntscalar.h -> src/pv/ntscalar.h
Missing is_a implementations added
----------------------------------
is_a(PVStructurePtr const &) implementation has been added for each type.
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

@@ -34,24 +34,10 @@
<body>
<div class="head">
<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>
<h1>EPICS normativeTypesCPP</h1>
<h2 class="nocount">Release 5.1.0 - 2016.08.02</h2>
<dl>
<dt>Latest version:</dt>
<dd><a
href="ntCPP.html">ntCPP.html</a>
</dd>
<dt>This version:</dt>
<dd><a
href="ntCPP_20141009.html">ntCPP_20141009.html</a>
</dd>
<dt>Previous version:</dt>
<dd><a
href="ntCPP_20140919.html">ntCPP_20140919.html</a>
</dd>
<dt>Editors:</dt>
<dd> Marty Kraimer, BNL<br />
Matej Sekoranja, CosyLab<br />
@@ -80,7 +66,8 @@ 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 02-August-2016 version for the 5.1.0 release of the
C++ implementation of normativeTypes.
</p>
@@ -106,19 +93,42 @@ 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>
<dd>This has a value field that has type scalar.</dd>
<dt>NTScalarArray</dt>
<dd>This has a value field that has type scalarArray</dd>
<dd>This has a value field that has type scalarArray.</dd>
<dt>NTNameValue</dt>
<dd>This has a field name that is a string array
and a field value that has type scalarArray.
Each name[i] is associated with value[i].
</dd>
<dt>NTTable</dt>
<dd>This has a string array field named labels
For each label there is a scalar array field with name = label.
<dd>This has a number of scalar array fields representing the columns of
a table as well as a string array called containing representing column headers.
</dd>
<dt>NTMultiChannel</dt>
<dd>This has a value field that is a union array.
@@ -128,6 +138,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
@@ -230,20 +243,20 @@ structure parent
<p>An alarm structure is used to report alarms and other problems to the client.
An alarm may be associated with a value field or can be used by a server
to report problems to the client.
An alarm attached to a substructure of the top level structure is normally
An alarm attached to a substructure of the top-level structure is normally
associated with a value field.
An alarm field attached to the top level structure can be used for either:
An alarm field attached to the top-level structure can be used for either:
</p>
<ol>
<li>If the top level structure has a value field then it is an alarm
<li>If the top-level structure has a value field then it is an alarm
for that field.
</li>
<li>To report other problems to the client.</li>
</ol>
<p>If alarms do appear at multiple levels then an alarm is always
provided at the top level.
provided at the top-level.
It uses "maximize severity" to report the highest level severity
of all alarms, i.e. the top level severity is the maximum severity
of all alarms, i.e. the top-level severity is the maximum severity
of all the alarms.</p>
<p>An example is:</p>
<pre>
@@ -260,7 +273,7 @@ structure top
structure alarm
</pre>
<p>In this example power, voltage, and current all have an associated alarm.
The top level alarm would have a severity that matches the highest level
The top-level alarm would have a severity that matches the highest level
severity of power, voltage, an current.</p>
<p>A alarm structure has the following fields:</p>
@@ -289,15 +302,15 @@ a the data for a value field was collected.
There can be multiple timeStamp fields.
A timeStamp associated with a substructure is usually associated with
a value field.
An timeStamp field attached to the top level structure can be used for either:
An timeStamp field attached to the top-level structure can be used for either:
</p>
<ol>
<li>If the top level structure has a value field then it can be the
<li>If the top-level structure has a value field then it can be the
timeStamp for that field.
</li>
<li>The time when the server executed.</li>
</ol>
<p>NTNDArray is an example that has two top level timeStamp field with different
<p>NTNDArray is an example that has two top-level timeStamp fields with different
field names because it wants to report both.</p>
<p>A timeStamp structure has the following fields:</p>
@@ -374,19 +387,19 @@ structure
<p><b>NOTE:</b> NTField, described above, has support for checking to see if
a structure is an alarmLimit structure but no other support for alarmLimit.</p>
<p>
PVData has support named <b>valueAlarm</b> instead of <b>alarmLimit</b>
pvData has support named <b>valueAlarm</b> instead of <b>alarmLimit</b>
(alarmLimit is identical to valueAlarm for type double).
For numeric types the field names are the same but the type
for lowAlarmLimit, lowWarningLimit, highWarningLimit, and highAlarmLimit
is based on the scalarType.
PVData also defines valueAlarm for a scalar boolean value field
pvData also defines valueAlarm for a scalar boolean value field
and for an enumerated structure.
For these completely different field names are defined.
valueAlarm is more for use by servers than for clients.
Thus normative types only defines alarmLimit since this is what
clients like plot tools use.
If the valueAlarm fields, including alarmLimit, are desired than the standardField support from
PVData can be used to generate a valueAlarm field as an extra field.
pvData can be used to generate a valueAlarm field as an extra field.
</p>
<h2>Normative Type Common Features</h2>
@@ -479,26 +492,26 @@ where
<dd>This determines the scalar type for the value field.
This must be specified or createStructure will throw an exception.</dd>
<dt>addDescriptor</dt>
<dd>Add optional field descriptor</dd>
<dd>Add optional field descriptor.</dd>
<dt>addAlarm</dt>
<dd>Add optional field alarm</dd>
<dd>Add optional field alarm.</dd>
<dt>addTimeStamp</dt>
<dd>Add optional field timeStamp</dd>
<dd>Add optional field timeStamp.</dd>
<dt>addDisplay</dt>
<dd>Add optional field display</dd>
<dd>Add optional field display.</dd>
<dt>addControl</dt>
<dd>Add optional field control</dd>
<dd>Add optional field control.</dd>
<dt>createStructure</dt>
<dd>Create a introspection instance.</dd>
<dd>Create an introspection instance.</dd>
<dt>createPVStructure</dt>
<dd>Create the data instance.</dd>
<dt>create</dt>
<dd>create an PVScalar instance.</dd>
<dd>create a PVScalar instance.</dd>
<dt>add</dt>
<dd>Add an extra field. As many fields as desired can be added but each must have
a unique name that is not the name of any mandatory or possible optional field.</dd>
</dl>
<p>An NTScalaBuilder can be used to create multiple PVStructure and/or NTScalar instances.
<p>An NTScalarBuilder can be used to create multiple PVStructure and/or NTScalar instances.
Each time createPVScalar is called it clears all internal data after the PVStructure
is created.</p>
<h4>NTScalarBuilder Examples</h4>
@@ -540,7 +553,7 @@ public:
static shared_pointer wrap(PVStructurePtr const &amp; structure);
static shared_pointer wrapUnsafe(PVStructurePtr const &amp; structure);
static bool is_a(StructureConstPtr const &amp; structure);
static bool isComparible(PVStructurePtr const &amp;pvStructure);
static bool isCompatible(PVStructurePtr const &amp;pvStructure);
static NTScalarBuilderPtr createBuilder();
bool attachTimeStamp(PVTimeStamp &amp;pvTimeStamp) const;
@@ -561,19 +574,19 @@ private:
where
<dl>
<dt>wrap</dt>
<dd>Given a pvStructure this creates an NTScalar that warps it.
<dd>Given a PVStructure this creates an NTScalar that wraps it.
It calls <b>isCompatible</b>.
It returns a null PVScalar if <b>isCompatible</b> returns false.
<br />
The primary use of wrap is by pvAccess client code.
The server creates a pvStructure that is valid for an NTScalar
The server creates a PVStructure that is valid for an NTScalar
and passes it to the client.
The client can call wrap to create an NTScalar for it's own use.
An example is:
<pre>
void myCallback(PVStructurePtr const &amp; pvStructure)
void myCallback(PVStructurePtr const &amp; PVStructure)
{
NTScalarPtr ntscalar = NTScalar::wrap(pvStructure);
NTScalarPtr ntscalar = NTScalar::wrap(PVStructure);
if(!ntscalar) {
// not a valid NTScalar
}
@@ -582,20 +595,20 @@ void myCallback(PVStructurePtr const &amp; pvStructure)
</pre>
</dd>
<dt>wrapUnsafe</dt>
<dd>Given a pvStructure this creates an NTScalar that warps it.
<dd>Given a PVStructure this creates an NTScalar that wraps it.
It does not check that the introspection interface is compatible.
This method is dangerous.</dd>
<dt>is_a</dt>
<dd>This method checks to see if the structure has an ID that is
correct for NTScalar.</dd>
<dt>isComparible</dt>
<dd>This method checks to see if the pvStructure has appropriate
<dt>isCompatible</dt>
<dd>This method checks to see if the PVStructure has appropriate
fields to be an NTScalar.
</dd>
<dt>createBuilder</dt>
<dd>This method creates an NTScalarBuilder.</dd>
<dt>attachTimeStamp</dt>
<dd>The timeStamp field of the NTScalar is attached to the pvTimeStamp.
<dd>The timeStamp field of the NTScalar is attached to pvTimeStamp.
<br />
An example is:
<pre>
@@ -610,7 +623,7 @@ double diff = TimeStamp::diff(timeStamp,current); // timeStamp - current
</pre>
</dd>
<dt>attachAlarm</dt>
<dd>The alarm field of the NTScalar is attached to the pvAlarm.
<dd>The alarm field of the NTScalar is attached to pvAlarm.
If alarm is not selected as an optional field false is returned.
If this is successful then the pvAlarm can be used to access that alarm
fields.<br />
@@ -627,36 +640,36 @@ string message = alarm.getMessage();
</pre>
</dd>
<dt>attachDisplay</dt>
<dd>The display field of the NTScalar is attached to the pvDisplay.
<dd>The display field of the NTScalar is attached to pvDisplay.
Used similar to attachAlarm.
</dd>
<dt>attachControl</dt>
<dd>The control field of the NTScalar is attached to the pvControl.
<dd>The control field of the NTScalar is attached to pvControl.
Used similar to attachAlarm.
</dd>
<dt>getPVStructure</dt>
<dd>Returns the pvStructure that NTScalar wraps.</dd>
<dd>Returns the PVStructure that NTScalar wraps.</dd>
<dt>getDescriptor</dt>
<dd>Get the descriptor.</dd>
<dt>getTimeStamp</dt>
<dd>Returns the top level timeStamp.
<dd>Returns the top-level timeStamp.
If the timeStamp was not selected as an optional field
a null pvStructure is returned.
a null PVStructure is returned.
</dd>
<dt>getAlarm</dt>
<dd>Returns the top level alarm.
<dd>Returns the top-level alarm.
If the alarm was not selected as an optional field
a null pvStructure is returned.
a null PVStructure is returned.
</dd>
<dt>getDisplay</dt>
<dd>Returns the top level display.
<dd>Returns the top-level display.
If the display was not selected as an optional field
a null pvStructure is returned.
a null PVStructure is returned.
</dd>
<dt>getControl</dt>
<dd>Returns the top level control.
<dd>Returns the top-level control.
If the control was not selected as an optional field
a null pvStructure is returned.
a null PVStructure is returned.
</dd>
<dt>getValue</dt>
<dd>Returns the value field.</dd>
@@ -721,21 +734,21 @@ where
<dd>This determines the element type for the value field.
This must be specified or createStructure will throw an exception.</dd>
<dt>addDescriptor</dt>
<dd>Add optional field descriptor</dd>
<dd>Add optional field descriptor.</dd>
<dt>addAlarm</dt>
<dd>Add optional field alarm</dd>
<dd>Add optional field alarm.</dd>
<dt>addTimeStamp</dt>
<dd>Add optional field timeStamp</dd>
<dd>Add optional field timeStamp.</dd>
<dt>addDisplay</dt>
<dd>Add optional field display</dd>
<dd>Add optional field display.</dd>
<dt>addControl</dt>
<dd>Add optional field control</dd>
<dd>Add optional field control.</dd>
<dt>createStructure</dt>
<dd>Create a introspection instance.</dd>
<dd>Create an introspection instance.</dd>
<dt>createPVStructure</dt>
<dd>Create the data instance.</dd>
<dt>create</dt>
<dd>create an PVScalar instance.</dd>
<dd>create a PVScalar instance.</dd>
<dt>add</dt>
<dd>Add an extra field. As many fields as desired can be added but each must have
a unique name that is not the name of any mandatory or possible optional field.</dd>
@@ -754,7 +767,7 @@ public:
static shared_pointer wrap(PVStructurePtr const &amp; structure);
static shared_pointer wrapUnsafe(PVStructurePtr const &amp; structure);
static bool is_a(StructureConstPtr const &amp; structure);
static bool isComparible(PVStructurePtr const &amp;pvStructure);
static bool isCompatible(PVStructurePtr const &amp;pvStructure);
static NTScalarArrayBuilderPtr createBuilder();
bool attachTimeStamp(PVTimeStamp &amp;pvTimeStamp) const;
@@ -775,62 +788,62 @@ private:
where
<dl>
<dt>wrap</dt>
<dd>Given a pvStructure this creates an NTScalarArray that warps it.
It calls <b>isCompatible</b> returns a null PVScalarArray if <b>isCompatible</b> returns false.
<dd>Given a PVStructure this creates an NTScalarArray that wraps it.
It calls <b>isCompatible</b> and returns a null PVScalarArray if <b>isCompatible</b> returns false.
</dd>
<dt>wrapUnsafe</dt>
<dd>Given a pvStructure this creates an NTScalarArray that warps it.
<dd>Given a PVStructure this creates an NTScalarArray that wraps it.
It does not check that the introspection interface is compatible.
This method is dangerous.</dd>
<dt>is_a</dt>
<dd>This method checks to see if the structure has an ID that is
correct for NTScalarArray.</dd>
<dt>isComparible</dt>
<dd>This method checks to see if the pvStructure has appropriate
<dt>isCompatible</dt>
<dd>This method checks to see if the PVStructure has appropriate
fields to be an NTScalarArray.
</dd>
<dt>createBuilder</dt>
<dd>This method creates a NTScalarArrayBuilder.</dd>
<dt>attachTimeStamp</dt>
<dd>The timeStamp field of the NTScalarArray is attached to the pvTimeStamp.
<dd>The timeStamp field of the NTScalarArray is attached to pvTimeStamp.
</dd>
<dt>attachAlarm</dt>
<dd>The alarm field of the NTScalarArray is attached to the pvAlarm.
<dd>The alarm field of the NTScalarArray is attached to pvAlarm.
If alarm is not selected as an optional field false is returned.
If this is successful then the pvAlarm can be used to access that alarm
fields.
</dd>
<dt>attachDisplay</dt>
<dd>The display field of the NTScalarArray is attached to the pvDisplay.
<dd>The display field of the NTScalarArray is attached to pvDisplay.
Used similar to attachAlarm.
</dd>
<dt>attachControl</dt>
<dd>The control field of the NTScalarArray is attached to the pvControl.
<dd>The control field of the NTScalarArray is attached to pvControl.
Used similar to attachAlarm.
</dd>
<dt>getPVStructure</dt>
<dd>Returns the pvStructure that NTScalarArray wraps.</dd>
<dd>Returns the PVStructure that NTScalarArray wraps.</dd>
<dt>getDescriptor</dt>
<dd>Get the descriptor.</dd>
<dt>getTimeStamp</dt>
<dd>Returns the top level timeStamp.
<dd>Returns the top-level timeStamp.
If the timeStamp was not selected as an optional field
a null pvStructure is returned.
a null PVStructure is returned.
</dd>
<dt>getAlarm</dt>
<dd>Returns the top level alarm.
<dd>Returns the top-level alarm.
If the alarm was not selected as an optional field
a null pvStructure is returned.
a null PVStructure is returned.
</dd>
<dt>getDisplay</dt>
<dd>Returns the top level display.
<dd>Returns the top-level display.
If the display was not selected as an optional field
a null pvStructure is returned.
a null PVStructure is returned.
</dd>
<dt>getControl</dt>
<dd>Returns the top level control.
<dd>Returns the top-level control.
If the control was not selected as an optional field
a null pvStructure is returned.
a null PVStructure is returned.
</dd>
<dt>getValue</dt>
<dd>Returns the value field.</dd>
@@ -883,17 +896,17 @@ where
<dd>This determines the element type for the value field.
This must be specified or createStructure will throw an exception.</dd>
<dt>addDescriptor</dt>
<dd>Add optional field descriptor</dd>
<dd>Add optional field descriptor.</dd>
<dt>addAlarm</dt>
<dd>Add optional field alarm</dd>
<dd>Add optional field alarm.</dd>
<dt>addTimeStamp</dt>
<dd>Add optional field timeStamp</dd>
<dd>Add optional field timeStamp.</dd>
<dt>createStructure</dt>
<dd>Create a introspection instance.</dd>
<dd>Create an introspection instance.</dd>
<dt>createPVStructure</dt>
<dd>Create the data instance.</dd>
<dt>create</dt>
<dd>create an PVScalar instance.</dd>
<dd>create a PVScalar instance.</dd>
<dt>add</dt>
<dd>Add an extra field. As many fields as desired can be added but each must have
a unique name that is not the name of any mandatory or possible optional field.</dd>
@@ -912,7 +925,7 @@ public:
static shared_pointer wrap(PVStructurePtr const &amp; structure);
static shared_pointer wrapUnsafe(PVStructurePtr const &amp; structure);
static bool is_a(StructureConstPtr const &amp; structure);
static bool isComparible(PVStructurePtr const &amp;pvStructure);
static bool isCompatible(PVStructurePtr const &amp;pvStructure);
static NTNameValueBuilderPtr createBuilder();
bool attachTimeStamp(PVTimeStamp &amp;pvTimeStamp) const;
@@ -931,44 +944,44 @@ private:
where
<dl>
<dt>wrap</dt>
<dd>Given a pvStructure this creates an NTNameValue that warps it.
It calls <b>isCompatible</b> returns a null NTNameValue if <b>isCompatible</b> returns false.
<dd>Given a PVStructure this creates an NTNameValue that wraps it.
It calls <b>isCompatible</b> and returns a null NTNameValue if <b>isCompatible</b> returns false.
</dd>
<dt>wrapUnsafe</dt>
<dd>Given a pvStructure this creates an NTNameValue that warps it.
<dd>Given a PVStructure this creates an NTNameValue that wraps it.
It does not check that the introspection interface is compatible.
This method is dangerous.</dd>
<dt>is_a</dt>
<dd>This method checks to see if the structure has an ID that is
correct for NTNameValue.</dd>
<dt>isComparible</dt>
<dd>This method checks to see if the pvStructure has appropriate
<dt>isCompatible</dt>
<dd>This method checks to see if the PVStructure has appropriate
fields to be an NTNameValue.
</dd>
<dt>createBuilder</dt>
<dd>This method creates an NTNameValueBuilder.</dd>
<dt>attachTimeStamp</dt>
<dd>The timeStamp field of the NTNameValue is attached to the pvTimeStamp.
<dd>The timeStamp field of the NTNameValue is attached to pvTimeStamp.
</dd>
<dt>attachAlarm</dt>
<dd>The alarm field of the NTNameValue is attached to the pvAlarm.
<dd>The alarm field of the NTNameValue is attached to pvAlarm.
If alarm is not selected as an optional field false is returned.
If this is successful then the pvAlarm can be used to access that alarm
fields.
</dd>
<dt>getPVStructure</dt>
<dd>Returns the pvStructure that NTNameValue wraps.</dd>
<dd>Returns the PVStructure that NTNameValue wraps.</dd>
<dt>getDescriptor</dt>
<dd>Get the descriptor.</dd>
<dt>getTimeStamp</dt>
<dd>Returns the top level timeStamp.
<dd>Returns the top-level timeStamp.
If the timeStamp was not selected as an optional field
a null pvStructure is returned.
a null PVStructure is returned.
</dd>
<dt>getAlarm</dt>
<dd>Returns the top level alarm.
<dd>Returns the top-level alarm.
If the alarm was not selected as an optional field
a null pvStructure is returned.
a null PVStructure is returned.
</dd>
<dt>getName</dt>
<dd>Returns field name.</dd>
@@ -981,9 +994,9 @@ where
epics:nt/NTTable:1.0
string[] labels [column0,column1,column2] // mandatory
structure value // mandatory
double[] column0 [] // name=labels[0]; can be any scalar type
string[] column1 [] // name=labels[1]; can be any scalar type
int[] column2 [] // name=labels[2]; can be any scalar type
double[] column0 [] // can be any scalar type
string[] column1 [] // can be any scalar type
int[] column2 [] // can be any scalar type
string descriptor // optional
alarm_t alarm // optional
int severity
@@ -1006,7 +1019,7 @@ class NTTableBuilder
{
public:
POINTER_DEFINITIONS(NTTableBuilder);
shared_pointer add(string const &amp; name,ScalarType scalarType);
shared_pointer addColumn(string const &amp; name,ScalarType scalarType);
shared_pointer addDescriptor();
shared_pointer addAlarm();
shared_pointer addTimeStamp();
@@ -1021,20 +1034,20 @@ private:
</pre>
where
<dl>
<dt>add</dt>
<dt>addColumn</dt>
<dd>This is the name and elementType for the next column</dd>
<dt>addDescriptor</dt>
<dd>Add optional field descriptor</dd>
<dd>Add optional field descriptor.</dd>
<dt>addAlarm</dt>
<dd>Add optional field alarm</dd>
<dd>Add optional field alarm.</dd>
<dt>addTimeStamp</dt>
<dd>Add optional field timeStamp</dd>
<dd>Add optional field timeStamp.</dd>
<dt>createStructure</dt>
<dd>Create a introspection instance.</dd>
<dd>Create an introspection instance.</dd>
<dt>createPVStructure</dt>
<dd>Create the data instance.</dd>
<dt>create</dt>
<dd>create an PVScalar instance.</dd>
<dd>create a PVScalar instance.</dd>
<dt>add</dt>
<dd>Add an extra field. As many fields as desired can be added but each must have
a unique name that is not the name of any mandatory or possible optional field.</dd>
@@ -1052,7 +1065,7 @@ public:
static shared_pointer wrap(PVStructurePtr const &amp; structure);
static shared_pointer wrapUnsafe(PVStructurePtr const &amp; structure);
static bool is_a(StructureConstPtr const &amp; structure);
static bool isComparible(PVStructurePtr const &amp;pvStructure);
static bool isCompatible(PVStructurePtr const &amp;pvStructure);
static NTTableBuilderPtr createBuilder();
bool attachTimeStamp(PVTimeStamp &amp;pvTimeStamp) const;
@@ -1071,44 +1084,44 @@ private:
where
<dl>
<dt>wrap</dt>
<dd>Given a pvStructure this creates an NTTable that warps it.
It calls <b>isCompatible</b> returns a null NTTable if <b>isCompatible</b> returns false.
<dd>Given a PVStructure this creates an NTTable that wraps it.
It calls <b>isCompatible</b> and returns a null NTTable if <b>isCompatible</b> returns false.
</dd>
<dt>wrapUnsafe</dt>
<dd>Given a pvStructure this creates an NTTable that warps it.
<dd>Given a PVStructure this creates an NTTable that wraps it.
It does not check that the introspection interface is compatible.
This method is dangerous.</dd>
<dt>is_a</dt>
<dd>This method checks to see if the structure has an ID that is
correct for NTTable.</dd>
<dt>isComparible</dt>
<dd>This method checks to see if the pvStructure has appropriate
<dt>isCompatible</dt>
<dd>This method checks to see if the PVStructure has appropriate
fields to be an NTTable.
</dd>
<dt>createBuilder</dt>
<dd>This method creates an NTTableBuilder.</dd>
<dt>attachTimeStamp</dt>
<dd>The timeStamp field of the NTTable is attached to the pvTimeStamp.
<dd>The timeStamp field of the NTTable is attached to pvTimeStamp.
</dd>
<dt>attachAlarm</dt>
<dd>The alarm field of the NTTable is attached to the pvAlarm.
<dd>The alarm field of the NTTable is attached to pvAlarm.
If alarm is not selected as an optional field false is returned.
If this is successful then the pvAlarm can be used to access that alarm
fields.
</dd>
<dt>getPVStructure</dt>
<dd>Returns the pvStructure that NTTable wraps.</dd>
<dd>Returns the PVStructure that NTTable wraps.</dd>
<dt>getDescriptor</dt>
<dd>Get the descriptor.</dd>
<dt>getTimeStamp</dt>
<dd>Returns the top level timeStamp.
<dd>Returns the top-level timeStamp.
If the timeStamp was not selected as an optional field
a null pvStructure is returned.
a null PVStructure is returned.
</dd>
<dt>getAlarm</dt>
<dd>Returns the top level alarm.
<dd>Returns the top-level alarm.
If the alarm was not selected as an optional field
a null pvStructure is returned.
a null PVStructure is returned.
</dd>
<dt>getLabels</dt>
<dd>Returns the labels field.</dd>
@@ -1166,11 +1179,11 @@ where
If not specified the type will be a variant union.
</dd>
<dt>addDescriptor</dt>
<dd>Add optional field descriptor</dd>
<dd>Add optional field descriptor.</dd>
<dt>addAlarm</dt>
<dd>Add optional field alarm</dd>
<dd>Add optional field alarm.</dd>
<dt>addTimeStamp</dt>
<dd>Add optional field timeStamp</dd>
<dd>Add optional field timeStamp.</dd>
<dt>addSeverity</dt>
<dd>Add a field that has the alarm severity for each channel.</dd>
<dt>addStatus</dt>
@@ -1184,11 +1197,11 @@ where
<dt>addUserTag</dt>
<dd>Add a field that has the userTag for each channel.</dd>
<dt>createStructure</dt>
<dd>Create a introspection instance.</dd>
<dd>Create an introspection instance.</dd>
<dt>createPVStructure</dt>
<dd>Create the data instance.</dd>
<dt>create</dt>
<dd>create an PVScalar instance.</dd>
<dd>create a PVScalar instance.</dd>
<dt>add</dt>
<dd>Add an extra field. As many fields as desired can be added but each must have
a unique name that is not the name of any mandatory or possible optional field.</dd>
@@ -1206,7 +1219,7 @@ public:
static shared_pointer wrap(PVStructurePtr const &amp; structure);
static shared_pointer wrapUnsafe(PVStructurePtr const &amp; structure);
static bool is_a(StructureConstPtr const &amp; structure);
static bool isComparible(PVStructurePtr const &amp;pvStructure);
static bool isCompatible(PVStructurePtr const &amp;pvStructure);
static NTMultiChannelBuilderPtr createBuilder();
bool attachTimeStamp(PVTimeStamp &amp;pvTimeStamp) const;
@@ -1230,44 +1243,44 @@ private:
where
<dl>
<dt>wrap</dt>
<dd>Given a pvStructure this creates an NTMultiChannel that warps it.
It calls <b>isCompatible</b> returns a null NTMultiChannel if <b>isCompatible</b> returns false.
<dd>Given a PVStructure this creates an NTMultiChannel that wraps it.
It calls <b>isCompatible</b> and returns a null NTMultiChannel if <b>isCompatible</b> returns false.
</dd>
<dt>wrapUnsafe</dt>
<dd>Given a pvStructure this creates an NTMultiChannel that warps it.
<dd>Given a PVStructure this creates an NTMultiChannel that wraps it.
It does not check that the introspection interface is compatible.
This method is dangerous.</dd>
<dt>is_a</dt>
<dd>This method checks to see if the structure has an ID that is
correct for NTMultiChannel.</dd>
<dt>isComparible</dt>
<dd>This method checks to see if the pvStructure has appropriate
<dt>isCompatible</dt>
<dd>This method checks to see if the PVStructure has appropriate
fields to be an NTMultiChannel.
</dd>
<dt>createBuilder</dt>
<dd>This method creates an NTMultiChannelBuilder.</dd>
<dt>attachTimeStamp</dt>
<dd>The timeStamp field of the NTMultiChannel is attached to the pvTimeStamp.
<dd>The timeStamp field of the NTMultiChannel is attached to pvTimeStamp.
</dd>
<dt>attachAlarm</dt>
<dd>The alarm field of the NTMultiChannel is attached to the pvAlarm.
<dd>The alarm field of the NTMultiChannel is attached to pvAlarm.
If alarm is not selected as an optional field false is returned.
If this is successful then the pvAlarm can be used to access that alarm
fields.
</dd>
<dt>getPVStructure</dt>
<dd>Returns the pvStructure that NTMultiChannel wraps.</dd>
<dd>Returns the PVStructure that NTMultiChannel wraps.</dd>
<dt>getDescriptor</dt>
<dd>Get the descriptor.</dd>
<dt>getTimeStamp</dt>
<dd>Returns the top level timeStamp.
<dd>Returns the top-level timeStamp.
If the timeStamp was not selected as an optional field
a null pvStructure is returned.
a null PVStructure is returned.
</dd>
<dt>getAlarm</dt>
<dd>Returns the top level alarm.
<dd>Returns the top-level alarm.
If the alarm was not selected as an optional field
a null pvStructure is returned.
a null PVStructure is returned.
</dd>
<dt>getValue</dt>
<dd>Returns the value field.</dd>
@@ -1362,19 +1375,19 @@ private:
where
<dl>
<dt>addDescriptor</dt>
<dd>Add optional field descriptor</dd>
<dd>Add optional field descriptor.</dd>
<dt>addAlarm</dt>
<dd>Add optional field alarm</dd>
<dd>Add optional field alarm.</dd>
<dt>addTimeStamp</dt>
<dd>Add optional field timeStamp</dd>
<dd>Add optional field timeStamp.</dd>
<dt>addDisplay</dt>
<dd>Add optional field display</dd>
<dd>Add optional field display.</dd>
<dt>createStructure</dt>
<dd>Create a introspection instance.</dd>
<dd>Create an introspection instance.</dd>
<dt>createPVStructure</dt>
<dd>Create the data instance.</dd>
<dt>create</dt>
<dd>create an PVScalar instance.</dd>
<dd>create a PVScalar instance.</dd>
<dt>add</dt>
<dd>Add an extra field. As many fields as desired can be added but each must have
a unique name that is not the name of any mandatory or possible optional field.</dd>
@@ -1392,7 +1405,7 @@ public:
static shared_pointer wrap(PVStructurePtr const &amp; structure);
static shared_pointer wrapUnsafe(PVStructurePtr const &amp; structure);
static bool is_a(StructureConstPtr const &amp; structure);
static bool isComparible(PVStructurePtr const &amp;pvStructure);
static bool isCompatible(PVStructurePtr const &amp;pvStructure);
static NTNDArrayBuilderPtr createBuilder();
PVStringPtr getDescriptor() const;
@@ -1418,36 +1431,36 @@ private:
where
<dl>
<dt>wrap</dt>
<dd>Given a pvStructure this creates an NTNDArray that warps it.
It calls <b>isCompatible</b> returns a null NTNDArray if <b>isCompatible</b> returns false.
<dd>Given a PVStructure this creates an NTNDArray that wraps it.
It calls <b>isCompatible</b> and returns a null NTNDArray if <b>isCompatible</b> returns false.
</dd>
<dt>wrapUnsafe</dt>
<dd>Given a pvStructure this creates an NTNDArray that warps it.
<dd>Given a PVStructure this creates an NTNDArray that wraps it.
It does not check that the introspection interface is compatible.
This method is dangerous.</dd>
<dt>is_a</dt>
<dd>This method checks to see if the structure has an ID that is
correct for NTNDArray.</dd>
<dt>isComparible</dt>
<dd>This method checks to see if the pvStructure has appropriate
<dt>isCompatible</dt>
<dd>This method checks to see if the PVStructure has appropriate
fields to be an NTNDArray.
</dd>
<dt>createBuilder</dt>
<dd>This method creates an NTNDArrayBuilder.</dd>
<dt>attachTimeStamp</dt>
<dd>The timeStamp field of the NTNDArray is attached to the pvTimeStamp.
<dd>The timeStamp field of the NTNDArray is attached to pvTimeStamp.
</dd>
<dt>attachDataTimeStamp</dt>
<dd>The dataTimeStamp field of the NTNDArray is attached to the pvTimeStamp.
<dd>The dataTimeStamp field of the NTNDArray is attached to pvTimeStamp.
</dd>
<dt>attachAlarm</dt>
<dd>The alarm field of the NTNDArray is attached to the pvAlarm.
<dd>The alarm field of the NTNDArray is attached to pvAlarm.
If alarm is not selected as an optional field false is returned.
If this is successful then the pvAlarm can be used to access that alarm
fields.
</dd>
<dt>getPVStructure</dt>
<dd>Returns the pvStructure that NTNDArray wraps.</dd>
<dd>Returns the PVStructure that NTNDArray wraps.</dd>
<dt>getValue</dt>
<dd>Returns the value field.</dd>
<dt>getCodec</dt>
@@ -1468,19 +1481,19 @@ where
<dt>getDescriptor</dt>
<dd>Get the descriptor.</dd>
<dt>getTimeStamp</dt>
<dd>Returns the top level timeStamp.
<dd>Returns the top-level timeStamp.
If the timeStamp was not selected as an optional field
a null pvStructure is returned.
a null PVStructure is returned.
</dd>
<dt>getAlarm</dt>
<dd>Returns the top level alarm.
<dd>Returns the top-level alarm.
If the alarm was not selected as an optional field
a null pvStructure is returned.
a null PVStructure is returned.
</dd>
<dt>getDisplay</dt>
<dd>Returns the top level display.
<dd>Returns the top-level display.
If the display was not selected as an optional field
a null pvStructure is returned.
a null PVStructure is returned.
</dd>
</dl>

View File

@@ -1,289 +0,0 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<title>EPICS pvDataCPP</title>
<link rel="stylesheet" type="text/css"
href="http://epics-pvdata.sourceforge.net/base.css" />
<link rel="stylesheet" type="text/css"
href="http://epics-pvdata.sourceforge.net/epicsv4.css" />
<style type="text/css">
/*<![CDATA[*/
.about { margin-left: 3em; margin-right: 3em; font-size: .83em}
table { margin-left: auto; margin-right: auto }
.diagram { text-align: center; margin: 2.5em 0 }
span.opt { color: grey }
span.nterm { font-style:italic }
span.term { font-family:courier }
span.user { font-family:courier }
span.user:before { content:"<" }
span.user:after { content:">" }
.nonnorm { font-style:italic }
p.ed { color: #AA0000 }
span.ed { color: #AA0000 }
p.ed.priv { display: inline; }
span.ed.priv { display: inline; }
/*]]>*/</style>
<!-- Script that generates the Table of Contents -->
<script type="text/javascript"
src="http://epics-pvdata.sourceforge.net/script/tocgen.js">
</script>
</head>
<body>
<div class="head">
<h1>EPICS pvDataCPP</h1>
<!-- Maturity: Working Draft or Request for Comments, or Recommendation, and date. -->
<h2 class="nocount">EPICS v4 Working Group, Working Draft, 23-July-2014</h2>
<dl>
<dt>Latest version:</dt>
<dd><a
href="ntCPP.html">ntCPP.html</a>
</dd>
<dt>This version:</dt>
<dd><a
href="ntCPP_20140723.html">ntCPP_20140723.html</a>
</dd>
<dt>Previous version:</dt>
<dd>None</dd>
<dt>Editors:</dt>
<dd>Marty Kraimer, BNL</dd>
<dd>Michael Davidsaver, BNL</dd>
<dd>Matej Sekoranja, CosyLab</dd>
</dl>
<p class="copyright">This product is made available subject to acceptance of the <a
href="http://epics-pvdata.sourceforge.net/LICENSE.html">EPICS open source
license.</a></p>
<hr />
</div>
<h2 class="nocount">Abstract</h2>
<p>EPICS Version 4 provides efficient
storage, access, and communication, of memory resident structured data.
pvData is the storage compoment.
pvDataCPP is the C++ implementation of pvData.
It is one part of the set of related products in the EPICS
V4 control system programming environment:<br />
<a href="http://epics-pvdata.sourceforge.net/relatedDocumentsV4.html">relatedDocumentsV4.html</a>
</p>
<h2 class="nocount">Status of this Document</h2>
<p>For now this is a working copy so it is not the same as "This version" shown above.</p>
<p>This is the 23-July-2014 version of the C++ implementation of pvData.
</p>
<p>RELEASE_NOTES.md provides changes since the last release.
TODO.md describes things to do before the next release.
</p>
<div id="toc">
<h2 class="nocount" style="page-break-before: always">Table of Contents</h2>
</div>
<div id="contents" class="contents">
<body>
<h1 style="text-align: center">EPICS normative type C++ implementation
</h1>
<h2 class="nocount" id="L50">Draft, 4-Nov-2012</h2>
<dl>
<dt>This version:</dt>
<dd><a href="http://epics-pvdata.hg.sourceforge.net/hgweb/epics-pvdata/normativeTypesCPP/raw-file/tip/documentation/ntCPP.html">ntCPP.html</a></dd>
<dt>Editors:</dt>
<dd>Matej Sekoranja, CosyLab<br>
Marty Kraimer, BNL
</dd>
</dl>
<hr />
</div>
<h2>Introduction</h2>
<p>This section describes the C++ implemmentation of normative types. Two (2) helper classes are implemented,
ntNameValue and NTTable respectively. </p>
<h3>Normative Type Fields.</h3>
<p>These are helper classes for creating standard fields for normative types.
There is a single instance of this class, which is obtained via NTField::get().
</p>
<pre>class NTField: NoDefaultMethods {
public:
static NTFieldPtr get();
~NTField() {}
PVStructurePtr createEnumerated(StringArray const &amp; choices);
PVStructurePtr createTimeStamp();
PVStructurePtr createAlarm();
PVStructurePtr createDisplay();
PVStructurePtr createAlarmLimit();
PVStructurePtr createControl();
PVStructureArrayPtr createEnumeratedArray();
PVStructureArrayPtr createTimeStampArray();
PVStructureArrayPtr createAlarmArray();
};</pre>
<p>where</p>
<dl>
<dt>createEnumerated</dt>
<dd>Create an introspection interface for an enumerated structure.</dd>
<dt>createTimeStamp</dt>
<dd>Create an interspection interface for a timeStamp structure.</dd>
<dt>createAlarm</dt>
<dd>Create an interspection interface for an alarm structure.</dd>
<dt>createDisplay</dt>
<dd>Create an introsepecion interface for a display structure.</dd>
<dt>createAlarmLimit</dt>
<dd>Create an introspection interface for an alarm limit structure.</dd>
<dt>createControl</dt>
<dd>Create an introspection interface for a control structure.</dd>
<dt>createEnumeratedArray</dt>
<dd>Create an introspection interface for an structureArray of enumerated
structures.</dd>
<dt>createTimeStampArray</dt>
<dd>Create an introspection interface for an structureArray of timeStamp
structures.</dd>
<dt>createAlarmArray</dt>
<dd>Create an introspection interface for an structureArray of alarm
structures.</dd>
</dl>
<h3>NTNameValue</h3>
<p>These are helper classes for NTNameValue</p>
<pre>class NTNameValue : private NoDefaultMethods
{
public:
static bool isNTNameValue(PVStructurePtr const & pvStructure);
static NTNameValuePtr create(
bool hasFunction,bool hasTimeStamp, bool hasAlarm);
static NTNameValuePtr create(
PVStructurePtr const & pvStructure);
~NTNameValue();
PVStringPtr getFunction();
void attachTimeStamp(PVTimeStamp &amp;pvTimeStamp);
void attachAlarm(PVAlarm &amp;pvAlarm);
PVStructurePtr getPVStructure();
PVStructurePtr getTimeStamp();
PVStructurePtr getAlarm();
PVStringArrayPtr getNames();
PVStringArrayPtr getValues();
};</pre>
<p>where</p>
<dl>
<dt>isNTNameValue</dt>
<dd>Is the structure a NTNameValue structure?</dd>
<dt>create</dt>
<dd>Create an NTNameValue that has the associated fields.</dd>
<dt>~NTNameValue</dt>
<dd>The destructor.</dd>
<dt>getFunction</dt>
<dd>Get the function field. This can be null.</dd>
<dt>attachTimeStamp</dt>
<dd>The timeStamp field of the NTNameValue is atttached to the
pvTimeStamp.</dd>
<dt>attachAlarm</dt>
<dd>The alarm field of the NTNameValue is atttached to the alarm.</dd>
<dt>getPVStructure</dt>
<dd>Get the pvStructure that this NTNameValue contains.</dd>
<dt>getTimeStamp</dt>
<dd>Get the timeStamp field.</dd>
<dt>getAlarm</dt>
<dd>Get the alarm field.</dd>
<dt>getNames</dt>
<dd>Get the names field.</dd>
<dt>getValues</dt>
<dd>Get the values field.</dd>
</dl>
<h3>NTTable</h3>
<p>These are helper classes for NTTable</p>
<pre>class NTTable: private NoDefaultMethods
{
public:
static bool isNTTable(PVStructurePtr const & pvStructure);
static PVStructure::shared_pointer create(
bool hasFunction,bool hasTimeStamp, bool hasAlarm,
int numberValues,
FieldConstPtrArray valueFields);
static NTTablePtr create(
bool hasFunction,bool hasTimeStamp, bool hasAlarm,
StringArray const & valueNames,
FieldConstPtrArray const &valueFields);
static NTTablePtr clone(PVStructurePtr const &);
~NTTable();
PVStringPtr getFunction();
void attachTimeStamp(PVTimeStamp &amp;pvTimeStamp);
void attachAlarm(PVAlarm &amp;pvAlarm);
PVStructurePtr getPVStructure();
PVStructurePtr getTimeStamp();
PVStructurePtr getAlarm();
PVStringArrayPtr getLabel();
size_t getNumberValues();
FieldConstPtr getField(int index);
PVFieldPtr getPVField(int index);
};</pre>
<p>where</p>
<dl>
<dt>isNTTable</dt>
<dd>y</dd>
<dt>create</dt>
<dd>Create an NTTable that has the associated fields.</dd>
<dt>~NTTable</dt>
<dd>The destructor.</dd>
<dt>getFunction</dt>
<dd>Get the function field. This can be null.</dd>
<dt>attachTimeStamp</dt>
<dd>The timeStamp field of the NTTable is atttached to the pvTimeStamp.</dd>
<dt>attachAlarm</dt>
<dd>The alarm field of the NTTable is atttached to the alarm.</dd>
<dt>getPVStructure</dt>
<dd>Get the pvStructure that this NTTable contains.</dd>
<dt>getTimeStamp</dt>
<dd>Get the timeStamp field.</dd>
<dt>getAlarm</dt>
<dd>Get the alarm field.</dd>
<dt>getLabel</dt>
<dd>Get the label field.</dd>
<dt>getNumberValues</dt>
<dd>Get the number of value fields.</dd>
<dt>getField</dt>
<dd>Get the introspection interface for the specified field.</dd>
<dt>getPVField</dt>
<dd>Get the data field for the specified field.</dd>
</dl>
<h2>MTMultiChannel</h2>
<pre>
structure NTMultiChannel
union_t[] value
string[] channelName
time_t timeStamp :opt // time when data collected
alarm_t alarm :opt // alarm associated with data collection
int[] severity :opt // alarm severity for each value
int[] status :opt // alarm status for each value
string[] message :opt // alarm message for each value
long[] secondsPastEpoch :opt // seconds for each value.
int[] nanoseconds :opt // nanoseconds for each value
string descriptor :opt // descriptor data
</pre>
</div>
</body>
</html>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -6,20 +6,43 @@
#
# Author: Ralph Lange <ralph.lange@gmx.de>
# Copyright (C) 2013 Helmholtz-Zentrum Berlin für Materialien und Energie GmbH
# Copyright (C) 2014-2015 ITER Organization.
# Copyright (C) 2014-2016 ITER Organization.
# All rights reserved. Use is subject to license terms.
installTool () {
local module=$1
local version=$2
wget -nv https://openepics.ci.cloudbees.com/job/${module}-${version}_Build/lastSuccessfulBuild/artifact/${module,,}-${version}.CB-dist.tar.gz
tar -xzf ${module,,}-${version}.CB-dist.tar.gz
}
installE4 () {
local module=$1
local branch=$2
# If microbench version does not exist, try without
if [ "${MB}" = "WITH_MICROBENCH" ]; then
if ! wget -nv https://openepics.ci.cloudbees.com/job/e4-cpp-${module}-${branch}-build/BASE=${BASE},MB=WITH_MICROBENCH/lastSuccessfulBuild/artifact/${module}.CB-dist.tar.gz; then
wget -nv https://openepics.ci.cloudbees.com/job/e4-cpp-${module}-${branch}-build/BASE=${BASE},MB=NO_MICROBENCH/lastSuccessfulBuild/artifact/${module}.CB-dist.tar.gz
fi
else
wget -nv https://openepics.ci.cloudbees.com/job/e4-cpp-${module}-${branch}-build/BASE=${BASE},MB=NO_MICROBENCH/lastSuccessfulBuild/artifact/${module}.CB-dist.tar.gz
fi
tar -xzf ${module}.CB-dist.tar.gz
}
###########################################
# Determine EPICS Base version
# Defaults for EPICS Base and MB
DEFAULT_BASE=3.14.12.5
DEFAULT_BASE=3.15.4
BASE=${BASE:-${DEFAULT_BASE}}
MB=${MB:-"NO_MICROBENCH"}
BASE=${1:-${DEFAULT_BASE}}
USE_MB=${2:-"MB_NO"}
###########################################
# Dependent module branches
# Dependent module branches (empty = master)
PVCOMMON_BRANCH=""
PVDATA_BRANCH=""
PVDATA_BRANCH="release-6.0"
###########################################
# Fetch and unpack dependencies
@@ -30,15 +53,10 @@ rm -fr ${STUFF}
mkdir -p ${STUFF}
cd ${STUFF}
wget -nv https://openepics.ci.cloudbees.com/job/Base-${BASE}_Build/lastSuccessfulBuild/artifact/base-${BASE}.CB-dist.tar.gz
wget -nv https://openepics.ci.cloudbees.com/job/pvDataCPP_${PVDATA_BRANCH}Build/BASE=${BASE},USE_MB=MB_NO/lastSuccessfulBuild/artifact/pvData.CB-dist.tar.gz
tar -xzf base-${BASE}.CB-dist.tar.gz
tar -xzf pvData.CB-dist.tar.gz
installTool Boost 1.61.0
installTool Base ${BASE}
if [ "${USE_MB}" = "MB_YES" ]; then
wget -nv https://openepics.ci.cloudbees.com/job/pvCommonCPP_${PVCOMMON_BRANCH}Build/BASE=${BASE},USE_MB=MB_YES/lastSuccessfulBuild/artifact/pvCommon.CB-dist.tar.gz
tar -xzf pvCommon.CB-dist.tar.gz
fi
installE4 pvData ${PVDATA_BRANCH}
###########################################
# Build

View File

@@ -6,15 +6,39 @@
#
# Author: Ralph Lange <ralph.lange@gmx.de>
# Copyright (C) 2013 Helmholtz-Zentrum Berlin für Materialien und Energie GmbH
# Copyright (C) 2014-2015 ITER Organization.
# Copyright (C) 2014-2016 ITER Organization.
# All rights reserved. Use is subject to license terms.
installTool () {
local module=$1
local version=$2
wget -nv https://openepics.ci.cloudbees.com/job/${module}-${version}_Build/lastSuccessfulBuild/artifact/${module,,}-${version}.CB-dist.tar.gz
tar -xzf ${module,,}-${version}.CB-dist.tar.gz
}
installE4 () {
local module=$1
local branch=$2
# If microbench version does not exist, try without
if [ "${MB}" = "WITH_MICROBENCH" ]; then
if wget -nv https://openepics.ci.cloudbees.com/job/e4-cpp-${module}-${branch}-build/BASE=${BASE},MB=WITH_MICROBENCH/lastSuccessfulBuild/artifact/${module}.CB-dist.tar.gz; then
wget -nv https://openepics.ci.cloudbees.com/job/e4-cpp-${module}-${branch}-build/BASE=${BASE},MB=NO_MICROBENCH/lastSuccessfulBuild/artifact/${module}.CB-dist.tar.gz
fi
else
wget -nv https://openepics.ci.cloudbees.com/job/e4-cpp-${module}-${branch}-build/BASE=${BASE},MB=NO_MICROBENCH/lastSuccessfulBuild/artifact/${module}.CB-dist.tar.gz
fi
tar -xzf ${module}.CB-dist.tar.gz
}
###########################################
# Determine EPICS Base version
# Defaults for EPICS Base and parameters
DEFAULT_BASE=3.14.12.5
BASE=${1:-${DEFAULT_BASE}}
BASE=3.15.4
PUBLISH=${PUBLISH:-NO}
BRANCH=${BRANCH:-master}
MB=NO_MICROBENCH
###########################################
# Fetch and unpack dependencies
@@ -25,16 +49,14 @@ rm -fr ${STUFF}
mkdir -p ${STUFF}
cd ${STUFF}
wget -nv https://openepics.ci.cloudbees.com/job/Doxygen-1.8.3_Build/lastSuccessfulBuild/artifact/doxygen-1.8.3.CB-dist.tar.gz
tar -xzf doxygen-1.8.3.CB-dist.tar.gz
installTool Doxygen 1.8.11
###########################################
# Generate
cd ${WORKSPACE}
wget -nv https://openepics.ci.cloudbees.com/job/normativeTypesCPP_Build/BASE=${BASE},USE_MB=MB_NO/lastSuccessfulBuild/artifact/normativeTypes.CB-dist.tar.gz
tar -xzf normativeTypes.CB-dist.tar.gz
installE4 normativeTypes ${BRANCH}
export PATH=${STUFF}/bin:${PATH}
@@ -43,4 +65,9 @@ doxygen
###########################################
# Publish
rsync -aqP --delete -e ssh documentation epics-jenkins@web.sourceforge.net:/home/project-web/epics-pvdata/htdocs/docbuild/normativeTypesCPP/tip
if [ "${PUBLISH}" != "NO" ]; then
# Upload explicit dummy to ensure target directory exists
echo "Created by CloudBees Jenkins upload job. Should be deleted as part of the job." > DUMMY
rsync -q -e ssh DUMMY epics-jenkins@web.sourceforge.net:/home/project-web/epics-pvdata/htdocs/docbuild/normativeTypesCPP/${PUBLISH}/
rsync -aqP --delete -e ssh documentation epics-jenkins@web.sourceforge.net:/home/project-web/epics-pvdata/htdocs/docbuild/normativeTypesCPP/${PUBLISH}/
fi

View File

@@ -1,30 +1,26 @@
TOP = ..
include $(TOP)/configure/CONFIG
SRC = $(TOP)/src
SRC_DIRS += $(SRC)/nt
INC += nt.h
INC += ntutils.h
INC += ntid.h
INC += ntfield.h
INC += ntscalar.h
INC += ntscalarArray.h
INC += ntnameValue.h
INC += nttable.h
INC += ntmultiChannel.h
INC += ntscalarMultiChannel.h
INC += ntndarray.h
INC += ntmatrix.h
INC += ntenum.h
INC += ntunion.h
INC += ntaggregate.h
INC += ntattribute.h
INC += ntcontinuum.h
INC += nthistogram.h
INC += nturi.h
INC += ntndarrayAttribute.h
INC += pv/nt.h
INC += pv/ntutils.h
INC += pv/ntid.h
INC += pv/ntfield.h
INC += pv/ntscalar.h
INC += pv/ntscalarArray.h
INC += pv/ntnameValue.h
INC += pv/nttable.h
INC += pv/ntmultiChannel.h
INC += pv/ntscalarMultiChannel.h
INC += pv/ntndarray.h
INC += pv/ntmatrix.h
INC += pv/ntenum.h
INC += pv/ntunion.h
INC += pv/ntaggregate.h
INC += pv/ntattribute.h
INC += pv/ntcontinuum.h
INC += pv/nthistogram.h
INC += pv/nturi.h
INC += pv/ntndarrayAttribute.h
LIBSRCS += ntutils.cpp
LIBSRCS += ntid.cpp
@@ -50,5 +46,8 @@ LIBRARY = nt
nt_LIBS += pvData Com
# shared library ABI version.
SHRLIB_VERSION ?= 5.1
include $(TOP)/configure/RULES

View File

@@ -1,267 +0,0 @@
/* ntattribute.h */
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
*/
#ifndef NTATTRIBUTE_H
#define NTATTRIBUTE_H
#ifdef epicsExportSharedSymbols
# define ntattributeEpicsExportSharedSymbols
# undef epicsExportSharedSymbols
#endif
#ifdef ntattributeEpicsExportSharedSymbols
# define epicsExportSharedSymbols
# undef ntattributeEpicsExportSharedSymbols
#endif
#include <pv/ntfield.h>
#include <shareLib.h>
namespace epics { namespace nt {
class NTAttribute;
typedef std::tr1::shared_ptr<NTAttribute> NTAttributePtr;
namespace detail {
/**
* @brief Interface for in-line creating of NTAttribute.
*
* One instance can be used to create multiple instances.
* An instance of this object must not be used concurrently (an object has a state).
* @author dgh
*/
class epicsShareClass NTAttributeBuilder :
public std::tr1::enable_shared_from_this<NTAttributeBuilder>
{
public:
POINTER_DEFINITIONS(NTAttributeBuilder);
/**
* Add tags field to the NTAttribute.
* @return this instance of <b>NTAttributeBuilder</b>.
*/
virtual shared_pointer addTags();
/**
* Add descriptor field to the NTAttribute.
* @return this instance of <b>NTAttributeBuilder</b>.
*/
shared_pointer addDescriptor();
/**
* Add alarm structure to the NTAttribute.
* @return this instance of <b>NTAttributeBuilder</b>.
*/
shared_pointer addAlarm();
/**
* Add timeStamp structure to the NTAttribute.
* @return this instance of <b>NTAttributeBuilder</b>.
*/
shared_pointer addTimeStamp();
/**
* Create 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.
* 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.
* 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.
* @return this instance of <b>NTAttributeBuilder</b>.
*/
shared_pointer add(std::string const & name, epics::pvData::FieldConstPtr const & field);
protected://private:
NTAttributeBuilder();
void reset();
bool tags;
bool descriptor;
bool alarm;
bool timeStamp;
// NOTE: this preserves order, however it does not handle duplicates
epics::pvData::StringArray extraFieldNames;
epics::pvData::FieldConstPtrArray extraFields;
friend class ::epics::nt::NTAttribute;
};
}
typedef std::tr1::shared_ptr<detail::NTAttributeBuilder> NTAttributeBuilderPtr;
/**
* @brief Convenience Class for NTAttribute
*
* @author dgh
*/
class epicsShareClass NTAttribute
{
public:
POINTER_DEFINITIONS(NTAttribute);
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.
*/
static shared_pointer wrap(epics::pvData::PVStructurePtr const & structure);
/**
* 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.
*/
static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const & structure);
/**
* Is the structure an NTAttribute.
* @param structure The structure to test.
* @return (false,true) if (is not, is) an 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.
*/
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.
*/
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.
*/
static bool isCompatible(
epics::pvData::PVStructurePtr const &pvStructure);
/**
* Checks if the specified structure is a valid NTAttribute.
*
* Checks whether the wrapped structure is valid with respect to this
* version of NTAttribute
* @return (false,true) if (is not, is) a valid NTAttribute.
*/
bool isValid();
/**
* Create a NTAttribute builder instance.
* @return builder instance.
*/
static NTAttributeBuilderPtr createBuilder();
/**
* Destructor.
*/
~NTAttribute() {}
/**
* 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.
*/
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.
*/
bool attachAlarm(epics::pvData::PVAlarm &pvAlarm) const;
/**
* Get the pvStructure.
* @return PVStructurePtr.
*/
epics::pvData::PVStructurePtr getPVStructure() const;
/**
* Get the descriptor field.
* @return The pvString or null if no function field.
*/
epics::pvData::PVStringPtr getDescriptor() const;
/**
* Get the timeStamp.
* @return PVStructurePtr which may be null.
*/
epics::pvData::PVStructurePtr getTimeStamp() const;
/**
* Get the alarm.
* @return PVStructurePtr which may be null.
*/
epics::pvData::PVStructurePtr getAlarm() const;
/**
* Get the name field.
* @return The PVString for the name.
*/
epics::pvData::PVStringPtr getName() const;
/**
* Get the value field.
* @return The PVUnion for the values.
*/
epics::pvData::PVUnionPtr getValue() const;
/**
* Get the tags field.
* @return The PVStringArray for the tags, which may be null.
*/
epics::pvData::PVStringArrayPtr getTags() const;
private:
NTAttribute(epics::pvData::PVStructurePtr const & pvStructure);
epics::pvData::PVStructurePtr pvNTAttribute;
epics::pvData::PVUnionPtr pvValue;
friend class detail::NTAttributeBuilder;
};
}}
#endif /* NTATTRIBUTE_H */

View File

@@ -1,262 +0,0 @@
/* ntcontinuum.h */
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
*/
#ifndef NTCONTINUUM_H
#define NTCONTINUUM_H
#ifdef epicsExportSharedSymbols
# define ntcontinuumEpicsExportSharedSymbols
# undef epicsExportSharedSymbols
#endif
#ifdef ntcontinuumEpicsExportSharedSymbols
# define epicsExportSharedSymbols
# undef ntcontinuumEpicsExportSharedSymbols
#endif
#include <pv/ntfield.h>
#include <shareLib.h>
namespace epics { namespace nt {
class NTContinuum;
typedef std::tr1::shared_ptr<NTContinuum> NTContinuumPtr;
namespace detail {
/**
* @brief Interface for in-line creating of NTContinuum.
*
* One instance can be used to create multiple instances.
* An instance of this object must not be used concurrently (an object has a state).
* @author dgh
*/
class epicsShareClass NTContinuumBuilder :
public std::tr1::enable_shared_from_this<NTContinuumBuilder>
{
public:
POINTER_DEFINITIONS(NTContinuumBuilder);
/**
* Add descriptor field to the NTContinuum.
* @return this instance of <b>NTContinuumBuilder</b>.
*/
shared_pointer addDescriptor();
/**
* Add alarm structure to the NTContinuum.
* @return this instance of <b>NTContinuumBuilder</b>.
*/
shared_pointer addAlarm();
/**
* Add timeStamp structure to the NTContinuum.
* @return this instance of <b>NTContinuumBuilder</b>.
*/
shared_pointer addTimeStamp();
/**
* Create 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.
* 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.
* 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.
* @return this instance of <b>NTContinuumBuilder</b>.
*/
shared_pointer add(std::string const & name, epics::pvData::FieldConstPtr const & field);
private:
NTContinuumBuilder();
void reset();
bool dim;
bool descriptor;
bool alarm;
bool timeStamp;
// NOTE: this preserves order, however it does not handle duplicates
epics::pvData::StringArray extraFieldNames;
epics::pvData::FieldConstPtrArray extraFields;
friend class ::epics::nt::NTContinuum;
};
}
typedef std::tr1::shared_ptr<detail::NTContinuumBuilder> NTContinuumBuilderPtr;
/**
* @brief Convenience Class for NTContinuum
*
* @author dgh
*/
class epicsShareClass NTContinuum
{
public:
POINTER_DEFINITIONS(NTContinuum);
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.
*/
static shared_pointer wrap(epics::pvData::PVStructurePtr const & structure);
/**
* 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.
*/
static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const & structure);
/**
* Is the structure an NTContinuum.
* @param structure The structure to test.
* @return (false,true) if (is not, is) an 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.
*/
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.
*/
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.
*/
static bool isCompatible(
epics::pvData::PVStructurePtr const &pvStructure);
/**
* Checks if the specified structure is a valid NTContinuum.
*
* Checks whether the wrapped structure is valid with respect to this
* version of NTContinuum
* @return (false,true) if (is not, is) a valid NTContinuum.
*/
bool isValid();
/**
* Create a NTContinuum builder instance.
* @return builder instance.
*/
static NTContinuumBuilderPtr createBuilder();
/**
* Destructor.
*/
~NTContinuum() {}
/**
* 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.
*/
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.
*/
bool attachAlarm(epics::pvData::PVAlarm &pvAlarm) const;
/**
* Get the pvStructure.
* @return PVStructurePtr.
*/
epics::pvData::PVStructurePtr getPVStructure() const;
/**
* Get the descriptor field.
* @return The pvString or null if no function field.
*/
epics::pvData::PVStringPtr getDescriptor() const;
/**
* Get the timeStamp.
* @return PVStructurePtr which may be null.
*/
epics::pvData::PVStructurePtr getTimeStamp() const;
/**
* Get the alarm.
* @return PVStructurePtr which may be null.
*/
epics::pvData::PVStructurePtr getAlarm() const;
/**
* Get the base field.
* @return The PVDoubleArray for the base.
*/
epics::pvData::PVDoubleArrayPtr getBase() const;
/**
* Get the value field.
* @return The PVDoubleArray for the values.
*/
epics::pvData::PVDoubleArrayPtr getValue() const;
/**
* Get the units field.
* @return The PVStringArray for the units.
*/
epics::pvData::PVStringArrayPtr getUnits() const;
private:
NTContinuum(epics::pvData::PVStructurePtr const & pvStructure);
epics::pvData::PVStructurePtr pvNTContinuum;
epics::pvData::PVDoubleArrayPtr pvValue;
friend class detail::NTContinuumBuilder;
};
}}
#endif /* NTCONTINUUM_H */

View File

@@ -1,277 +0,0 @@
/* nthistogram.h */
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
*/
#ifndef NTHISTOGRAM_H
#define NTHISTOGRAM_H
#ifdef epicsExportSharedSymbols
# define nthistogramEpicsExportSharedSymbols
# undef epicsExportSharedSymbols
#endif
#ifdef nthistogramEpicsExportSharedSymbols
# define epicsExportSharedSymbols
# undef nthistogramEpicsExportSharedSymbols
#endif
#include <pv/ntfield.h>
#include <shareLib.h>
namespace epics { namespace nt {
class NTHistogram;
typedef std::tr1::shared_ptr<NTHistogram> NTHistogramPtr;
namespace detail {
/**
* @brief Interface for in-line creating of NTHistogram.
*
* One instance can be used to create multiple instances.
* An instance of this object must not be used concurrently (an object has a state).
* @author dgh
*/
class epicsShareClass NTHistogramBuilder :
public std::tr1::enable_shared_from_this<NTHistogramBuilder>
{
public:
POINTER_DEFINITIONS(NTHistogramBuilder);
/**
* Set a scalar type of value field array.
* @param scalarType the value type.
* @return this instance of <b>NTHistogramBuilder</b>.
*/
shared_pointer value(epics::pvData::ScalarType scalarType);
/**
* Add descriptor field to the NTHistogram.
* @return this instance of <b>NTHistogramBuilder</b>.
*/
shared_pointer addDescriptor();
/**
* Add alarm structure to the NTHistogram.
* @return this instance of <b>NTHistogramBuilder</b>.
*/
shared_pointer addAlarm();
/**
* Add timeStamp structure to the NTHistogram.
* @return this instance of <b>NTHistogramBuilder</b>.
*/
shared_pointer addTimeStamp();
/**
* Create 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.
* 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.
* 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.
* @return this instance of <b>NTHistogramBuilder</b>.
*/
shared_pointer add(std::string const & name, epics::pvData::FieldConstPtr const & field);
private:
NTHistogramBuilder();
void reset();
bool valueTypeSet;
epics::pvData::ScalarType valueType;
bool dim;
bool descriptor;
bool alarm;
bool timeStamp;
// NOTE: this preserves order, however it does not handle duplicates
epics::pvData::StringArray extraFieldNames;
epics::pvData::FieldConstPtrArray extraFields;
friend class ::epics::nt::NTHistogram;
};
}
typedef std::tr1::shared_ptr<detail::NTHistogramBuilder> NTHistogramBuilderPtr;
/**
* @brief Convenience Class for NTHistogram
*
* @author dgh
*/
class epicsShareClass NTHistogram
{
public:
POINTER_DEFINITIONS(NTHistogram);
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.
*/
static shared_pointer wrap(epics::pvData::PVStructurePtr const & structure);
/**
* 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.
*/
static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const & structure);
/**
* Is the structure an NTHistogram.
* @param structure The structure to test.
* @return (false,true) if (is not, is) an 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.
*/
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.
*/
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.
*/
static bool isCompatible(
epics::pvData::PVStructurePtr const &pvStructure);
/**
* Checks if the specified structure is a valid NTHistogram.
*
* Checks whether the wrapped structure is valid with respect to this
* version of NTHistogram
* @return (false,true) if (is not, is) a valid NTHistogram.
*/
bool isValid();
/**
* Create a NTHistogram builder instance.
* @return builder instance.
*/
static NTHistogramBuilderPtr createBuilder();
/**
* Destructor.
*/
~NTHistogram() {}
/**
* 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.
*/
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.
*/
bool attachAlarm(epics::pvData::PVAlarm &pvAlarm) const;
/**
* Get the pvStructure.
* @return PVStructurePtr.
*/
epics::pvData::PVStructurePtr getPVStructure() const;
/**
* Get the descriptor field.
* @return The pvString or null if no function field.
*/
epics::pvData::PVStringPtr getDescriptor() const;
/**
* Get the timeStamp.
* @return PVStructurePtr which may be null.
*/
epics::pvData::PVStructurePtr getTimeStamp() const;
/**
* Get the alarm.
* @return PVStructurePtr which may be null.
*/
epics::pvData::PVStructurePtr getAlarm() const;
/**
* Get the base field.
* @return The PVDoubleArray for the base.
*/
epics::pvData::PVDoubleArrayPtr getRanges() const;
/**
* Get the value field.
* @return The PVScalarArray for the values.
*/
epics::pvData::PVScalarArrayPtr getValue() const;
/**
* Get the value field of a specified type (e.g. PVIntArray).
* @return The <PVT> field for the values.
*/
template<typename PVT>
std::tr1::shared_ptr<PVT> getValue() const
{
return std::tr1::dynamic_pointer_cast<PVT>(pvValue);
}
private:
NTHistogram(epics::pvData::PVStructurePtr const & pvStructure);
epics::pvData::PVStructurePtr pvNTHistogram;
epics::pvData::PVScalarArrayPtr pvValue;
friend class detail::NTHistogramBuilder;
};
}}
#endif /* NTHISTOGRAM_H */

View File

@@ -1,285 +0,0 @@
/* ntmatrix.h */
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
*/
#ifndef NTMATRIX_H
#define NTMATRIX_H
#ifdef epicsExportSharedSymbols
# define ntmatrixEpicsExportSharedSymbols
# undef epicsExportSharedSymbols
#endif
#include <pv/pvDisplay.h>
#ifdef ntmatrixEpicsExportSharedSymbols
# define epicsExportSharedSymbols
# undef ntmatrixEpicsExportSharedSymbols
#endif
#include <pv/ntfield.h>
#include <shareLib.h>
namespace epics { namespace nt {
class NTMatrix;
typedef std::tr1::shared_ptr<NTMatrix> NTMatrixPtr;
namespace detail {
/**
* @brief Interface for in-line creating of NTMatrix.
*
* One instance can be used to create multiple instances.
* An instance of this object must not be used concurrently (an object has a state).
* @author dgh
*/
class epicsShareClass NTMatrixBuilder :
public std::tr1::enable_shared_from_this<NTMatrixBuilder>
{
public:
POINTER_DEFINITIONS(NTMatrixBuilder);
/**
* Add dimensionfield to the NTMatrix.
* @return this instance of <b>NTMatrixBuilder</b>.
*/
shared_pointer addDim();
/**
* Add descriptor field to the NTMatrix.
* @return this instance of <b>NTMatrixBuilder</b>.
*/
shared_pointer addDescriptor();
/**
* Add alarm structure to the NTMatrix.
* @return this instance of <b>NTMatrixBuilder</b>.
*/
shared_pointer addAlarm();
/**
* Add timeStamp structure to the NTMatrix.
* @return this instance of <b>NTMatrixBuilder</b>.
*/
shared_pointer addTimeStamp();
/**
* Add display structure to the NTMatrix.
* @return this instance of <b>NTMatrixBuilder</b>.
*/
shared_pointer addDisplay();
/**
* Create 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.
* 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.
* 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.
* @return this instance of <b>NTMatrixBuilder</b>.
*/
shared_pointer add(std::string const & name, epics::pvData::FieldConstPtr const & field);
private:
NTMatrixBuilder();
void reset();
bool dim;
bool descriptor;
bool alarm;
bool timeStamp;
bool display;
// NOTE: this preserves order, however it does not handle duplicates
epics::pvData::StringArray extraFieldNames;
epics::pvData::FieldConstPtrArray extraFields;
friend class ::epics::nt::NTMatrix;
};
}
typedef std::tr1::shared_ptr<detail::NTMatrixBuilder> NTMatrixBuilderPtr;
/**
* @brief Convenience Class for NTMatrix
*
* @author dgh
*/
class epicsShareClass NTMatrix
{
public:
POINTER_DEFINITIONS(NTMatrix);
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.
*/
static shared_pointer wrap(epics::pvData::PVStructurePtr const & structure);
/**
* 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.
*/
static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const & structure);
/**
* Is the structure an NTMatrix.
* @param structure The structure to test.
* @return (false,true) if (is not, is) an 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.
*/
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.
*/
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.
*/
static bool isCompatible(
epics::pvData::PVStructurePtr const &pvStructure);
/**
* Checks if the specified structure is a valid NTMatrix.
*
* Checks whether the wrapped structure is valid with respect to this
* version of NTMatrix
* @return (false,true) if (is not, is) a valid NTMatrix.
*/
bool isValid();
/**
* Create a NTMatrix builder instance.
* @return builder instance.
*/
static NTMatrixBuilderPtr createBuilder();
/**
* Destructor.
*/
~NTMatrix() {}
/**
* 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.
*/
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.
*/
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.
*/
bool attachDisplay(epics::pvData::PVDisplay &pvDisplay) const;
/**
* Get the pvStructure.
* @return PVStructurePtr.
*/
epics::pvData::PVStructurePtr getPVStructure() const;
/**
* Get the descriptor field.
* @return The pvString or null if no function field.
*/
epics::pvData::PVStringPtr getDescriptor() const;
/**
* Get the timeStamp.
* @return PVStructurePtr which may be null.
*/
epics::pvData::PVStructurePtr getTimeStamp() const;
/**
* Get the alarm.
* @return PVStructurePtr which may be null.
*/
epics::pvData::PVStructurePtr getAlarm() const;
/**
* Get the display.
* @return PVStructurePtr which may be null.
*/
epics::pvData::PVStructurePtr getDisplay() const;
/**
* Get the value field.
* @return The PVDoubleArray for the values.
*/
epics::pvData::PVDoubleArrayPtr getValue() const;
/**
* Get the dim field.
* @return The PVIntArray for the dim which may be null.
*/
epics::pvData::PVIntArrayPtr getDim() const;
private:
NTMatrix(epics::pvData::PVStructurePtr const & pvStructure);
epics::pvData::PVStructurePtr pvNTMatrix;
epics::pvData::PVDoubleArrayPtr pvValue;
friend class detail::NTMatrixBuilder;
};
}}
#endif /* NTMATRIX_H */

View File

@@ -1,279 +0,0 @@
/* ntndarrayAttribute.h */
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
*/
#ifndef NTNDARRAYATTRIBUTE_H
#define NTNDARRAYATTRIBUTE_H
#ifdef epicsExportSharedSymbols
# define ntndarrayAttributeEpicsExportSharedSymbols
# undef epicsExportSharedSymbols
#endif
#ifdef ntndarrayAttributeEpicsExportSharedSymbols
# define epicsExportSharedSymbols
# undef ntndarrayAttributeEpicsExportSharedSymbols
#endif
#include <pv/ntfield.h>
#include <shareLib.h>
namespace epics { namespace nt {
class NTNDArrayAttribute;
typedef std::tr1::shared_ptr<NTNDArrayAttribute> NTNDArrayAttributePtr;
namespace detail {
/**
* @brief Interface for in-line creating of NTAttribute extended as required by NTNDArray
*
* One instance can be used to create multiple instances.
* An instance of this object must not be used concurrently (an object has a state).
* @author dgh
*/
class epicsShareClass NTNDArrayAttributeBuilder :
public std::tr1::enable_shared_from_this<NTNDArrayAttributeBuilder>
{
public:
POINTER_DEFINITIONS(NTNDArrayAttributeBuilder);
/**
* Add tags field to the NTNDArrayAttribute.
* @return this instance of <b>NTNDArrayAttributeBuilder</b>.
*/
virtual shared_pointer addTags();
/**
* Add descriptor field to the NTNDArrayAttribute.
* @return this instance of <b>NTNDArrayAttributeBuilder</b>.
*/
shared_pointer addDescriptor();
/**
* Add alarm structure to the NTNDArrayAttribute.
* @return this instance of <b>NTNDArrayAttributeBuilder</b>.
*/
shared_pointer addAlarm();
/**
* Add timeStamp structure to the NTNDArrayAttribute.
* @return this instance of <b>NTNDArrayAttributeBuilder</b>.
*/
shared_pointer addTimeStamp();
/**
* Create 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.
* 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.
* 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.
* @return this instance of <b>NTNDArrayAttributeBuilder</b>.
*/
shared_pointer add(std::string const & name, epics::pvData::FieldConstPtr const & field);
protected://private:
NTNDArrayAttributeBuilder();
void reset();
bool tags;
bool descriptor;
bool alarm;
bool timeStamp;
// NOTE: this preserves order, however it does not handle duplicates
epics::pvData::StringArray extraFieldNames;
epics::pvData::FieldConstPtrArray extraFields;
friend class ::epics::nt::NTNDArrayAttribute;
};
}
typedef std::tr1::shared_ptr<detail::NTNDArrayAttributeBuilder> NTNDArrayAttributeBuilderPtr;
/**
* @briVIntPtref Convenience Class for NTNDArrayAttribute
*
* @author dgh
*/
class epicsShareClass NTNDArrayAttribute
{
public:
POINTER_DEFINITIONS(NTNDArrayAttribute);
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.
*/
static shared_pointer wrap(epics::pvData::PVStructurePtr const & structure);
/**
* 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.
*/
static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const & structure);
/**
* Is the structure an NTNDArrayAttribute.
* @param structure The structure to test.
* @return (false,true) if (is not, is) an NTNDArrayAttribute.
*/
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.
*/
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.
*/
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.
*/
static bool isCompatible(
epics::pvData::PVStructurePtr const &pvStructure);
/**
* Checks if the specified structure is a valid NTNDArrayAttribute.
*
* Checks whether the wrapped structure is valid with respect to this
* version of NTNDArrayAttribute
* @return (false,true) if (is not, is) a valid NTNDArrayAttribute.
*/
bool isValid();
/**
* Create a NTNDArrayAttribute builder instance.
* @return builder instance.
*/
static NTNDArrayAttributeBuilderPtr createBuilder();
/**
* Destructor.
*/
~NTNDArrayAttribute() {}
/**
* 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.
*/
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.
*/
bool attachAlarm(epics::pvData::PVAlarm &pvAlarm) const;
/**
* Get the pvStructure.
* @return PVStructurePtr.
*/
epics::pvData::PVStructurePtr getPVStructure() const;
/**
* Get the descriptor field.
* @return The pvString
*/
epics::pvData::PVStringPtr getDescriptor() const;
/**
* Get the timeStamp.
* @return PVStructurePtr which may be null.
*/
epics::pvData::PVStructurePtr getTimeStamp() const;
/**
* Get the alarm.
* @return PVStructurePtr which may be null.
*/
epics::pvData::PVStructurePtr getAlarm() const;
/**
* Get the name field.
* @return The PVString for the name.
*/
epics::pvData::PVStringPtr getName() const;
/**
* Get the value field.
* @return The PVUnion for the values.
*/
epics::pvData::PVUnionPtr getValue() const;
/**
* Get the tags field.
* @return The PVStringArray for the tags, which may be null.
*/
epics::pvData::PVStringArrayPtr getTags() const;
/**
* Get the sourceType field.
* @return The PVInt for the sourceType field.
*/
epics::pvData::PVIntPtr getSourceType() const;
/**
* Get the source field.
* @return The PVString for the source field, which may be null.
*/
epics::pvData::PVStringPtr getSource() const;
private:
NTNDArrayAttribute(epics::pvData::PVStructurePtr const & pvStructure);
epics::pvData::PVStructurePtr pvNTNDArrayAttribute;
epics::pvData::PVUnionPtr pvValue;
friend class detail::NTNDArrayAttributeBuilder;
};
}}
#endif /* NTNDARRAYATTRIBUTE_H */

View File

@@ -1,250 +0,0 @@
/* ntunion.h */
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
*/
#ifndef NTUNION_H
#define NTUNION_H
#ifdef epicsExportSharedSymbols
# define ntunionEpicsExportSharedSymbols
# undef epicsExportSharedSymbols
#endif
#ifdef ntunionEpicsExportSharedSymbols
# define epicsExportSharedSymbols
# undef ntunionEpicsExportSharedSymbols
#endif
#include <pv/ntfield.h>
#include <shareLib.h>
namespace epics { namespace nt {
class NTUnion;
typedef std::tr1::shared_ptr<NTUnion> NTUnionPtr;
namespace detail {
/**
* @brief Interface for in-line creating of NTUnion.
*
* One instance can be used to create multiple instances.
* An instance of this object must not be used concurrently (an object has a state).
* @author dgh
*/
class epicsShareClass NTUnionBuilder :
public std::tr1::enable_shared_from_this<NTUnionBuilder>
{
public:
POINTER_DEFINITIONS(NTUnionBuilder);
/**
* Add descriptor field to the NTUnion.
* @return this instance of <b>NTUnionBuilder</b>.
*/
shared_pointer addDescriptor();
/**
* Add alarm structure to the NTUnion.
* @return this instance of <b>NTUnionBuilder</b>.
*/
shared_pointer addAlarm();
/**
* Add timeStamp structure to the NTUnion.
* @return this instance of <b>NTUnionBuilder</b>.
*/
shared_pointer addTimeStamp();
/**
* Create 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.
* 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.
* 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.
* @return this instance of <b>NTUnionBuilder</b>.
*/
shared_pointer add(std::string const & name, epics::pvData::FieldConstPtr const & field);
private:
NTUnionBuilder();
epics::pvData::UnionConstPtr valueType;
void reset();
bool descriptor;
bool alarm;
bool timeStamp;
// NOTE: this preserves order, however it does not handle duplicates
epics::pvData::StringArray extraFieldNames;
epics::pvData::FieldConstPtrArray extraFields;
friend class ::epics::nt::NTUnion;
};
}
typedef std::tr1::shared_ptr<detail::NTUnionBuilder> NTUnionBuilderPtr;
/**
* @brief Convenience Class for NTUnion
*
* @author dgh
*/
class epicsShareClass NTUnion
{
public:
POINTER_DEFINITIONS(NTUnion);
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.
*/
static shared_pointer wrap(epics::pvData::PVStructurePtr const & structure);
/**
* 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.
*/
static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const & structure);
/**
* Is the structure an NTUnion.
* @param structure The structure to test.
* @return (false,true) if (is not, is) an 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.
*/
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.
*/
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.
*/
static bool isCompatible(
epics::pvData::PVStructurePtr const &pvStructure);
/**
* Checks if the specified structure is a valid NTUnion.
*
* Checks whether the wrapped structure is valid with respect to this
* version of NTUnion
* @return (false,true) if (is not, is) a valid NTUnion.
*/
bool isValid();
/**
* Create a NTUnion builder instance.
* @return builder instance.
*/
static NTUnionBuilderPtr createBuilder();
/**
* Destructor.
*/
~NTUnion() {}
/**
* 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.
*/
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.
*/
bool attachAlarm(epics::pvData::PVAlarm &pvAlarm) const;
/**
* Get the pvStructure.
* @return PVStructurePtr.
*/
epics::pvData::PVStructurePtr getPVStructure() const;
/**
* Get the descriptor field.
* @return The pvString or null if no function field.
*/
epics::pvData::PVStringPtr getDescriptor() const;
/**
* Get the timeStamp.
* @return PVStructurePtr which may be null.
*/
epics::pvData::PVStructurePtr getTimeStamp() const;
/**
* Get the alarm.
* @return PVStructurePtr which may be null.
*/
epics::pvData::PVStructurePtr getAlarm() const;
/**
* Get the value field.
* @return The PVUnion for the values.
*/
epics::pvData::PVUnionPtr getValue() const;
private:
NTUnion(epics::pvData::PVStructurePtr const & pvStructure);
epics::pvData::PVStructurePtr pvNTUnion;
epics::pvData::PVUnionPtr pvValue;
friend class detail::NTUnionBuilder;
};
}}
#endif /* NTUNION_H */

View File

@@ -1,8 +1,7 @@
/* ntaggregate.cpp */
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#define epicsExportSharedSymbols
@@ -171,15 +170,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)
@@ -187,6 +186,12 @@ bool NTAggregate::is_a(StructureConstPtr const & structure)
return NTUtils::is_a(structure->getID(), URI);
}
bool NTAggregate::is_a(PVStructurePtr const & pvStructure)
{
return is_a(pvStructure->getStructure());
}
bool NTAggregate::isCompatible(StructureConstPtr const &structure)
{
if (structure.get() == 0) return false;

View File

@@ -1,8 +1,7 @@
/* ntattribute.cpp */
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#define epicsExportSharedSymbols
@@ -108,15 +107,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)
@@ -124,6 +123,11 @@ bool NTAttribute::is_a(StructureConstPtr const & structure)
return NTUtils::is_a(structure->getID(), URI);
}
bool NTAttribute::is_a(PVStructurePtr const & pvStructure)
{
return is_a(pvStructure->getStructure());
}
bool NTAttribute::isCompatible(StructureConstPtr const & structure)
{
if (structure.get() == 0) return false;

View File

@@ -1,8 +1,7 @@
/* ntcontinuum.cpp */
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#define epicsExportSharedSymbols
@@ -100,15 +99,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)
@@ -116,6 +115,11 @@ bool NTContinuum::is_a(StructureConstPtr const & structure)
return NTUtils::is_a(structure->getID(), URI);
}
bool NTContinuum::is_a(PVStructurePtr const & pvStructure)
{
return is_a(pvStructure->getStructure());
}
bool NTContinuum::isCompatible(StructureConstPtr const & structure)
{
if (structure.get() == 0) return false;

View File

@@ -1,8 +1,7 @@
/* ntenum.cpp */
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#define epicsExportSharedSymbols
@@ -99,15 +98,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)
@@ -115,6 +114,11 @@ bool NTEnum::is_a(StructureConstPtr const & structure)
return NTUtils::is_a(structure->getID(), URI);
}
bool NTEnum::is_a(PVStructurePtr const & pvStructure)
{
return is_a(pvStructure->getStructure());
}
bool NTEnum::isCompatible(StructureConstPtr const &structure)
{
if (structure.get() == 0) return false;

View File

@@ -1,8 +1,7 @@
/* ntfield.cpp */
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#include <pv/lock.h>

View File

@@ -1,8 +1,7 @@
/* ntcontinuum.cpp */
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#define epicsExportSharedSymbols
@@ -113,15 +112,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)
@@ -129,6 +128,11 @@ bool NTHistogram::is_a(StructureConstPtr const & structure)
return NTUtils::is_a(structure->getID(), URI);
}
bool NTHistogram::is_a(PVStructurePtr const & pvStructure)
{
return is_a(pvStructure->getStructure());
}
bool NTHistogram::isCompatible(StructureConstPtr const &structure)
{
if(!structure.get()) return false;

View File

@@ -1,7 +1,7 @@
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/* ntid.cpp */
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#include <pv/ntid.h>

View File

@@ -1,8 +1,7 @@
/* ntmatrix.cpp */
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#define epicsExportSharedSymbols
@@ -117,15 +116,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)
@@ -133,6 +132,11 @@ bool NTMatrix::is_a(StructureConstPtr const & structure)
return NTUtils::is_a(structure->getID(), URI);
}
bool NTMatrix::is_a(PVStructurePtr const & pvStructure)
{
return is_a(pvStructure->getStructure());
}
bool NTMatrix::isCompatible(StructureConstPtr const & structure)
{
if (structure.get() == 0) return false;

View File

@@ -1,8 +1,7 @@
/* ntmultiChannel.cpp */
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#include <algorithm>
@@ -210,15 +209,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)
@@ -226,6 +225,10 @@ bool NTMultiChannel::is_a(StructureConstPtr const &structure)
return NTUtils::is_a(structure->getID(), URI);
}
bool NTMultiChannel::is_a(PVStructurePtr const & pvStructure)
{
return is_a(pvStructure->getStructure());
}
bool NTMultiChannel::isCompatible(StructureConstPtr const & structure)
{

View File

@@ -1,8 +1,7 @@
/* ntnameValue.cpp */
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#define epicsExportSharedSymbols
@@ -112,10 +111,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)
@@ -128,6 +127,11 @@ bool NTNameValue::is_a(StructureConstPtr const & structure)
return NTUtils::is_a(structure->getID(), URI);
}
bool NTNameValue::is_a(PVStructurePtr const & pvStructure)
{
return is_a(pvStructure->getStructure());
}
bool NTNameValue::isCompatible(StructureConstPtr const & structure)
{
if (structure.get() == 0) return false;

View File

@@ -1,8 +1,7 @@
/* ntndarray.cpp */
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#include <algorithm>
@@ -280,15 +279,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)
@@ -296,6 +295,11 @@ bool NTNDArray::is_a(StructureConstPtr const & structure)
return NTUtils::is_a(structure->getID(), URI);
}
bool NTNDArray::is_a(PVStructurePtr const & pvStructure)
{
return is_a(pvStructure->getStructure());
}
bool NTNDArray::isCompatible(StructureConstPtr const &structure)
{
if(!structure.get()) return false;
@@ -506,6 +510,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

@@ -1,8 +1,7 @@
/* ntndarrayAttribute.cpp */
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#define epicsExportSharedSymbols
@@ -111,15 +110,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)
@@ -127,6 +126,11 @@ bool NTNDArrayAttribute::is_a(StructureConstPtr const & structure)
return NTUtils::is_a(structure->getID(), URI);
}
bool NTNDArrayAttribute::is_a(PVStructurePtr const & pvStructure)
{
return is_a(pvStructure->getStructure());
}
bool NTNDArrayAttribute::isCompatible(StructureConstPtr const & structure)
{
if (!NTAttribute::isCompatible(structure)) return false;

View File

@@ -1,8 +1,7 @@
/* ntscalar.cpp */
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#define epicsExportSharedSymbols
@@ -130,15 +129,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)
@@ -146,6 +145,11 @@ bool NTScalar::is_a(StructureConstPtr const & structure)
return NTUtils::is_a(structure->getID(), URI);
}
bool NTScalar::is_a(PVStructurePtr const & pvStructure)
{
return is_a(pvStructure->getStructure());
}
bool NTScalar::isCompatible(StructureConstPtr const &structure)
{
if (structure.get() == 0) return false;

View File

@@ -1,8 +1,7 @@
/* ntscalarArray.cpp */
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#define epicsExportSharedSymbols
@@ -18,6 +17,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 +138,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)
@@ -145,6 +154,11 @@ bool NTScalarArray::is_a(StructureConstPtr const & structure)
return NTUtils::is_a(structure->getID(), URI);
}
bool NTScalarArray::is_a(PVStructurePtr const & pvStructure)
{
return is_a(pvStructure->getStructure());
}
bool NTScalarArray::isCompatible(StructureConstPtr const & structure)
{
if (structure.get() == 0) return false;

View File

@@ -1,10 +1,8 @@
/* ntscalarMultiChannel.cpp */
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#include <algorithm>
#define epicsExportSharedSymbols
@@ -207,15 +205,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)
@@ -223,6 +221,10 @@ bool NTScalarMultiChannel::is_a(StructureConstPtr const &structure)
return NTUtils::is_a(structure->getID(), URI);
}
bool NTScalarMultiChannel::is_a(PVStructurePtr const & pvStructure)
{
return is_a(pvStructure->getStructure());
}
bool NTScalarMultiChannel::isCompatible(StructureConstPtr const & structure)
{

View File

@@ -1,8 +1,7 @@
/* nttable.cpp */
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#include <algorithm>
@@ -127,15 +126,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)
@@ -143,6 +142,11 @@ bool NTTable::is_a(StructureConstPtr const & structure)
return NTUtils::is_a(structure->getID(), URI);
}
bool NTTable::is_a(PVStructurePtr const & pvStructure)
{
return is_a(pvStructure->getStructure());
}
bool NTTable::isCompatible(StructureConstPtr const & structure)
{
if (!structure.get()) return false;

View File

@@ -1,8 +1,7 @@
/* ntunion.cpp */
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#define epicsExportSharedSymbols
@@ -100,15 +99,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)
@@ -116,6 +115,11 @@ bool NTUnion::is_a(StructureConstPtr const & structure)
return NTUtils::is_a(structure->getID(), URI);
}
bool NTUnion::is_a(PVStructurePtr const & pvStructure)
{
return is_a(pvStructure->getStructure());
}
bool NTUnion::isCompatible(StructureConstPtr const &structure)
{
if (structure.get() == 0) return false;

View File

@@ -1,8 +1,7 @@
/* nturi.cpp */
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#include <algorithm>
@@ -127,15 +126,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)
@@ -143,6 +142,11 @@ bool NTURI::is_a(StructureConstPtr const & structure)
return NTUtils::is_a(structure->getID(), URI);
}
bool NTURI::is_a(PVStructurePtr const & pvStructure)
{
return is_a(pvStructure->getStructure());
}
bool NTURI::isCompatible(StructureConstPtr const & structure)
{
if (!structure.get()) return false;

View File

@@ -1,8 +1,7 @@
/* ntutils.cpp */
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#define epicsExportSharedSymbols

View File

@@ -1,8 +1,7 @@
/* nt.h */
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#ifndef NT_H
#define NT_H

View File

@@ -1,8 +1,7 @@
/* ntaggregate.h */
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#ifndef NTAGGREGATE_H
#define NTAGGREGATE_H
@@ -42,89 +41,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 +171,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 +267,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;

294
src/pv/ntattribute.h Normal file
View File

@@ -0,0 +1,294 @@
/* ntattribute.h */
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#ifndef NTATTRIBUTE_H
#define NTATTRIBUTE_H
#ifdef epicsExportSharedSymbols
# define ntattributeEpicsExportSharedSymbols
# undef epicsExportSharedSymbols
#endif
#ifdef ntattributeEpicsExportSharedSymbols
# define epicsExportSharedSymbols
# undef ntattributeEpicsExportSharedSymbols
#endif
#include <pv/ntfield.h>
#include <shareLib.h>
namespace epics { namespace nt {
class NTAttribute;
typedef std::tr1::shared_ptr<NTAttribute> NTAttributePtr;
namespace detail {
/**
* @brief Interface for in-line creating of NTAttribute.
*
* One instance can be used to create multiple instances.
* An instance of this object must not be used concurrently (an object has a state).
* @author dgh
*/
class epicsShareClass NTAttributeBuilder :
public std::tr1::enable_shared_from_this<NTAttributeBuilder>
{
public:
POINTER_DEFINITIONS(NTAttributeBuilder);
/**
* Adds tags field to the NTAttribute.
* @return this instance of <b>NTAttributeBuilder</b>.
*/
shared_pointer addTags();
/**
* Adds descriptor field to the NTAttribute.
* @return this instance of <b>NTAttributeBuilder</b>.
*/
shared_pointer addDescriptor();
/**
* Adds alarm field to the NTAttribute.
* @return this instance of <b>NTAttributeBuilder</b>.
*/
shared_pointer addAlarm();
/**
* Adds timeStamp field to the NTAttribute.
* @return this instance of <b>NTAttributeBuilder</b>.
*/
shared_pointer addTimeStamp();
/**
* 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();
/**
* 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();
/**
* 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();
/**
* 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);
protected://private:
NTAttributeBuilder();
void reset();
bool tags;
bool descriptor;
bool alarm;
bool timeStamp;
// NOTE: this preserves order, however it does not handle duplicates
epics::pvData::StringArray extraFieldNames;
epics::pvData::FieldConstPtrArray extraFields;
friend class ::epics::nt::NTAttribute;
};
}
typedef std::tr1::shared_ptr<detail::NTAttributeBuilder> NTAttributeBuilderPtr;
/**
* @brief Convenience Class for NTAttribute
*
* @author dgh
*/
class epicsShareClass NTAttribute
{
public:
POINTER_DEFINITIONS(NTAttribute);
static const std::string URI;
/**
* 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 & pvStructure);
/**
* 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 & pvStructure);
/**
* 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);
/**
* 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);
/**
* 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);
/**
* 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);
/**
* 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.
*
* @return (false,true) if the wrapped PVStructure (is not, is) a valid NTAttribute
*/
bool isValid();
/**
* Creates an NTAttribute builder instance.
* @return builder instance.
*/
static NTAttributeBuilderPtr createBuilder();
/**
* Destructor.
*/
~NTAttribute() {}
/**
* 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;
/**
* 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;
/**
* Returns the PVStructure wrapped by this instance.
* @return the PVStructure wrapped by this instance.
*/
epics::pvData::PVStructurePtr getPVStructure() const;
/**
* Returns the descriptor field.
* @return the descriptor field or null if no such field.
*/
epics::pvData::PVStringPtr getDescriptor() const;
/**
* Returns the timeStamp field.
* @return the timStamp field or null if no such field.
*/
epics::pvData::PVStructurePtr getTimeStamp() const;
/**
* Returns the alarm field.
* @return the alarm field or null if no such field.
*/
epics::pvData::PVStructurePtr getAlarm() const;
/**
* Returns the name field.
* @return the name field.
*/
epics::pvData::PVStringPtr getName() const;
/**
* Returns the value field.
* @return the value field.
*/
epics::pvData::PVUnionPtr getValue() const;
/**
* Returns the tags field.
* @return the tags field or null if no such field.
*/
epics::pvData::PVStringArrayPtr getTags() const;
private:
NTAttribute(epics::pvData::PVStructurePtr const & pvStructure);
epics::pvData::PVStructurePtr pvNTAttribute;
epics::pvData::PVUnionPtr pvValue;
friend class detail::NTAttributeBuilder;
};
}}
#endif /* NTATTRIBUTE_H */

289
src/pv/ntcontinuum.h Normal file
View File

@@ -0,0 +1,289 @@
/* ntcontinuum.h */
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#ifndef NTCONTINUUM_H
#define NTCONTINUUM_H
#ifdef epicsExportSharedSymbols
# define ntcontinuumEpicsExportSharedSymbols
# undef epicsExportSharedSymbols
#endif
#ifdef ntcontinuumEpicsExportSharedSymbols
# define epicsExportSharedSymbols
# undef ntcontinuumEpicsExportSharedSymbols
#endif
#include <pv/ntfield.h>
#include <shareLib.h>
namespace epics { namespace nt {
class NTContinuum;
typedef std::tr1::shared_ptr<NTContinuum> NTContinuumPtr;
namespace detail {
/**
* @brief Interface for in-line creating of NTContinuum.
*
* One instance can be used to create multiple instances.
* An instance of this object must not be used concurrently (an object has a state).
* @author dgh
*/
class epicsShareClass NTContinuumBuilder :
public std::tr1::enable_shared_from_this<NTContinuumBuilder>
{
public:
POINTER_DEFINITIONS(NTContinuumBuilder);
/**
* Adds descriptor field to the NTContinuum.
* @return this instance of <b>NTContinuumBuilder</b>.
*/
shared_pointer addDescriptor();
/**
* Adds alarm field to the NTContinuum.
* @return this instance of <b>NTContinuumBuilder</b>.
*/
shared_pointer addAlarm();
/**
* Adds timeStamp field to the NTContinuum.
* @return this instance of <b>NTContinuumBuilder</b>.
*/
shared_pointer addTimeStamp();
/**
* 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();
/**
* 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();
/**
* 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();
/**
* 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);
private:
NTContinuumBuilder();
void reset();
bool dim;
bool descriptor;
bool alarm;
bool timeStamp;
// NOTE: this preserves order, however it does not handle duplicates
epics::pvData::StringArray extraFieldNames;
epics::pvData::FieldConstPtrArray extraFields;
friend class ::epics::nt::NTContinuum;
};
}
typedef std::tr1::shared_ptr<detail::NTContinuumBuilder> NTContinuumBuilderPtr;
/**
* @brief Convenience Class for NTContinuum
*
* @author dgh
*/
class epicsShareClass NTContinuum
{
public:
POINTER_DEFINITIONS(NTContinuum);
static const std::string URI;
/**
* 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 & pvStructure);
/**
* 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 & pvStructure);
/**
* 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);
/**
* 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);
/**
* 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);
/**
* 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);
/**
* 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.
*
* @return (false,true) if the wrapped PVStructure (is not, is) a valid NTContinuum
*/
bool isValid();
/**
* Creates an NTContinuum builder instance.
* @return builder instance.
*/
static NTContinuumBuilderPtr createBuilder();
/**
* Destructor.
*/
~NTContinuum() {}
/**
* 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;
/**
* 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;
/**
* Returns the PVStructure wrapped by this instance.
* @return the PVStructure wrapped by this instance.
*/
epics::pvData::PVStructurePtr getPVStructure() const;
/**
* Returns the descriptor field.
* @return the descriptor field or null if no such field.
*/
epics::pvData::PVStringPtr getDescriptor() const;
/**
* Returns the timeStamp field.
* @return the timStamp field or null if no such field.
*/
epics::pvData::PVStructurePtr getTimeStamp() const;
/**
* Returns the alarm field.
* @return the alarm field or null if no such field.
*/
epics::pvData::PVStructurePtr getAlarm() const;
/**
* Returns the base field.
* @return the base field.
*/
epics::pvData::PVDoubleArrayPtr getBase() const;
/**
* Returns the value field.
* @return the value field.
*/
epics::pvData::PVDoubleArrayPtr getValue() const;
/**
* Returns the units field.
* @return the units field.
*/
epics::pvData::PVStringArrayPtr getUnits() const;
private:
NTContinuum(epics::pvData::PVStructurePtr const & pvStructure);
epics::pvData::PVStructurePtr pvNTContinuum;
epics::pvData::PVDoubleArrayPtr pvValue;
friend class detail::NTContinuumBuilder;
};
}}
#endif /* NTCONTINUUM_H */

View File

@@ -1,8 +1,7 @@
/* ntenum.h */
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#ifndef NTENUM_H
#define NTENUM_H
@@ -42,47 +41,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 +122,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 +216,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

@@ -1,8 +1,7 @@
/* ntfield.h */
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#ifndef NTFIELD_H
#define NTFIELD_H
@@ -47,7 +46,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 +54,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 +161,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;

306
src/pv/nthistogram.h Normal file
View File

@@ -0,0 +1,306 @@
/* nthistogram.h */
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#ifndef NTHISTOGRAM_H
#define NTHISTOGRAM_H
#ifdef epicsExportSharedSymbols
# define nthistogramEpicsExportSharedSymbols
# undef epicsExportSharedSymbols
#endif
#ifdef nthistogramEpicsExportSharedSymbols
# define epicsExportSharedSymbols
# undef nthistogramEpicsExportSharedSymbols
#endif
#include <pv/ntfield.h>
#include <shareLib.h>
namespace epics { namespace nt {
class NTHistogram;
typedef std::tr1::shared_ptr<NTHistogram> NTHistogramPtr;
namespace detail {
/**
* @brief Interface for in-line creating of NTHistogram.
*
* One instance can be used to create multiple instances.
* An instance of this object must not be used concurrently (an object has a state).
* @author dgh
*/
class epicsShareClass NTHistogramBuilder :
public std::tr1::enable_shared_from_this<NTHistogramBuilder>
{
public:
POINTER_DEFINITIONS(NTHistogramBuilder);
/**
* 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);
/**
* Adds descriptor field to the NTHistogram.
* @return this instance of <b>NTHistogramBuilder</b>.
*/
shared_pointer addDescriptor();
/**
* Adds alarm field to the NTHistogram.
* @return this instance of <b>NTHistogramBuilder</b>.
*/
shared_pointer addAlarm();
/**
* Adds timeStamp field to the NTHistogram.
* @return this instance of <b>NTHistogramBuilder</b>.
*/
shared_pointer addTimeStamp();
/**
* 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();
/**
* 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();
/**
* 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();
/**
* 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);
private:
NTHistogramBuilder();
void reset();
bool valueTypeSet;
epics::pvData::ScalarType valueType;
bool dim;
bool descriptor;
bool alarm;
bool timeStamp;
// NOTE: this preserves order, however it does not handle duplicates
epics::pvData::StringArray extraFieldNames;
epics::pvData::FieldConstPtrArray extraFields;
friend class ::epics::nt::NTHistogram;
};
}
typedef std::tr1::shared_ptr<detail::NTHistogramBuilder> NTHistogramBuilderPtr;
/**
* @brief Convenience Class for NTHistogram
*
* @author dgh
*/
class epicsShareClass NTHistogram
{
public:
POINTER_DEFINITIONS(NTHistogram);
static const std::string URI;
/**
* 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 & pvStructure);
/**
* 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 & pvStructure);
/**
* 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);
/**
* 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);
/**
* 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);
/**
* 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);
/**
* 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.
*
* @return (false,true) if the wrapped PVStructure (is not, is) a valid NTHistogram
*/
bool isValid();
/**
* Creates an NTHistogram builder instance.
* @return builder instance.
*/
static NTHistogramBuilderPtr createBuilder();
/**
* Destructor.
*/
~NTHistogram() {}
/**
* 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;
/**
* 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 wrapped by this instance.
* @return the PVStructure wrapped by this instance.
*/
epics::pvData::PVStructurePtr getPVStructure() const;
/**
* Returns the descriptor field.
* @return the descriptor field or null if no such field.
*/
epics::pvData::PVStringPtr getDescriptor() const;
/**
* Returns the timeStamp field.
* @return the timStamp field or null if no such field.
*/
epics::pvData::PVStructurePtr getTimeStamp() const;
/**
* Returns the alarm field.
* @return the alarm field or null if no such field.
*/
epics::pvData::PVStructurePtr getAlarm() const;
/**
* Returns the ranges field.
* @return the ranges field.
*/
epics::pvData::PVDoubleArrayPtr getRanges() const;
/**
* Returns the value field.
* @return the value field.
*/
epics::pvData::PVScalarArrayPtr getValue() const;
/**
* 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
{
return std::tr1::dynamic_pointer_cast<PVT>(pvValue);
}
private:
NTHistogram(epics::pvData::PVStructurePtr const & pvStructure);
epics::pvData::PVStructurePtr pvNTHistogram;
epics::pvData::PVScalarArrayPtr pvValue;
friend class detail::NTHistogramBuilder;
};
}}
#endif /* NTHISTOGRAM_H */

View File

@@ -1,7 +1,7 @@
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/* ntid.h */
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#ifndef NTID_H
#define NTID_H
@@ -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();

312
src/pv/ntmatrix.h Normal file
View File

@@ -0,0 +1,312 @@
/* ntmatrix.h */
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#ifndef NTMATRIX_H
#define NTMATRIX_H
#ifdef epicsExportSharedSymbols
# define ntmatrixEpicsExportSharedSymbols
# undef epicsExportSharedSymbols
#endif
#include <pv/pvDisplay.h>
#ifdef ntmatrixEpicsExportSharedSymbols
# define epicsExportSharedSymbols
# undef ntmatrixEpicsExportSharedSymbols
#endif
#include <pv/ntfield.h>
#include <shareLib.h>
namespace epics { namespace nt {
class NTMatrix;
typedef std::tr1::shared_ptr<NTMatrix> NTMatrixPtr;
namespace detail {
/**
* @brief Interface for in-line creating of NTMatrix.
*
* One instance can be used to create multiple instances.
* An instance of this object must not be used concurrently (an object has a state).
* @author dgh
*/
class epicsShareClass NTMatrixBuilder :
public std::tr1::enable_shared_from_this<NTMatrixBuilder>
{
public:
POINTER_DEFINITIONS(NTMatrixBuilder);
/**
* Adds dimension field to the NTMatrix.
* @return this instance of <b>NTMatrixBuilder</b>.
*/
shared_pointer addDim();
/**
* Adds descriptor field to the NTMatrix.
* @return this instance of <b>NTMatrixBuilder</b>.
*/
shared_pointer addDescriptor();
/**
* Adds alarm field to the NTMatrix.
* @return this instance of <b>NTMatrixBuilder</b>.
*/
shared_pointer addAlarm();
/**
* Adds timeStamp field to the NTMatrix.
* @return this instance of <b>NTMatrixBuilder</b>.
*/
shared_pointer addTimeStamp();
/**
* Adds display field to the NTMatrix.
* @return this instance of <b>NTMatrixBuilder</b>.
*/
shared_pointer addDisplay();
/**
* 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();
/**
* 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();
/**
* 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();
/**
* 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);
private:
NTMatrixBuilder();
void reset();
bool dim;
bool descriptor;
bool alarm;
bool timeStamp;
bool display;
// NOTE: this preserves order, however it does not handle duplicates
epics::pvData::StringArray extraFieldNames;
epics::pvData::FieldConstPtrArray extraFields;
friend class ::epics::nt::NTMatrix;
};
}
typedef std::tr1::shared_ptr<detail::NTMatrixBuilder> NTMatrixBuilderPtr;
/**
* @brief Convenience Class for NTMatrix
*
* @author dgh
*/
class epicsShareClass NTMatrix
{
public:
POINTER_DEFINITIONS(NTMatrix);
static const std::string URI;
/**
* 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 & pvStructure);
/**
* 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 & pvStructure);
/**
* 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);
/**
* 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);
/**
* 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);
/**
* 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);
/**
* 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.
*
* @return (false,true) if the wrapped PVStructure (is not, is) a valid NTMatrix
*/
bool isValid();
/**
* Creates an NTMatrix builder instance.
* @return builder instance.
*/
static NTMatrixBuilderPtr createBuilder();
/**
* Destructor.
*/
~NTMatrix() {}
/**
* 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;
/**
* 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;
/**
* 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;
/**
* Get the PVStructure wrapped by this instance.
* @return the PVStructure wrapped by this instance.
*/
epics::pvData::PVStructurePtr getPVStructure() const;
/**
* Returns the descriptor field.
* @return the descriptor field or null if no such field.
*/
epics::pvData::PVStringPtr getDescriptor() const;
/**
* Returns the timeStamp field.
* @return the timStamp field or null if no such field.
*/
epics::pvData::PVStructurePtr getTimeStamp() const;
/**
* Returns the alarm field.
* @return the alarm field or null if no such field.
*/
epics::pvData::PVStructurePtr getAlarm() const;
/**
* Returns the display field.
* @return the display field or null if no such field.
*/
epics::pvData::PVStructurePtr getDisplay() const;
/**
* Returns the value field.
* @return the value field.
*/
epics::pvData::PVDoubleArrayPtr getValue() const;
/**
* Returns the dim field.
* @return the dim field or or null if no such field.
*/
epics::pvData::PVIntArrayPtr getDim() const;
private:
NTMatrix(epics::pvData::PVStructurePtr const & pvStructure);
epics::pvData::PVStructurePtr pvNTMatrix;
epics::pvData::PVDoubleArrayPtr pvValue;
friend class detail::NTMatrixBuilder;
};
}}
#endif /* NTMATRIX_H */

View File

@@ -1,8 +1,7 @@
/* ntmultiChannel.h */
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#ifndef NTMULTICHANNEL_H
#define NTMULTICHANNEL_H
@@ -54,81 +53,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 +186,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 +280,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

@@ -1,8 +1,7 @@
/* ntnameValue.h */
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#ifndef NTNAMEVALUE_H
#define NTNAMEVALUE_H
@@ -45,55 +44,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 +133,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 +227,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

@@ -1,8 +1,7 @@
/* ntndarray.h */
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#ifndef NTNDARRAY_H
#define NTNDARRAY_H
@@ -48,53 +47,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 +133,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 +228,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 +244,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;

312
src/pv/ntndarrayAttribute.h Normal file
View File

@@ -0,0 +1,312 @@
/* ntndarrayAttribute.h */
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#ifndef NTNDARRAYATTRIBUTE_H
#define NTNDARRAYATTRIBUTE_H
#ifdef epicsExportSharedSymbols
# define ntndarrayAttributeEpicsExportSharedSymbols
# undef epicsExportSharedSymbols
#endif
#ifdef ntndarrayAttributeEpicsExportSharedSymbols
# define epicsExportSharedSymbols
# undef ntndarrayAttributeEpicsExportSharedSymbols
#endif
#include <pv/ntfield.h>
#include <shareLib.h>
namespace epics { namespace nt {
class NTNDArrayAttribute;
typedef std::tr1::shared_ptr<NTNDArrayAttribute> NTNDArrayAttributePtr;
namespace detail {
/**
* @brief Interface for in-line creating of NTAttribute extended as required by NTNDArray
*
* One instance can be used to create multiple instances.
* An instance of this object must not be used concurrently (an object has a state).
* @author dgh
*/
class epicsShareClass NTNDArrayAttributeBuilder :
public std::tr1::enable_shared_from_this<NTNDArrayAttributeBuilder>
{
public:
POINTER_DEFINITIONS(NTNDArrayAttributeBuilder);
/**
* Adds tags field to the NTNDArrayAttribute.
* @return this instance of <b>NTNDArrayAttributeBuilder</b>.
*/
shared_pointer addTags();
/**
* Adds descriptor field to the NTNDArrayAttribute.
* @return this instance of <b>NTNDArrayAttributeBuilder</b>.
*/
shared_pointer addDescriptor();
/**
* Adds alarm field to the NTNDArrayAttribute.
* @return this instance of <b>NTNDArrayAttributeBuilder</b>.
*/
shared_pointer addAlarm();
/**
* Adds timeStamp field to the NTNDArrayAttribute.
* @return this instance of <b>NTNDArrayAttributeBuilder</b>.
*/
shared_pointer addTimeStamp();
/**
* 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();
/**
* 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();
/**
* 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();
/**
* 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);
protected://private:
NTNDArrayAttributeBuilder();
void reset();
bool tags;
bool descriptor;
bool alarm;
bool timeStamp;
// NOTE: this preserves order, however it does not handle duplicates
epics::pvData::StringArray extraFieldNames;
epics::pvData::FieldConstPtrArray extraFields;
friend class ::epics::nt::NTNDArrayAttribute;
};
}
typedef std::tr1::shared_ptr<detail::NTNDArrayAttributeBuilder> NTNDArrayAttributeBuilderPtr;
/**
* @brief Convenience Class for NTNDArrayAttribute
*
* @author dgh
*/
class epicsShareClass NTNDArrayAttribute
{
public:
POINTER_DEFINITIONS(NTNDArrayAttribute);
static const std::string URI;
/**
* 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 & pvStructure);
/**
* 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 & pvStructure);
/**
* 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);
/**
* 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);
/**
* 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);
/**
* 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);
/**
* 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.
*
* @return (false,true) if the wrapped PVStructure (is not, is) a valid NTNDArrayAttribute
*/
bool isValid();
/**
* Creates an NTNDArrayAttribute builder instance.
* @return builder instance.
*/
static NTNDArrayAttributeBuilderPtr createBuilder();
/**
* Destructor.
*/
~NTNDArrayAttribute() {}
/**
* 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;
/**
* 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;
/**
* Returns the PVStructure wrapped by this instance.
* @return the PVStructure wrapped by this instance.
*/
epics::pvData::PVStructurePtr getPVStructure() const;
/**
* Returns the descriptor field.
* @return the descriptor field.
*/
epics::pvData::PVStringPtr getDescriptor() const;
/**
* Returns the timeStamp field.
* @return the timStamp field or null if no such field.
*/
epics::pvData::PVStructurePtr getTimeStamp() const;
/**
* Returns the alarm field.
* @return the alarm field or null if no alarm field.
*/
epics::pvData::PVStructurePtr getAlarm() const;
/**
* Returns the name field.
* @return the name field.
*/
epics::pvData::PVStringPtr getName() const;
/**
* Returns the value field.
* @return the value field.
*/
epics::pvData::PVUnionPtr getValue() const;
/**
* Returns the tags field.
* @return the tags field or null if no such field.
*/
epics::pvData::PVStringArrayPtr getTags() const;
/**
* Returns the sourceType field.
* @return the sourceType field.
*/
epics::pvData::PVIntPtr getSourceType() const;
/**
* Returns the source field.
* @return the source field.
*/
epics::pvData::PVStringPtr getSource() const;
private:
NTNDArrayAttribute(epics::pvData::PVStructurePtr const & pvStructure);
epics::pvData::PVStructurePtr pvNTNDArrayAttribute;
epics::pvData::PVUnionPtr pvValue;
friend class detail::NTNDArrayAttributeBuilder;
};
}}
#endif /* NTNDARRAYATTRIBUTE_H */

View File

@@ -1,8 +1,7 @@
/* ntscalar.h */
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#ifndef NTSCALAR_H
#define NTSCALAR_H
@@ -45,66 +44,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 +149,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 +245,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

@@ -1,8 +1,7 @@
/* ntscalarArray.h */
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#ifndef NTSCALARARRAY_H
#define NTSCALARARRAY_H
@@ -46,66 +45,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 +158,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 +253,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

@@ -1,8 +1,7 @@
/* ntscalarMultiChannel.h */
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#ifndef NTSCALARMULTICHANNEL_H
#define NTSCALARMULTICHANNEL_H
@@ -49,87 +48,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 +189,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 +281,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

@@ -1,8 +1,7 @@
/* nttable.h */
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#ifndef NTTABLE_H
#define NTTABLE_H
@@ -48,7 +47,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 +55,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 +88,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 +142,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 +237,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

272
src/pv/ntunion.h Normal file
View File

@@ -0,0 +1,272 @@
/* ntunion.h */
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#ifndef NTUNION_H
#define NTUNION_H
#ifdef epicsExportSharedSymbols
# define ntunionEpicsExportSharedSymbols
# undef epicsExportSharedSymbols
#endif
#ifdef ntunionEpicsExportSharedSymbols
# define epicsExportSharedSymbols
# undef ntunionEpicsExportSharedSymbols
#endif
#include <pv/ntfield.h>
#include <shareLib.h>
namespace epics { namespace nt {
class NTUnion;
typedef std::tr1::shared_ptr<NTUnion> NTUnionPtr;
namespace detail {
/**
* @brief Interface for in-line creating of NTUnion.
*
* One instance can be used to create multiple instances.
* An instance of this object must not be used concurrently (an object has a state).
* @author dgh
*/
class epicsShareClass NTUnionBuilder :
public std::tr1::enable_shared_from_this<NTUnionBuilder>
{
public:
POINTER_DEFINITIONS(NTUnionBuilder);
/**
* Adds descriptor field to the NTUnion.
* @return this instance of <b>NTUnionBuilder</b>.
*/
shared_pointer addDescriptor();
/**
* Adds alarm field to the NTUnion.
* @return this instance of <b>NTUnionBuilder</b>.
*/
shared_pointer addAlarm();
/**
* Adds timeStamp field to the NTUnion.
* @return this instance of <b>NTUnionBuilder</b>.
*/
shared_pointer addTimeStamp();
/**
* 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();
/**
* 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();
/**
* 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();
/**
* 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);
private:
NTUnionBuilder();
epics::pvData::UnionConstPtr valueType;
void reset();
bool descriptor;
bool alarm;
bool timeStamp;
// NOTE: this preserves order, however it does not handle duplicates
epics::pvData::StringArray extraFieldNames;
epics::pvData::FieldConstPtrArray extraFields;
friend class ::epics::nt::NTUnion;
};
}
typedef std::tr1::shared_ptr<detail::NTUnionBuilder> NTUnionBuilderPtr;
/**
* @brief Convenience Class for NTUnion
*
* @author dgh
*/
class epicsShareClass NTUnion
{
public:
POINTER_DEFINITIONS(NTUnion);
static const std::string URI;
/**
* 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 & pvStructure);
/**
* 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 & pvStructure);
/**
* 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);
/**
* 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);
/**
* 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);
/**
* 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);
/**
* 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.
*
* @return (false,true) if wrapped PVStructure (is not, is) a valid NTUnion
*/
bool isValid();
/**
* Creates an NTUnion builder instance.
* @return builder instance.
*/
static NTUnionBuilderPtr createBuilder();
/**
* Destructor.
*/
~NTUnion() {}
/**
* 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;
/**
* 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;
/**
* Returns the PVStructure wrapped by this instance.
* @return the PVStructure wrapped by this instance.
*/
epics::pvData::PVStructurePtr getPVStructure() const;
/**
* Returns the descriptor field.
* @return the descriptor field or null if no descriptor field.
*/
epics::pvData::PVStringPtr getDescriptor() const;
/**
* Returns the timeStamp field.
* @return the timStamp field or null if no timeStamp field.
*/
epics::pvData::PVStructurePtr getTimeStamp() const;
/**
* Returns the alarm field.
* @return the alarm field or null if no alarm field.
*/
epics::pvData::PVStructurePtr getAlarm() const;
/**
* Returns the value field.
* @return the value field.
*/
epics::pvData::PVUnionPtr getValue() const;
private:
NTUnion(epics::pvData::PVStructurePtr const & pvStructure);
epics::pvData::PVStructurePtr pvNTUnion;
epics::pvData::PVUnionPtr pvValue;
friend class detail::NTUnionBuilder;
};
}}
#endif /* NTUNION_H */

View File

@@ -1,8 +1,7 @@
/* nturi.h */
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#ifndef NTURI_H
#define NTURI_H
@@ -45,13 +44,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 +58,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 +66,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 +74,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 +89,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 +141,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 +236,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 +274,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

@@ -1,8 +1,7 @@
/* ntutils.h */
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#ifndef NTUTILS_H
#define NTUTILS_H
@@ -23,9 +22,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

@@ -1,5 +1,80 @@
TOP = ..
include $(TOP)/configure/CONFIG
DIRS += nt
include $(TOP)/configure/RULES_DIRS
TOP=..
include $(TOP)/configure/CONFIG
PROD_LIBS += nt pvData Com
TESTPROD_HOST += ntfieldTest
ntfieldTest_SRCS += ntfieldTest.cpp
TESTS += ntfieldTest
TESTPROD_HOST += ntscalarTest
ntscalarTest_SRCS += ntscalarTest.cpp
TESTS += ntscalarTest
TESTPROD_HOST += ntscalarArrayTest
ntscalarArrayTest_SRCS += ntscalarArrayTest.cpp
TESTS += ntscalarArrayTest
TESTPROD_HOST += ntnameValueTest
ntnameValueTest_SRCS += ntnameValueTest.cpp
TESTS += ntnameValueTest
TESTPROD_HOST += ntmultiChannelTest
ntmultiChannelTest_SRCS += ntmultiChannelTest.cpp
TESTS += ntmultiChannelTest
TESTPROD_HOST += ntscalarMultiChannelTest
ntscalarMultiChannelTest_SRCS += ntscalarMultiChannelTest.cpp
TESTS += ntscalarMultiChannelTest
TESTPROD_HOST += nttableTest
nttableTest_SRCS = nttableTest.cpp
TESTS += nttableTest
TESTPROD_HOST += ntndarrayTest
ntndarrayTest_SRCS = ntndarrayTest.cpp
TESTS += ntndarrayTest
TESTPROD_HOST += ntmatrixTest
ntmatrixTest_SRCS = ntmatrixTest.cpp
TESTS += ntmatrixTest
TESTPROD_HOST += ntenumTest
ntenumTest_SRCS = ntenumTest.cpp
TESTS += ntenumTest
TESTPROD_HOST += ntunionTest
ntunionTest_SRCS = ntunionTest.cpp
TESTS += ntunionTest
TESTPROD_HOST += ntaggregateTest
ntaggregateTest_SRCS = ntaggregateTest.cpp
TESTS += ntaggregateTest
TESTPROD_HOST += ntattributeTest
ntattributeTest_SRCS = ntattributeTest.cpp
TESTS += ntattributeTest
TESTPROD_HOST += ntndarrayAttributeTest
ntndarrayAttributeTest_SRCS = ntndarrayAttributeTest.cpp
TESTS += ntndarrayAttributeTest
TESTPROD_HOST += ntcontinuumTest
ntcontinuumTest = ntcontinuumTest.cpp
TESTS += ntcontinuumTest
TESTPROD_HOST += nthistogramTest
nthistogramTest_SRCS = nthistogramTest.cpp
TESTS += nthistogramTest
TESTPROD_HOST += ntutilsTest
ntutilsTest_SRCS = ntutilsTest.cpp
TESTS += ntutilsTest
TESTSCRIPTS_HOST += $(TESTS:%=%.t)
include $(TOP)/configure/RULES
#----------------------------------------
# ADD RULES AFTER THIS LINE

View File

@@ -1,80 +0,0 @@
TOP=../..
include $(TOP)/configure/CONFIG
PROD_LIBS += nt pvData Com
TESTPROD_HOST += ntfieldTest
ntfieldTest_SRCS += ntfieldTest.cpp
TESTS += ntfieldTest
TESTPROD_HOST += ntscalarTest
ntscalarTest_SRCS += ntscalarTest.cpp
TESTS += ntscalarTest
TESTPROD_HOST += ntscalarArrayTest
ntscalarArrayTest_SRCS += ntscalarArrayTest.cpp
TESTS += ntscalarArrayTest
TESTPROD_HOST += ntnameValueTest
ntnameValueTest_SRCS += ntnameValueTest.cpp
TESTS += ntnameValueTest
TESTPROD_HOST += ntmultiChannelTest
ntmultiChannelTest_SRCS += ntmultiChannelTest.cpp
TESTS += ntmultiChannelTest
TESTPROD_HOST += ntscalarMultiChannelTest
ntscalarMultiChannelTest_SRCS += ntscalarMultiChannelTest.cpp
TESTS += ntscalarMultiChannelTest
TESTPROD_HOST += nttableTest
nttableTest_SRCS = nttableTest.cpp
TESTS += nttableTest
TESTPROD_HOST += ntndarrayTest
ntndarrayTest_SRCS = ntndarrayTest.cpp
TESTS += ntndarrayTest
TESTPROD_HOST += ntmatrixTest
ntmatrixTest_SRCS = ntmatrixTest.cpp
TESTS += ntmatrixTest
TESTPROD_HOST += ntenumTest
ntenumTest_SRCS = ntenumTest.cpp
TESTS += ntenumTest
TESTPROD_HOST += ntunionTest
ntunionTest_SRCS = ntunionTest.cpp
TESTS += ntunionTest
TESTPROD_HOST += ntaggregateTest
ntaggregateTest_SRCS = ntaggregateTest.cpp
TESTS += ntaggregateTest
TESTPROD_HOST += ntattributeTest
ntattributeTest_SRCS = ntattributeTest.cpp
TESTS += ntattributeTest
TESTPROD_HOST += ntndarrayAttributeTest
ntndarrayAttributeTest_SRCS = ntndarrayAttributeTest.cpp
TESTS += ntndarrayAttributeTest
TESTPROD_HOST += ntcontinuumTest
ntattributeTest_SRCS = ntcontinuumTest.cpp
TESTS += ntcontinuumTest
TESTPROD_HOST += nthistogramTest
ntattributeTest_SRCS = nthistogramTest.cpp
TESTS += nthistogramTest
TESTPROD_HOST += ntutilsTest
ntutilsTest_SRCS = ntutilsTest.cpp
TESTS += ntutilsTest
TESTSCRIPTS_HOST += $(TESTS:%=%.t)
include $(TOP)/configure/RULES
#----------------------------------------
# ADD RULES AFTER THIS LINE

View File

@@ -1,7 +1,6 @@
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#include <epicsUnitTest.h>
@@ -66,6 +65,9 @@ void test_ntaggregate()
create();
testOk1(ntAggregate.get() != 0);
testOk1(NTAggregate::is_a(ntAggregate->getPVStructure()));
testOk1(NTAggregate::isCompatible(ntAggregate->getPVStructure()));
testOk1(ntAggregate->getPVStructure().get() != 0);
testOk1(ntAggregate->getValue().get() != 0);
testOk1(ntAggregate->getDescriptor().get() != 0);
@@ -165,7 +167,7 @@ void test_wrap()
}
MAIN(testNTAggregate) {
testPlan(28);
testPlan(30);
test_builder();
test_ntaggregate();
test_wrap();

View File

@@ -1,8 +1,6 @@
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
*
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#include <epicsUnitTest.h>
#include <testMain.h>
@@ -76,6 +74,9 @@ void test_ntattribute()
create();
testOk1(ntAttribute.get() != 0);
testOk1(NTAttribute::is_a(ntAttribute->getPVStructure()));
testOk1(NTAttribute::isCompatible(ntAttribute->getPVStructure()));
testOk1(ntAttribute->getPVStructure().get() != 0);
testOk1(ntAttribute->getName().get() != 0);
testOk1(ntAttribute->getValue().get() != 0);
@@ -166,7 +167,7 @@ void test_wrap()
}
MAIN(testNTAttribute) {
testPlan(33);
testPlan(35);
test_builder();
test_ntattribute();
test_wrap();

View File

@@ -1,7 +1,6 @@
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#include <epicsUnitTest.h>
@@ -72,6 +71,9 @@ void test_ntcontinuum()
create();
testOk1(ntContinuum.get() != 0);
testOk1(NTContinuum::is_a(ntContinuum->getPVStructure()));
testOk1(NTContinuum::isCompatible(ntContinuum->getPVStructure()));
testOk1(ntContinuum->getPVStructure().get() != 0);
testOk1(ntContinuum->getDescriptor().get() != 0);
testOk1(ntContinuum->getAlarm().get() != 0);
@@ -265,7 +267,7 @@ void test_extra()
MAIN(testNTContinuum) {
testPlan(59);
testPlan(61);
test_builder();
test_ntcontinuum();
test_wrap();

View File

@@ -1,9 +1,7 @@
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#include <epicsUnitTest.h>
#include <testMain.h>
@@ -67,6 +65,9 @@ void test_ntenum()
create();
testOk1(ntEnum.get() != 0);
testOk1(NTEnum::is_a(ntEnum->getPVStructure()));
testOk1(NTEnum::isCompatible(ntEnum->getPVStructure()));
testOk1(ntEnum->getPVStructure().get() != 0);
testOk1(ntEnum->getValue().get() != 0);
testOk1(ntEnum->getDescriptor().get() != 0);
@@ -178,7 +179,7 @@ void test_wrap()
}
MAIN(testNTEnum) {
testPlan(30);
testPlan(32);
test_builder();
test_ntenum();
test_wrap();

View File

@@ -1,7 +1,6 @@
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
/*
* ntfieldTest.cpp

View File

@@ -1,7 +1,6 @@
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#include <epicsUnitTest.h>
@@ -84,6 +83,9 @@ void test_nthistogram()
create();
testOk1(ntHistogram.get() != 0);
testOk1(NTHistogram::is_a(ntHistogram->getPVStructure()));
testOk1(NTHistogram::isCompatible(ntHistogram->getPVStructure()));
testOk1(ntHistogram->getPVStructure().get() != 0);
testOk1(ntHistogram->getDescriptor().get() != 0);
testOk1(ntHistogram->getAlarm().get() != 0);
@@ -250,7 +252,7 @@ void test_extra()
MAIN(testNTHistogram) {
testPlan(50);
testPlan(52);
test_builder();
test_nthistogram();
test_wrap();

View File

@@ -1,9 +1,7 @@
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#include <epicsUnitTest.h>
#include <testMain.h>
@@ -59,7 +57,7 @@ void test_ntmatrix()
NTMatrixBuilderPtr builder = NTMatrix::createBuilder();
testOk(builder.get() != 0, "Got builder");
NTMatrixPtr ntScalarArray = builder->
NTMatrixPtr ntMatrix = builder->
//arrayValue(pvInt)->
addDim()->
addDescriptor()->
@@ -67,15 +65,18 @@ void test_ntmatrix()
addTimeStamp()->
addDisplay()->
create();
testOk1(ntScalarArray.get() != 0);
testOk1(ntMatrix.get() != 0);
testOk1(ntScalarArray->getPVStructure().get() != 0);
testOk1(ntScalarArray->getValue().get() != 0);
testOk1(ntScalarArray->getDim().get() != 0);
testOk1(ntScalarArray->getDescriptor().get() != 0);
testOk1(ntScalarArray->getAlarm().get() != 0);
testOk1(ntScalarArray->getTimeStamp().get() != 0);
testOk1(ntScalarArray->getDisplay().get() != 0);
testOk1(NTMatrix::is_a(ntMatrix->getPVStructure()));
testOk1(NTMatrix::isCompatible(ntMatrix->getPVStructure()));
testOk1(ntMatrix->getPVStructure().get() != 0);
testOk1(ntMatrix->getValue().get() != 0);
testOk1(ntMatrix->getDim().get() != 0);
testOk1(ntMatrix->getDescriptor().get() != 0);
testOk1(ntMatrix->getAlarm().get() != 0);
testOk1(ntMatrix->getTimeStamp().get() != 0);
testOk1(ntMatrix->getDisplay().get() != 0);
//
// example how to set values
@@ -85,7 +86,7 @@ void test_ntmatrix()
newValues.push_back(2.0);
newValues.push_back(8.0);
PVDoubleArrayPtr pvValueField = ntScalarArray->getValue();
PVDoubleArrayPtr pvValueField = ntMatrix->getValue();
pvValueField->replace(freeze(newValues));
//
@@ -102,7 +103,7 @@ void test_ntmatrix()
// timeStamp ops
//
PVTimeStamp pvTimeStamp;
if (ntScalarArray->attachTimeStamp(pvTimeStamp))
if (ntMatrix->attachTimeStamp(pvTimeStamp))
{
testPass("timeStamp attach");
@@ -123,7 +124,7 @@ void test_ntmatrix()
// alarm ops
//
PVAlarm pvAlarm;
if (ntScalarArray->attachAlarm(pvAlarm))
if (ntMatrix->attachAlarm(pvAlarm))
{
testPass("alarm attach");
@@ -141,7 +142,7 @@ void test_ntmatrix()
// display ops
//
PVDisplay pvDisplay;
if (ntScalarArray->attachDisplay(pvDisplay))
if (ntMatrix->attachDisplay(pvDisplay))
{
testPass("display attach");
@@ -160,10 +161,10 @@ void test_ntmatrix()
//
// set descriptor
//
ntScalarArray->getDescriptor()->put("This is a test NTMatrix");
ntMatrix->getDescriptor()->put("This is a test NTMatrix");
// dump ntScalarArray
std::cout << *ntScalarArray->getPVStructure() << std::endl;
// dump ntMatrix
std::cout << *ntMatrix->getPVStructure() << std::endl;
}
@@ -201,7 +202,7 @@ void test_wrap()
}
MAIN(testNTMatrix) {
testPlan(36);
testPlan(38);
test_builder();
test_ntmatrix();
test_wrap();

View File

@@ -1,7 +1,6 @@
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
/*
* ntmutiChannelTest.cpp
@@ -54,6 +53,9 @@ static void test()
create();
testOk1(multiChannel.get() != 0);
testOk1(NTMultiChannel::is_a(multiChannel->getPVStructure()));
testOk1(NTMultiChannel::isCompatible(multiChannel->getPVStructure()));
PVStructurePtr pvStructure = multiChannel->getPVStructure();
testOk1(pvStructure.get()!=NULL);
testOk1(NTMultiChannel::is_a(pvStructure->getStructure()));
@@ -186,7 +188,7 @@ void test_wrap()
MAIN(testCreateRequest)
{
testPlan(25);
testPlan(27);
test();
test_wrap();
return testDone();

View File

@@ -1,7 +1,6 @@
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#include <epicsUnitTest.h>
@@ -81,6 +80,9 @@ void test_ntnameValue()
create();
testOk1(ntNameValue.get() != 0);
testOk1(NTNameValue::is_a(ntNameValue->getPVStructure()));
testOk1(NTNameValue::isCompatible(ntNameValue->getPVStructure()));
testOk1(ntNameValue->getPVStructure().get() != 0);
testOk1(ntNameValue->getDescriptor().get() != 0);
testOk1(ntNameValue->getAlarm().get() != 0);
@@ -245,7 +247,7 @@ void test_extra()
MAIN(testNTNameValue) {
testPlan(48);
testPlan(50);
test_builder();
test_ntnameValue();
test_wrap();

View File

@@ -1,8 +1,6 @@
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
*
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#include <epicsUnitTest.h>
#include <testMain.h>
@@ -76,6 +74,9 @@ void test_ntndarrayAttribute()
create();
testOk1(ntNDArrayAttribute.get() != 0);
testOk1(NTNDArrayAttribute::is_a(ntNDArrayAttribute->getPVStructure()));
testOk1(NTNDArrayAttribute::isCompatible(ntNDArrayAttribute->getPVStructure()));
testOk1(ntNDArrayAttribute->getPVStructure().get() != 0);
testOk1(ntNDArrayAttribute->getName().get() != 0);
testOk1(ntNDArrayAttribute->getValue().get() != 0);
@@ -168,7 +169,7 @@ void test_wrap()
}
MAIN(testNTNDArrayAttribute) {
testPlan(37);
testPlan(39);
test_builder();
test_ntndarrayAttribute();
test_wrap();

View File

@@ -1,7 +1,6 @@
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#include <epicsUnitTest.h>
@@ -75,7 +74,7 @@ void test_all()
add("extra1",fieldCreate->createScalar(pvString)) ->
add("extra2",fieldCreate->createScalarArray(pvString)) ->
createPVStructure();
std::cout << *pvStructure << std::endl;
testOk1(NTNDArray::is_a(pvStructure)==true);
testOk1(NTNDArray::isCompatible(pvStructure)==true);
}
@@ -113,7 +112,7 @@ void test_wrap()
}
MAIN(testNTNDArray) {
testPlan(59);
testPlan(60);
test_builder(true);
test_builder(false);
test_builder(false); // called twice to test caching

View File

@@ -1,7 +1,6 @@
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#include <epicsUnitTest.h>
@@ -23,7 +22,7 @@ void test_builder()
testOk(builder.get() != 0, "Got builder");
StructureConstPtr structure = builder->
arrayValue(pvDouble)->
value(pvDouble)->
addDescriptor()->
addAlarm()->
addTimeStamp()->
@@ -75,7 +74,7 @@ void test_ntscalarArray()
testOk(builder.get() != 0, "Got builder");
NTScalarArrayPtr ntScalarArray = builder->
arrayValue(pvInt)->
value(pvInt)->
addDescriptor()->
addAlarm()->
addTimeStamp()->
@@ -84,6 +83,9 @@ void test_ntscalarArray()
create();
testOk1(ntScalarArray.get() != 0);
testOk1(NTScalarArray::is_a(ntScalarArray->getPVStructure()));
testOk1(NTScalarArray::isCompatible(ntScalarArray->getPVStructure()));
testOk1(ntScalarArray->getPVStructure().get() != 0);
testOk1(ntScalarArray->getValue().get() != 0);
testOk1(ntScalarArray->getDescriptor().get() != 0);
@@ -220,7 +222,7 @@ void test_wrap()
testOk(builder.get() != 0, "Got builder");
PVStructurePtr pvStructure = builder->
arrayValue(pvDouble)->
value(pvDouble)->
createPVStructure();
testOk1(pvStructure.get() != 0);
if (!pvStructure)
@@ -235,7 +237,7 @@ void test_wrap()
}
MAIN(testNTScalarArray) {
testPlan(38);
testPlan(40);
test_builder();
test_ntscalarArray();
test_wrap();

View File

@@ -1,7 +1,6 @@
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
/*
* ntscalarMultiChannelTest.cpp
@@ -54,6 +53,9 @@ static void test()
create();
testOk1(multiChannel.get() != 0);
testOk1(NTScalarMultiChannel::is_a(multiChannel->getPVStructure()));
testOk1(NTScalarMultiChannel::isCompatible(multiChannel->getPVStructure()));
PVStructurePtr pvStructure = multiChannel->getPVStructure();
testOk1(pvStructure.get()!=NULL);
testOk1(NTScalarMultiChannel::is_a(pvStructure->getStructure()));
@@ -173,7 +175,7 @@ void test_wrap()
MAIN(testCreateRequest)
{
testPlan(25);
testPlan(27);
test();
test_wrap();
return testDone();

View File

@@ -1,7 +1,6 @@
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#include <epicsUnitTest.h>
@@ -86,6 +85,9 @@ void test_ntscalar()
create();
testOk1(ntScalar.get() != 0);
testOk1(NTScalar::is_a(ntScalar->getPVStructure()));
testOk1(NTScalar::isCompatible(ntScalar->getPVStructure()));
testOk1(ntScalar->getPVStructure().get() != 0);
testOk1(ntScalar->getValue().get() != 0);
testOk1(ntScalar->getDescriptor().get() != 0);
@@ -226,7 +228,7 @@ void test_wrap()
}
MAIN(testNTScalar) {
testPlan(35);
testPlan(37);
test_builder();
test_ntscalar();
test_wrap();

View File

@@ -1,7 +1,6 @@
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#include <epicsUnitTest.h>
@@ -119,6 +118,9 @@ void test_nttable()
create();
testOk1(ntTable.get() != 0);
testOk1(NTTable::is_a(ntTable->getPVStructure()));
testOk1(NTTable::isCompatible(ntTable->getPVStructure()));
testOk1(ntTable->getPVStructure().get() != 0);
testOk1(ntTable->getDescriptor().get() != 0);
testOk1(ntTable->getAlarm().get() != 0);
@@ -236,7 +238,7 @@ void test_wrap()
}
MAIN(testNTTable) {
testPlan(48);
testPlan(50);
test_builder();
test_labels();
test_nttable();

View File

@@ -1,7 +1,6 @@
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#include <epicsUnitTest.h>
@@ -65,6 +64,9 @@ void test_ntunion()
create();
testOk1(ntUnion.get() != 0);
testOk1(NTUnion::is_a(ntUnion->getPVStructure()));
testOk1(NTUnion::isCompatible(ntUnion->getPVStructure()));
testOk1(ntUnion->getPVStructure().get() != 0);
testOk1(ntUnion->getValue().get() != 0);
testOk1(ntUnion->getDescriptor().get() != 0);
@@ -157,7 +159,7 @@ void test_wrap()
}
MAIN(testNTUnion) {
testPlan(27);
testPlan(29);
test_builder();
test_ntunion();
test_wrap();

View File

@@ -1,7 +1,6 @@
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* This software is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
#include <epicsUnitTest.h>