add header file to overview doc

This commit is contained in:
Marty Kraimer
2011-12-14 15:14:41 -05:00
parent 3efdac836c
commit 794b3ef4df

View File

@@ -16,12 +16,41 @@
.diagram { text-align: center; margin: 2.5em 0 }
body { margin-right: 10% }
/*]]>*/</style>
</head>
<body>
<h1 style="text-align: center">EPICS pvDataCPP<br />
2011.12.26</h1>
<div class="head">
<h1>EPICS pvDataCPP</h1>
<!-- Maturity: Working Draft or Request for Comments, or Recommendation, and date. -->
<h2 class="nocount" id="L50">EPICS v4 Working Group, Working Draft,
14-Dec-2011</h2>
<dl>
<dt>This version:</dt>
<dd><a
href="http://epics-pvdata.sourceforge.net/pvDataCPP_20111214.html">pvDataCPP_20111214.html</a></dd>
<dt>Latest version:</dt>
<dd><a
href="http://epics-pvdata.sourceforge.net/pvDataCPP.html">pvDataCPP.html</a></dd>
<dt>Editors:</dt>
<dd>Marty Kraimer, BNL</dd>
</dl>
<hr />
</div>
<h2 class="nocount" id="L72">Abstract</h2>
<p>This document describes the C++ implementation of EPICS v4 pvData.</p>
<p>For more information about the EPICS, please refer to the home page of the
<a href="http://www.aps.anl.gov/epics/">Experimental Physics and Industrial
Control System.</a></p>
<h2 class="nocount" id="L80">Status of this Document</h2>
<p>This is the 14-Dec-2011 version of the C++ implementation of pvData. It is a
complete implementation of pvData as currently defined. </p>
<p>TODO</p>
<ul>
@@ -35,163 +64,167 @@
<div class="toc">
<ul>
<li><a href="#L45">Preface</a>
<li><a href="#L50">EPICS v4 Working Group, Working Draft, 14-Dec-2011</a></li>
<li><a href="#L72">Abstract</a></li>
<li><a href="#L80">Status of this Document</a></li>
<li><a href="#L100">Preface</a>
<ul>
<li><a href="#L72">pvData</a>
<li><a href="#L130">pvData</a>
<ul>
<li><a href="#L76">Introspection</a></li>
<li><a href="#L144">Data</a></li>
<li><a href="#L169">Property Structures</a></li>
<li><a href="#L134">Introspection</a></li>
<li><a href="#L202">Data</a></li>
<li><a href="#L227">Property Structures</a></li>
</ul>
</li>
<li><a href="#L199">pvAccess</a></li>
<li><a href="#L260">pvIOC</a></li>
<li><a href="#L257">pvAccess</a></li>
<li><a href="#L318">pvIOC</a></li>
</ul>
</li>
<li><a href="#L307">Introduction</a></li>
<li><a href="#L399">PVData Meta Language</a>
<li><a href="#L365">Introduction</a></li>
<li><a href="#L457">PVData Meta Language</a>
<ul>
<li><a href="#L405">Definition</a></li>
<li><a href="#L599">Examples</a></li>
<li><a href="#L463">Definition</a></li>
<li><a href="#L657">Examples</a></li>
</ul>
</li>
<li><a href="#L643">PV - User Description</a>
<li><a href="#L701">PV - User Description</a>
<ul>
<li><a href="#L647">Overview</a></li>
<li><a href="#L688">pvType</a></li>
<li><a href="#L724">Process Variable Reflection</a>
<li><a href="#L705">Overview</a></li>
<li><a href="#L746">pvType</a></li>
<li><a href="#L782">Process Variable Reflection</a>
<ul>
<li><a href="#L732">Type Description</a></li>
<li><a href="#L862">Reflection Description</a></li>
<li><a href="#L790">Type Description</a></li>
<li><a href="#L920">Reflection Description</a></li>
</ul>
</li>
<li><a href="#L1077">Standard Fields</a></li>
<li><a href="#L1161">PVField - Data Interfaces</a>
<li><a href="#L1135">Standard Fields</a></li>
<li><a href="#L1219">PVField - Data Interfaces</a>
<ul>
<li><a href="#L1165">PVField</a></li>
<li><a href="#L1275">PVAuxInfo</a></li>
<li><a href="#L1309">PVScalar and extensions</a>
<li><a href="#L1223">PVField</a></li>
<li><a href="#L1333">PVAuxInfo</a></li>
<li><a href="#L1367">PVScalar and extensions</a>
<ul>
<li><a href="#L1313">Primitive PVField types</a></li>
<li><a href="#L1371">Primitive PVField types</a></li>
</ul>
</li>
<li><a href="#L1319">PVArray and Extensions</a>
<li><a href="#L1377">PVArray and Extensions</a>
<ul>
<li><a href="#L1358">PVArray Extensions</a></li>
<li><a href="#L1416">PVArray Extensions</a></li>
</ul>
</li>
<li><a href="#L1402">PVStructure</a></li>
<li><a href="#L1506">PVStructureArray</a></li>
<li><a href="#L1537">PVDataCreate</a></li>
<li><a href="#L1460">PVStructure</a></li>
<li><a href="#L1564">PVStructureArray</a></li>
<li><a href="#L1595">PVDataCreate</a></li>
</ul>
</li>
<li><a href="#L1571">Standard Data Fields</a></li>
<li><a href="#L1577">Convert</a></li>
<li><a href="#L1629">Standard Data Fields</a></li>
<li><a href="#L1635">Convert</a></li>
</ul>
</li>
<li><a href="#L1647">Namespace and Memory Management</a>
<li><a href="#L1705">Namespace and Memory Management</a>
<ul>
<li><a href="#L1651">Namespace</a></li>
<li><a href="#L1657">Memory Managemment</a>
<li><a href="#L1709">Namespace</a></li>
<li><a href="#L1715">Memory Managemment</a>
<ul>
<li><a href="#L1659">NoDefaultMethods</a></li>
<li><a href="#L1717">NoDefaultMethods</a></li>
</ul>
</li>
<li><a href="#L1665">PVData introspection objects</a></li>
<li><a href="#L1669">PVData data objects</a></li>
<li><a href="#L1673">Other code in this project</a></li>
<li><a href="#L1723">PVData introspection objects</a></li>
<li><a href="#L1727">PVData data objects</a></li>
<li><a href="#L1731">Other code in this project</a></li>
</ul>
</li>
<li><a href="#L1681">Examples</a>
<li><a href="#L1739">Examples</a>
<ul>
<li><a href="#L1685">Accessing PVData</a></li>
<li><a href="#L1704">Creating PVData</a></li>
<li><a href="#L1743">Accessing PVData</a></li>
<li><a href="#L1762">Creating PVData</a></li>
</ul>
</li>
<li><a href="#L1724">Property</a>
<li><a href="#L1782">Property</a>
<ul>
<li><a href="#L1728">Definition of Property</a></li>
<li><a href="#L1740">Standard Properties</a></li>
<li><a href="#L1821">Overview of Property Support</a></li>
<li><a href="#L1841">timeStamp</a>
<li><a href="#L1786">Definition of Property</a></li>
<li><a href="#L1798">Standard Properties</a></li>
<li><a href="#L1879">Overview of Property Support</a></li>
<li><a href="#L1899">timeStamp</a>
<ul>
<li><a href="#L1865">timeStamp.h</a></li>
<li><a href="#L1981">pvTimeStamp.h</a></li>
<li><a href="#L1923">timeStamp.h</a></li>
<li><a href="#L2039">pvTimeStamp.h</a></li>
</ul>
</li>
<li><a href="#L2021">alarm</a>
<li><a href="#L2079">alarm</a>
<ul>
<li><a href="#L2048">alarm.h</a></li>
<li><a href="#L2120">pvAlarm.h</a></li>
<li><a href="#L2106">alarm.h</a></li>
<li><a href="#L2178">pvAlarm.h</a></li>
</ul>
</li>
<li><a href="#L2160">control</a>
<li><a href="#L2218">control</a>
<ul>
<li><a href="#L2182">control.h</a></li>
<li><a href="#L2214">pvControl.h</a></li>
<li><a href="#L2240">control.h</a></li>
<li><a href="#L2272">pvControl.h</a></li>
</ul>
</li>
<li><a href="#L2254">display</a>
<li><a href="#L2312">display</a>
<ul>
<li><a href="#L2276">display.h</a></li>
<li><a href="#L2338">pvDisplay.h</a></li>
<li><a href="#L2334">display.h</a></li>
<li><a href="#L2396">pvDisplay.h</a></li>
</ul>
</li>
<li><a href="#L2378">pvEnumerated</a></li>
<li><a href="#L2436">pvEnumerated</a></li>
</ul>
</li>
<li><a href="#L2454">PVData Factories</a></li>
<li><a href="#L2474">Miscellanous Classes</a>
<li><a href="#L2512">PVData Factories</a></li>
<li><a href="#L2532">Miscellanous Classes</a>
<ul>
<li><a href="#L2478">Overview</a></li>
<li><a href="#L2570">BitSet</a></li>
<li><a href="#L2694">ByteBuffer</a></li>
<li><a href="#L2702">Event</a></li>
<li><a href="#L2731">Exception</a></li>
<li><a href="#L2739">Executor</a></li>
<li><a href="#L2770">Linked List</a></li>
<li><a href="#L2884">Lock and Mutex</a></li>
<li><a href="#L2900">Message Queue</a>
<li><a href="#L2536">Overview</a></li>
<li><a href="#L2628">BitSet</a></li>
<li><a href="#L2752">ByteBuffer</a></li>
<li><a href="#L2760">Event</a></li>
<li><a href="#L2789">Exception</a></li>
<li><a href="#L2797">Executor</a></li>
<li><a href="#L2828">Linked List</a></li>
<li><a href="#L2942">Lock and Mutex</a></li>
<li><a href="#L2958">Message Queue</a>
<ul>
<li><a href="#L2902">Definitions</a></li>
<li><a href="#L2906">MessageQueue</a></li>
<li><a href="#L2960">Definitions</a></li>
<li><a href="#L2964">MessageQueue</a></li>
</ul>
</li>
<li><a href="#L2979">NoDefaultMethods</a></li>
<li><a href="#L2985">Requester</a></li>
<li><a href="#L3016">Serialize</a></li>
<li><a href="#L3056">CDRMonitor - Monitor and Report Construction and
<li><a href="#L3037">NoDefaultMethods</a></li>
<li><a href="#L3043">Requester</a></li>
<li><a href="#L3074">Serialize</a></li>
<li><a href="#L3114">CDRMonitor - Monitor and Report Construction and
Destruction</a></li>
<li><a href="#L3062">Status</a></li>
<li><a href="#L3109">Thread</a>
<li><a href="#L3120">Status</a></li>
<li><a href="#L3167">Thread</a>
<ul>
<li><a href="#L3111">ThreadPriority</a></li>
<li><a href="#L3115">Thread</a></li>
<li><a href="#L3169">ThreadPriority</a></li>
<li><a href="#L3173">Thread</a></li>
</ul>
</li>
<li><a href="#L3156">Time Function Call</a></li>
<li><a href="#L3188">Timer</a></li>
<li><a href="#L3255">Queue</a></li>
<li><a href="#L3214">Time Function Call</a></li>
<li><a href="#L3246">Timer</a></li>
<li><a href="#L3313">Queue</a></li>
</ul>
</li>
<li><a href="#L3318">pvMisc</a>
<li><a href="#L3376">pvMisc</a>
<ul>
<li><a href="#L3322">BitSetUtil</a></li>
<li><a href="#L3352">MultiChoice</a></li>
<li><a href="#L3380">BitSetUtil</a></li>
<li><a href="#L3410">MultiChoice</a></li>
</ul>
</li>
</ul>
</div>
<hr />
<h2 style="text-align: center" id="L45">Preface</h2>
<h2 style="text-align: center" id="L100">Preface</h2>
<hr />
<p>This product is available via an <a href="http://epics-pvdata.sourceforge.net/LICENSE.html">open source license</a></p>
<p>This is the overview for pvDataCPP.
Doxygen documentation is available at <a href="./html/index.html">doxygenDoc</a></p>
<p>This product is available via an <a
href="http://epics-pvdata.sourceforge.net/LICENSE.html">open source
license</a></p>
<p>This is the overview for pvDataCPP. Doxygen documentation is available at <a
href="./html/index.html">doxygenDoc</a></p>
<p>pvData is one of a set of related projects:</p>
<dl>
@@ -204,13 +237,13 @@ Doxygen documentation is available at <a href="./html/index.html">doxygenDoc</a>
record scanning, and extensible support.</dd>
</dl>
<h3 id="L72">pvData</h3>
<h3 id="L130">pvData</h3>
<p>pvData describes and implements structured data. Interspection interfaces
are used to describe the data and for each type of data a data interface
provides a container to hold the data.</p>
<h4 id="L76">Introspection</h4>
<h4 id="L134">Introspection</h4>
<p>pvData is modeled as a structured set of fields. A field has a name are a
type. The type must be one of:</p>
@@ -250,7 +283,7 @@ type. The type must be one of:</p>
addition each type has an introspection interface: Scalar, ScalarArray,
Structure, and StructureArray.</p>
<h4 id="L144">Data</h4>
<h4 id="L202">Data</h4>
<p>Interface PVField provides access to the common information of every data
container. In addition every possible type has an interface for accessing the
@@ -269,7 +302,7 @@ data:</p>
<dd>The interface is PVStructureArray.</dd>
</dl>
<h4 id="L169">Property Structures</h4>
<h4 id="L227">Property Structures</h4>
<p>pvData provides support, via pvData structures and associated support, for
the following:</p>
@@ -286,7 +319,7 @@ the following:</p>
<dd>This is a pvData structure with two field: index and choices.</dd>
</dl>
<h3 id="L199">pvAccess</h3>
<h3 id="L257">pvAccess</h3>
<p>pvAccess provides client/server support for transmitting pvData objects. The
server must provide access to objects identified by name. Each object must have
@@ -341,7 +374,7 @@ features:</p>
Large objects automatically span network packets.</dd>
</dl>
<h3 id="L260">pvIOC</h3>
<h3 id="L318">pvIOC</h3>
<p>IOC means Input/Output Controller, which is an EPICS term. A pvIOC is
modeled after an EPICS IOC but supports pvData instead of flat record
@@ -388,7 +421,7 @@ an existing EPICS IOC.</p>
</dl>
<hr />
<h2 style="text-align: center" id="L307">Introduction</h2>
<h2 style="text-align: center" id="L365">Introduction</h2>
<hr />
<p>PVData is one of a set of related projects: pvData, pvAccess, and javaIOC.
@@ -488,7 +521,7 @@ pvDataApp:</p>
</dl>
<hr />
<h2 style="text-align: center" id="L399">PVData Meta Language</h2>
<h2 style="text-align: center" id="L457">PVData Meta Language</h2>
<hr />
<p>This section describes a meta language for describing pvData. Currently
@@ -497,7 +530,7 @@ documentation. The toString introspection and data methods described below do
present data in a format similar to the metadata syntax. The meta language is
used to describe both introspection interfaces and data interfaces.</p>
<h3 id="L405">Definition</h3>
<h3 id="L463">Definition</h3>
<p>PVData supports structured data. All data appears as a top level structure.
A structure has an ordered set of fields where each field has a <span
@@ -611,7 +644,7 @@ scalar data value depending on the type. Thus it is a comma separated set of
values enclosed in <span style="font-family: courier;">[]</span> White space is
permitted surrounding each comma.</p>
<h3 id="L599">Examples</h3>
<h3 id="L657">Examples</h3>
<p>Define the following top level structure:</p>
<pre>structure timeStamp_t
@@ -707,10 +740,10 @@ structure pointArrayExample
double y 10.0</pre>
<hr />
<h2 style="text-align: center" id="L643">PV - User Description</h2>
<h2 style="text-align: center" id="L701">PV - User Description</h2>
<hr />
<h3 style="text-align: center" id="L647">Overview</h3>
<h3 style="text-align: center" id="L705">Overview</h3>
<p>Directory pvDataApp/pv has header files that completely describe pvData. The
implementation is provided in directory pvDataApp/factory. Test programs
@@ -744,7 +777,7 @@ converting and copying data between fields.</p>
alarm, etc.</dd>
</dl>
<h3 style="text-align: center;" id="L688">pvType</h3>
<h3 style="text-align: center;" id="L746">pvType</h3>
<p>This provides C/C++ definitions for the pvData primitive types: boolean,
byte, short, int, long, float, double, and string. Because pvData is network
@@ -802,7 +835,7 @@ typedef std::string * StringBuilder;</pre>
<dd>A typedef is provided for an array of each of the primitive types.</dd>
</dl>
<h3 style="text-align: center" id="L724">Process Variable Reflection</h3>
<h3 style="text-align: center" id="L782">Process Variable Reflection</h3>
<p>This subsection describes <span
style="font-family: Courier New,Courier,monospace">pvIntrospect.h</span></p>
@@ -817,7 +850,7 @@ especially important for arrays and structures so that a client can discover
the type without requiring that a large data array or structure be transported
over the network.</p>
<h4 id="L732">Type Description</h4>
<h4 id="L790">Type Description</h4>
<p>Types are defined as:</p>
<pre>enum Type {
@@ -914,7 +947,7 @@ style="font-family: courier;">ScalarType</span></p>
<dd>Convert the scalar type to a string.</dd>
</dl>
<h4 id="L862">Reflection Description</h4>
<h4 id="L920">Reflection Description</h4>
<p>This section describes the reflection interfaces which provide the
following: </p>
@@ -1169,7 +1202,7 @@ methods:</p>
structure-&gt;incReferenceCount() must be called before this method.</dd>
</dl>
<h3 style="text-align: center" id="L1077">Standard Fields</h3>
<h3 style="text-align: center" id="L1135">Standard Fields</h3>
<p>The file standardField.h has a class description for creating or sharing
Field objects for standard fields. For each type of standard object two methods
@@ -1305,12 +1338,12 @@ extern StandardField * getStandardField();</pre>
the section on Properties for a description of how these are defined.</dd>
</dl>
<h3 style="text-align: center" id="L1161">PVField - Data Interfaces</h3>
<h3 style="text-align: center" id="L1219">PVField - Data Interfaces</h3>
<p>This section defines the Java Interfaces for accessing the data within a PV
record.</p>
<h4 id="L1165">PVField</h4>
<h4 id="L1223">PVField</h4>
<p>PVField is the base interface for accessing data. A data structure consists
of a top level PVStructure. Every field of every structure of every top level
@@ -1418,7 +1451,7 @@ are:</p>
purposes.</dd>
</dl>
<h4 id="L1275">PVAuxInfo</h4>
<h4 id="L1333">PVAuxInfo</h4>
<p>AuxInfo (Auxillary Information) is information about a field that is
application specific. It will not be available outside the application that
@@ -1455,7 +1488,7 @@ private:
<dd>Print all the auxInfos</dd>
</dl>
<h4 id="L1309">PVScalar and extensions</h4>
<h4 id="L1367">PVScalar and extensions</h4>
<pre>class PVScalar : public PVField {
public:
virtual ~PVScalar();
@@ -1464,7 +1497,7 @@ protected:
PVScalar(PVStructure *parent,ScalarConstPtr scalar);
};</pre>
<h5 id="L1313">Primitive PVField types</h5>
<h5 id="L1371">Primitive PVField types</h5>
<p>The interfaces for primitive data types are:</p>
<pre>template&lt;typename T&gt;
@@ -1503,7 +1536,7 @@ protected:
: PVScalarValue&lt;String&gt;(parent,scalar) {}
};</pre>
<h4 id="L1319">PVArray and Extensions</h4>
<h4 id="L1377">PVArray and Extensions</h4>
<p><span style="font-family: courier">PVArray</span> is the base interface for
all the other PV Array interfaces. It extends PVField and provides the
@@ -1541,7 +1574,7 @@ protected:
<dd>Specify if the capacity can be changed.</dd>
</dl>
<h5 id="L1358">PVArray Extensions</h5>
<h5 id="L1416">PVArray Extensions</h5>
<p>The interface for each array type has get and put methods which have the
same arguments except for the data type. For example PVDoubleArray is:</p>
@@ -1678,7 +1711,7 @@ that directly access the internal data array of a PVArray. This can be required
for minimizing CPU overhead. In this case it is the applications responsibility
to coordinate access to the array.</p>
<h4 id="L1402">PVStructure</h4>
<h4 id="L1460">PVStructure</h4>
<p>The interface for a structure is:</p>
<pre>class PVStructure : public PVField,public BitSetSerializable {
@@ -1789,7 +1822,7 @@ public:
<dd>Specify the structure that this structure extends.</dd>
</dl>
<h4 id="L1506">PVStructureArray</h4>
<h4 id="L1564">PVStructureArray</h4>
<p>The interface for an array of structures is:</p>
<pre>class StructureArrayData {
@@ -1835,7 +1868,7 @@ protected:
<p>The other methods are similar to the methods for other array types.</p>
<h4 id="L1537">PVDataCreate</h4>
<h4 id="L1595">PVDataCreate</h4>
<p>PVDataCreate is an interface that provides methods that create PVField
interfaces. A factory is provided that creates PVDataCreate.</p>
@@ -1921,7 +1954,7 @@ extern PVDataCreate * getPVDataCreate();</pre>
before calling this method.</dd>
</dl>
<h3 style="text-align: center" id="L1571">Standard Data Fields</h3>
<h3 style="text-align: center" id="L1629">Standard Data Fields</h3>
<p>A class StandardPVField has methods for creating standard data fields. Like
class StandardField it has two forms of the methods which create a field, one
@@ -1976,7 +2009,7 @@ public:
PVStructure * powerSupply(PVStructure *parent);
};</pre>
<h3 style="text-align: center" id="L1577">Convert</h3>
<h3 style="text-align: center" id="L1635">Convert</h3>
<p>NOTE about copying immutable array fields. If an entire immutable array
field is copied to another array that has the same elementType, both offsets
@@ -2112,19 +2145,19 @@ for code that implements <span style="font-family: courier;">toString</span> It
generates a newline and inserts blanks at the beginning of the newline.</p>
<hr />
<h2 style="text-align: center" id="L1647">Namespace and Memory Management</h2>
<h2 style="text-align: center" id="L1705">Namespace and Memory Management</h2>
<hr />
<h3 style="text-align: center" id="L1651">Namespace</h3>
<h3 style="text-align: center" id="L1709">Namespace</h3>
<p>All code in project pvDataCPP appears in namespace: </p>
<pre>namespace epics { namespace pvData {
// ...
}}</pre>
<h3 style="text-align: center" id="L1657">Memory Managemment</h3>
<h3 style="text-align: center" id="L1715">Memory Managemment</h3>
<h4 id="L1659">NoDefaultMethods</h4>
<h4 id="L1717">NoDefaultMethods</h4>
<p>Any class that does not want the compiler to generate default methods can
privately extend the following class which is defined in file
@@ -2140,12 +2173,12 @@ private:
NoDefaultMethods &amp; operator=(const NoDefaultMethods &amp;);
};</pre>
<h3 id="L1665">PVData introspection objects</h3>
<h3 id="L1723">PVData introspection objects</h3>
<p>Introspection objects are meant to be shared. They are all made available
via std::tri::shared_pointer.</p>
<h3 id="L1669">PVData data objects</h3>
<h3 id="L1727">PVData data objects</h3>
<p>All PVData data objects must publically extend PVField, which does not allow
default methods but does have a virtual destructor. It is expected that each
@@ -2158,7 +2191,7 @@ After deletion all pointers to data in the record are invalid. Similarly
pvAccess creates and destroys PVData objects and notifies clients before
destroying PVData data objects.</p>
<h3 id="L1673">Other code in this project</h3>
<h3 id="L1731">Other code in this project</h3>
<p>The classes in property, i.e. alarm, timeStamp, display, and control are all
meant to be free copied and shared. They can be created on the stack. In most
@@ -2169,10 +2202,10 @@ be extended. Thus they can only be created via "new" and must be destroyed via
"delete".</p>
<hr />
<h2 style="text-align: center" id="L1681">Examples</h2>
<h2 style="text-align: center" id="L1739">Examples</h2>
<hr />
<h3 id="L1685">Accessing PVData</h3>
<h3 id="L1743">Accessing PVData</h3>
<p>Assume that code wants to print two fields from a PVStructure:</p>
<dl>
@@ -2200,7 +2233,7 @@ be extended. Thus they can only be created via "new" and must be destroyed via
timeStampPV-&gt;toString(buf);
}</pre>
<h3 id="L1704">Creating PVData</h3>
<h3 id="L1762">Creating PVData</h3>
<p>Example of creating a scalar field.</p>
<pre> PVDataCreate *pvDataCreate = getPVDataCreate();
@@ -2230,10 +2263,10 @@ and a timeStamp and alarm. Do it the easy way.</p>
String("timeStamp,alarm"))</pre>
<hr />
<h2 style="text-align: center" id="L1724">Property</h2>
<h2 style="text-align: center" id="L1782">Property</h2>
<hr />
<h3 style="text-align: center" id="L1728">Definition of Property</h3>
<h3 style="text-align: center" id="L1786">Definition of Property</h3>
<p>Only fields named "value" have properties. A record can have multiple value
fields, which can appear in the top level structure of a record or in a
@@ -2273,7 +2306,7 @@ structure powerSupplySimple
powerSupplyValueStructure power
powerSupplyValueStructure current</pre>
<h3 style="text-align: center" id="L1740">Standard Properties</h3>
<h3 style="text-align: center" id="L1798">Standard Properties</h3>
<p>The following field names have special meaning, i.e. support properties for
general purpose clients.</p>
@@ -2341,7 +2374,7 @@ examples are:</p>
that support the PVData data model. For example a powerSupport record can have
fields power, voltage, current that each support the PVData data model. </p>
<h3 style="text-align: center" id="L1821">Overview of Property Support</h3>
<h3 style="text-align: center" id="L1879">Overview of Property Support</h3>
<p>Except for enumerated, each property has two files: a property.h and a
pvProperty.h . For example: <span style="text-align: center">timeStamp.h</span>
@@ -2370,7 +2403,7 @@ stack. For example the following is permitted:</p>
...
}</pre>
<h3 style="text-align: center" id="L1841">timeStamp</h3>
<h3 style="text-align: center" id="L1899">timeStamp</h3>
<p>A timeStamp is represented by the following structure</p>
<pre>structure timeStamp
@@ -2397,7 +2430,7 @@ that can be attached to a time stamp pvData structure. It provides get and set
methods to get/set a TimeStamp as defined by <span
style="font-family: courier;">timeStamp.h</span></p>
<h4 id="L1865">timeStamp.h</h4>
<h4 id="L1923">timeStamp.h</h4>
<p>This provides </p>
<pre>extern int32 milliSecPerSec;
@@ -2507,7 +2540,7 @@ execute. This is done as follows:</p>
endTime.getCurrent();
double time = TimeStamp::diff(endTime,startTime);</pre>
<h4 id="L1981">pvTimeStamp.h</h4>
<h4 id="L2039">pvTimeStamp.h</h4>
<pre>class PVTimeStamp {
public:
PVTimeStamp();
@@ -2546,7 +2579,7 @@ public:
thrown if not attached to a pvData structure. </dd>
</dl>
<h3 style="text-align: center" id="L2021">alarm</h3>
<h3 style="text-align: center" id="L2079">alarm</h3>
<p>An alarm structure is defined as follows:</p>
<pre>structure alarm
@@ -2569,7 +2602,7 @@ style="font-family: courier;">pvAlarm.h</span> is a class that can be attached
to a time stamp pvData structure. It provides get and set methods to get/set a
Alarm as defined by <span style="font-family: courier;">alarm.h</span></p>
<h4 id="L2048">alarm.h</h4>
<h4 id="L2106">alarm.h</h4>
<pre>enum AlarmSeverity {
noAlarm,minorAlarm,majorAlarm,invalidAlarm,undefinedAlarm
};
@@ -2643,7 +2676,7 @@ public:
<dd>Set the status.</dd>
</dl>
<h4 id="L2120">pvAlarm.h</h4>
<h4 id="L2178">pvAlarm.h</h4>
<pre>class PVAlarm {
public:
PVAlarm() : pvSeverity(0),pvMessage(0) {}
@@ -2683,7 +2716,7 @@ public:
if not attached to a pvData structure. </dd>
</dl>
<h3 style="text-align: center" id="L2160">control</h3>
<h3 style="text-align: center" id="L2218">control</h3>
<p>Control information is represented by the following structure</p>
<pre>structure control
@@ -2701,7 +2734,7 @@ attached to a time stamp pvData structure. It provides get and set methods to
get/set a Control as defined by <span
style="font-family: courier;">control.h</span></p>
<h4 id="L2182">control.h</h4>
<h4 id="L2240">control.h</h4>
<pre>class Control {
public:
Control();
@@ -2726,7 +2759,7 @@ public:
<dd>Set the high limit.</dd>
</dl>
<h4 id="L2214">pvControl.h</h4>
<h4 id="L2272">pvControl.h</h4>
<pre>class PVControl {
public:
PVControl();
@@ -2766,7 +2799,7 @@ public:
thrown if not attached to a pvData structure. </dd>
</dl>
<h3 style="text-align: center" id="L2254">display</h3>
<h3 style="text-align: center" id="L2312">display</h3>
<p>Display information is represented by the following structure</p>
<pre>structure display
@@ -2787,7 +2820,7 @@ class that can be attached to a display pvData structure. It provides get and
set methods to get/set a Diaplay as defined by <span
style="font-family: courier;">diaplay.h</span></p>
<h4 id="L2276">display.h</h4>
<h4 id="L2334">display.h</h4>
<pre>class Display {
public:
Display();
@@ -2830,7 +2863,7 @@ public:
<dd>Set the units.</dd>
</dl>
<h4 id="L2338">pvDisplay.h</h4>
<h4 id="L2396">pvDisplay.h</h4>
<pre>class PVDisplay {
public:
PVDisplay()
@@ -2870,7 +2903,7 @@ public:
thrown if not attached to a pvData structure. </dd>
</dl>
<h3 style="text-align: center" id="L2378">pvEnumerated</h3>
<h3 style="text-align: center" id="L2436">pvEnumerated</h3>
<p>An enumerated structure is a structure that has fields:</p>
<pre>structure
@@ -2937,7 +2970,7 @@ public:
</dl>
<hr />
<h2 style="text-align: center" id="L2454">PVData Factories</h2>
<h2 style="text-align: center" id="L2512">PVData Factories</h2>
<hr />
<p>Directory factory has code that implements everything described by the files
@@ -2960,10 +2993,10 @@ implements getConvert.</p>
<p>Other files implement PVData base classes</p>
<hr />
<h2 style="text-align: center" id="L2474">Miscellanous Classes</h2>
<h2 style="text-align: center" id="L2532">Miscellanous Classes</h2>
<hr />
<h3 style="text-align: center" id="L2478">Overview</h3>
<h3 style="text-align: center" id="L2536">Overview</h3>
<p>This package provides utility code:</p>
<dl>
@@ -3011,7 +3044,7 @@ implements getConvert.</p>
<p>Note that directory testApp/misc has test code for all the classes in misc.
The test code also can be used as examples.</p>
<h3 style="text-align: center;" id="L2570">BitSet</h3>
<h3 style="text-align: center;" id="L2628">BitSet</h3>
<p>This is adapted from the java.util.BitSet. bitSet.h is:</p>
<pre>class BitSet /*: public Serializable*/ {
@@ -3105,7 +3138,7 @@ private:
<dd>Show the current values of the bitSet.</dd>
</dl>
<h3 style="text-align: center;" id="L2694">ByteBuffer</h3>
<h3 style="text-align: center;" id="L2752">ByteBuffer</h3>
<p>A ByteBuffer is used to serialize and deserialize primitive data. File
byteBuffer.h is:</p>
@@ -3145,7 +3178,7 @@ private:
<p>x</p>
<h3 style="text-align: center;" id="L2702">Event</h3>
<h3 style="text-align: center;" id="L2760">Event</h3>
<p>This class provides coordinates activity between threads. One thread can
wait for the event and the other signals the event.</p>
@@ -3177,7 +3210,7 @@ private:
<dd>returns (false,true) if the event is (empty,full)</dd>
</dl>
<h3 style="text-align: center;" id="L2731">Exception</h3>
<h3 style="text-align: center;" id="L2789">Exception</h3>
<p>File epicsException.h describes:</p>
<pre>class BaseException : public std::exception {
@@ -3195,7 +3228,7 @@ private:
<p>x</p>
<h3 style="text-align: center;" id="L2739">Executor</h3>
<h3 style="text-align: center;" id="L2797">Executor</h3>
<p>An Executor is a thread that can execute commands. The user can request that
a single command be executed.</p>
@@ -3234,7 +3267,7 @@ execute.</p>
nothing is done.</dd>
</dl>
<h3 style="text-align: center;" id="L2770">Linked List</h3>
<h3 style="text-align: center;" id="L2828">Linked List</h3>
<p>LinkedList implements a double linked list that requires a user to allocate
the nodes. It is more efficent that std::list. linkedList.h is a template that
@@ -3336,7 +3369,7 @@ public:
<dd>Does the list contain the specified object?</dd>
</dl>
<h3 style="text-align: center;" id="L2884">Lock and Mutex</h3>
<h3 style="text-align: center;" id="L2942">Lock and Mutex</h3>
<p>lock.h is:</p>
<pre>class Mutex {
@@ -3385,9 +3418,9 @@ once. This can be implemented as follows:</p>
// initialization
}</pre>
<h3 style="text-align: center;" id="L2900">Message Queue</h3>
<h3 style="text-align: center;" id="L2958">Message Queue</h3>
<h4 id="L2902">Definitions</h4>
<h4 id="L2960">Definitions</h4>
<pre>class MessageNode {
public:
String getMessage() const;
@@ -3409,7 +3442,7 @@ public:
int getClearOverrun();
};</pre>
<h4 id="L2906">MessageQueue</h4>
<h4 id="L2964">MessageQueue</h4>
<p>This is for use by code that wants to handle messages without blocking
higher priority threads.</p>
@@ -3452,7 +3485,7 @@ higher priority threads.</p>
<p>Look at miscTest/testMessageQueue.cpp for an example.</p>
<h3 style="text-align: center;" id="L2979">NoDefaultMethods</h3>
<h3 style="text-align: center;" id="L3037">NoDefaultMethods</h3>
<p>If a class privately extends this class then the compiler can not create any
of the following: default constructor, default copy constructror, or default
@@ -3471,7 +3504,7 @@ assignment contructor.</p>
NoDefaultMethods &amp; operator=(const NoDefaultMethods &amp;);
};</pre>
<h3 style="text-align: center;" id="L2985">Requester</h3>
<h3 style="text-align: center;" id="L3043">Requester</h3>
<p>A PVField extends Requester. Requester is present so that when database
errors are found there is someplace to send a message.</p>
@@ -3501,7 +3534,7 @@ public:
<dd>Gives a message to the requester.</dd>
</dl>
<h3 style="text-align: center" id="L3016">Serialize</h3>
<h3 style="text-align: center" id="L3074">Serialize</h3>
<p>This is a helper class for serialization, which is required for sending and
receiving pvData over the nerwork.</p>
@@ -3572,7 +3605,7 @@ properly implemented. </p>
<p>x</p>
<h3 style="text-align: center;" id="L3056">CDRMonitor - Monitor and Report
<h3 style="text-align: center;" id="L3114">CDRMonitor - Monitor and Report
Construction and Destruction</h3>
<p>This is a facility that allows a class to report how many objects of that
@@ -3607,7 +3640,7 @@ public:
static inline CDRNode* getNode(CDRNodeInstance *inst);</pre>
<h3 style="text-align: center" id="L3062">Status</h3>
<h3 style="text-align: center" id="L3120">Status</h3>
<p>Status provides a way to pass status back to client code:</p>
<pre>class Status : public epics::pvData::Serializable {
@@ -3663,9 +3696,9 @@ static inline CDRNode* getNode(CDRNodeInstance *inst);</pre>
status optimization.</dd>
</dl>
<h3 style="text-align: center;" id="L3109">Thread</h3>
<h3 style="text-align: center;" id="L3167">Thread</h3>
<h4 id="L3111">ThreadPriority</h4>
<h4 id="L3169">ThreadPriority</h4>
<pre>enum ThreadPriority {
lowestPriority,
lowerPriority,
@@ -3682,7 +3715,7 @@ public:
static int getEpicsPriority(ThreadPriority threadPriority);
};</pre>
<h4 id="L3115">Thread</h4>
<h4 id="L3173">Thread</h4>
<pre>class Runnable {
public:
virtual void run() = 0;
@@ -3729,7 +3762,7 @@ exception is thrown if run remains active when delete is called. </p>
<dd>Make the current thread sleep for the specified number of seconds.</dd>
</dl>
<h3 style="text-align: center;" id="L3156">Time Function Call</h3>
<h3 style="text-align: center;" id="L3214">Time Function Call</h3>
<p>TimeFunction is a facility that measures the average number of seconds a
function call requires. When timeCall is called, it calls function in a loop.
@@ -3771,7 +3804,7 @@ long a function takes. It has the single method:</p>
one second to call it ntimes.</dd>
</dl>
<h3 style="text-align: center;" id="L3188">Timer</h3>
<h3 style="text-align: center;" id="L3246">Timer</h3>
<p>This provides a general purpose timer. It allows a user callback to be
called after a delay or periodically. </p>
@@ -3846,7 +3879,7 @@ be used to schedule multiple callbacks. It has the methods:</p>
<dd>Schedule a periodic callback.</dd>
</dl>
<h3 style="text-align: center;" id="L3255">Queue</h3>
<h3 style="text-align: center;" id="L3313">Queue</h3>
<p>This provides a queue which has an immutable capacity. When the queue is
full the user code is expected to keep using the current element until a new
@@ -3928,10 +3961,10 @@ public:
}</pre>
<hr />
<h2 style="text-align: center" id="L3318">pvMisc</h2>
<h2 style="text-align: center" id="L3376">pvMisc</h2>
<hr />
<h3 id="L3322">BitSetUtil</h3>
<h3 id="L3380">BitSetUtil</h3>
<p>The following is also provided:</p>
<pre>class BitSetUtil : private NoDefaultMethods {
@@ -3960,7 +3993,7 @@ currently has only one method:</p>
entire structures if the structure offset bit is set. </dd>
</dl>
<h3 style="text-align: center;" id="L3352">MultiChoice</h3>
<h3 style="text-align: center;" id="L3410">MultiChoice</h3>
<p>MultiChoice defines an array of strings and a bit set that selects an
arbitrary set of the choices. This will be implemented if the java version is