normativeTypesCPP 6.0.2
ntscalarArray.h
Go to the documentation of this file.
1/* ntscalarArray.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 NTSCALARARRAY_H
7#define NTSCALARARRAY_H
8
9#ifdef epicsExportSharedSymbols
10# define ntscalarArrayEpicsExportSharedSymbols
11# undef epicsExportSharedSymbols
12#endif
13
14#include <pv/pvDisplay.h>
15#include <pv/pvControl.h>
16
17#ifdef ntscalarArrayEpicsExportSharedSymbols
18# define epicsExportSharedSymbols
19# undef ntscalarArrayEpicsExportSharedSymbols
20#endif
21
22#include <pv/ntfield.h>
23
24#include <shareLib.h>
25
26
27namespace epics { namespace nt {
28
29class NTScalarArray;
30typedef std::tr1::shared_ptr<NTScalarArray> NTScalarArrayPtr;
31
32namespace detail {
33
41 class epicsShareClass NTScalarArrayBuilder :
42 public std::tr1::enable_shared_from_this<NTScalarArrayBuilder>
43 {
44 public:
46
52 shared_pointer value(epics::pvData::ScalarType elementType);
53
60 shared_pointer arrayValue(epics::pvData::ScalarType elementType);
61
66 shared_pointer addDescriptor();
67
72 shared_pointer addAlarm();
73
78 shared_pointer addTimeStamp();
79
84 shared_pointer addDisplay();
85
90 shared_pointer addControl();
91
97 epics::pvData::StructureConstPtr createStructure();
98
104 epics::pvData::PVStructurePtr createPVStructure();
105
111 NTScalarArrayPtr create();
112
119 shared_pointer add(std::string const & name, epics::pvData::FieldConstPtr const & field);
120
121 private:
123
124 void reset();
125
126 bool valueTypeSet;
127 epics::pvData::ScalarType valueType;
128
129 bool descriptor;
130 bool alarm;
131 bool timeStamp;
132 bool display;
133 bool control;
134
135 // NOTE: this preserves order, however it does not handle duplicates
136 epics::pvData::StringArray extraFieldNames;
137 epics::pvData::FieldConstPtrArray extraFields;
138
139 friend class ::epics::nt::NTScalarArray;
140 };
141
142}
143
144typedef std::tr1::shared_ptr<detail::NTScalarArrayBuilder> NTScalarArrayBuilderPtr;
145
146
147
153class epicsShareClass NTScalarArray
154{
155public:
157
158 static const std::string URI;
159
171 static shared_pointer wrap(epics::pvData::PVStructurePtr const & pvStructure);
172
182 static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const & pvStructure);
183
195 static bool is_a(epics::pvData::StructureConstPtr const & structure);
196
208 static bool is_a(epics::pvData::PVStructurePtr const & pvStructure);
209
219 static bool isCompatible(
220 epics::pvData::StructureConstPtr const &structure);
221
231 static bool isCompatible(
232 epics::pvData::PVStructurePtr const &pvStructure);
233
242 bool isValid();
243
248 static NTScalarArrayBuilderPtr createBuilder();
249
254
261 bool attachTimeStamp(epics::pvData::PVTimeStamp &pvTimeStamp) const;
262
269 bool attachAlarm(epics::pvData::PVAlarm &pvAlarm) const;
270
277 bool attachDisplay(epics::pvData::PVDisplay &pvDisplay) const;
278
285 bool attachControl(epics::pvData::PVControl &pvControl) const;
286
291 epics::pvData::PVStructurePtr getPVStructure() const;
292
297 epics::pvData::PVStringPtr getDescriptor() const;
298
303 epics::pvData::PVStructurePtr getTimeStamp() const;
304
309 epics::pvData::PVStructurePtr getAlarm() const;
310
315 epics::pvData::PVStructurePtr getDisplay() const;
316
321 epics::pvData::PVStructurePtr getControl() const;
322
327 epics::pvData::PVFieldPtr getValue() const;
328
335 template<typename PVT>
336 std::tr1::shared_ptr<PVT> getValue() const
337 {
338 return std::tr1::dynamic_pointer_cast<PVT>(pvValue);
339 }
340
341private:
342 NTScalarArray(epics::pvData::PVStructurePtr const & pvStructure);
343 epics::pvData::PVStructurePtr pvNTScalarArray;
344 epics::pvData::PVFieldPtr pvValue;
345
347};
348
349}}
350#endif /* NTSCALARARRAY_H */
Convenience Class for NTScalarArray.
POINTER_DEFINITIONS(NTScalarArray)
static bool isCompatible(epics::pvData::StructureConstPtr const &structure)
static bool is_a(epics::pvData::StructureConstPtr const &structure)
static const std::string URI
static bool isCompatible(epics::pvData::PVStructurePtr const &pvStructure)
std::tr1::shared_ptr< PVT > getValue() const
static bool is_a(epics::pvData::PVStructurePtr const &pvStructure)
Interface for in-line creating of NTScalarArray.
POINTER_DEFINITIONS(NTScalarArrayBuilder)
std::tr1::shared_ptr< NTScalarArray > NTScalarArrayPtr
std::tr1::shared_ptr< detail::NTScalarArrayBuilder > NTScalarArrayBuilderPtr