This is Unofficial EPICS BASE Doxygen Site
ntfield.h
Go to the documentation of this file.
1 /* ntfield.h */
2 /*
3  * Copyright information and license terms for this software can be
4  * found in the file LICENSE that is included with the distribution
5  */
6 #ifndef NTFIELD_H
7 #define NTFIELD_H
8 
9 #include <cstdarg>
10 
11 #ifdef epicsExportSharedSymbols
12 # define ntfieldEpicsExportSharedSymbols
13 # undef epicsExportSharedSymbols
14 #endif
15 
16 #include <pv/standardField.h>
17 #include <pv/standardPVField.h>
18 #include <pv/alarm.h>
19 #include <pv/pvAlarm.h>
20 #include <pv/timeStamp.h>
21 #include <pv/pvTimeStamp.h>
22 #include <pv/sharedVector.h>
23 
24 #ifdef ntfieldEpicsExportSharedSymbols
25 # define epicsExportSharedSymbols
26 # undef ntfieldEpicsExportSharedSymbols
27 #endif
28 
29 #include <shareLib.h>
30 
31 namespace epics { namespace nt {
32 
33 struct Result;
34 
35 class NTField;
36 typedef std::tr1::shared_ptr<NTField> NTFieldPtr;
37 
38 class PVNTField;
39 typedef std::tr1::shared_ptr<PVNTField> PVNTFieldPtr;
40 
48 public:
54  static NTFieldPtr get();
58  ~NTField() {}
59 
65  bool isEnumerated(epics::pvData::FieldConstPtr const & field);
66 
72  bool isTimeStamp(epics::pvData::FieldConstPtr const & field);
73 
79  bool isAlarm(epics::pvData::FieldConstPtr const & field);
80 
86  bool isDisplay(epics::pvData::FieldConstPtr const & field);
87 
93  bool isAlarmLimit(epics::pvData::FieldConstPtr const & field);
94 
100  bool isControl(epics::pvData::FieldConstPtr const & field);
101 
106  epics::pvData::StructureConstPtr createEnumerated();
107 
112  epics::pvData::StructureConstPtr createTimeStamp();
113 
118  epics::pvData::StructureConstPtr createAlarm();
119 
124  epics::pvData::StructureConstPtr createDisplay();
125 
130  epics::pvData::StructureConstPtr createControl();
131 
136  epics::pvData::StructureArrayConstPtr createEnumeratedArray();
137 
142  epics::pvData::StructureArrayConstPtr createTimeStampArray();
143 
148  epics::pvData::StructureArrayConstPtr createAlarmArray();
149 
150 private:
151  NTField();
152  epics::pvData::FieldCreatePtr fieldCreate;
153  epics::pvData::StandardFieldPtr standardField;
154 
155  // These won't be public just yet
156  static Result& isEnumerated(Result&);
157  static Result& isTimeStamp(Result&);
158  static Result& isAlarm(Result&);
159  static Result& isDisplay(Result&);
160  static Result& isAlarmLimit(Result&);
161  static Result& isControl(Result&);
162 
163  friend class NTAggregate;
164  friend class NTAttribute;
165  friend class NTContinuum;
166  friend class NTEnum;
167  friend class NTHistogram;
168  friend class NTMatrix;
169  friend class NTMultiChannel;
170  friend class NTNameValue;
171  friend class NTNDArray;
172  friend class NTNDArrayAttribute;
173  friend class NTScalar;
174  friend class NTScalarArray;
175  friend class NTScalarMultiChannel;
176  friend class NTTable;
177  friend class NTUnion;
178 };
179 
187 public:
193  static PVNTFieldPtr get();
194 
199 
205  epics::pvData::PVStructurePtr createEnumerated(
206  epics::pvData::StringArray const & choices);
207 
212  epics::pvData::PVStructurePtr createTimeStamp();
213 
218  epics::pvData::PVStructurePtr createAlarm();
219 
224  epics::pvData::PVStructurePtr createDisplay();
225 
230  epics::pvData::PVStructurePtr createControl();
231 
236  epics::pvData::PVStructureArrayPtr createEnumeratedArray();
237 
242  epics::pvData::PVStructureArrayPtr createTimeStampArray();
243 
248  epics::pvData::PVStructureArrayPtr createAlarmArray();
249 
250 private:
251  PVNTField();
252  epics::pvData::PVDataCreatePtr pvDataCreate;
253  epics::pvData::StandardFieldPtr standardField;
254  epics::pvData::StandardPVFieldPtr standardPVField;
255  NTFieldPtr ntstructureField;
256 };
257 
258 }}
259 
260 #endif /* NTFIELD_H */
Convenience Class for data fields of a Normative Type.
Definition: ntfield.h:186
Convenience Class for NTHistogram.
Definition: nthistogram.h:128
Convenience Class for NTContinuum.
Definition: ntcontinuum.h:118
Convenience Class for NTEnum.
Definition: ntenum.h:117
Convenience Class for NTUnion.
Definition: ntunion.h:126
Convenience Class for NTMatrix.
Definition: ntmatrix.h:134
Validation methods for NT types.
Definition: validator.h:23
TODO only here because of the Lockable.
Definition: ntaggregate.cpp:16
std::tr1::shared_ptr< const Structure > StructureConstPtr
Definition: pvIntrospect.h:162
std::tr1::shared_ptr< const StructureArray > StructureArrayConstPtr
Definition: pvIntrospect.h:166
Mark external symbols and entry points for shared libraries.
std::tr1::shared_ptr< NTField > NTFieldPtr
Definition: ntfield.h:35
Convenience Class for NTAggregate.
Definition: ntaggregate.h:166
Convenience Class for NTScalar.
Definition: ntscalar.h:144
std::tr1::shared_ptr< StandardField > StandardFieldPtr
Definition: standardField.h:22
std::tr1::shared_ptr< PVDataCreate > PVDataCreatePtr
Definition: pvData.h:124
std::tr1::shared_ptr< StandardPVField > StandardPVFieldPtr
std::tr1::shared_ptr< PVNTField > PVNTFieldPtr
Definition: ntfield.h:38
#define POINTER_DEFINITIONS(clazz)
Definition: sharedPtr.h:198
std::tr1::shared_ptr< PVStructureArray > PVStructureArrayPtr
Definition: pvData.h:100
#define epicsShareClass
Definition: shareLib.h:206
std::tr1::shared_ptr< const Field > FieldConstPtr
Definition: pvIntrospect.h:137
Convenience Class for NTNDArrayAttribute.
std::tr1::shared_ptr< PVStructure > PVStructurePtr
Definition: pvData.h:87
Convenience Class for NTNDArray.
Definition: ntndarray.h:128
Convenience Class for NTScalarArray.
Convenience Class for NTTable.
Definition: nttable.h:137
Convenience Class for NTMultiChannel.
std::vector< std::string > StringArray
Definition: pvType.h:110
std::tr1::shared_ptr< FieldCreate > FieldCreatePtr
Convenience Class for introspection fields of a Normative Type.
Definition: ntfield.h:47
Convenience Class for NTNameValue.
Definition: ntnameValue.h:128
Convenience Class for NTScalarMultiChannel.
Convenience Class for NTAttribute.
Definition: ntattribute.h:124