normativeTypesCPP 6.0.2
ntmultiChannel.h
Go to the documentation of this file.
1/* ntmultiChannel.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 NTMULTICHANNEL_H
7#define NTMULTICHANNEL_H
8
9#include <vector>
10#include <string>
11
12#ifdef epicsExportSharedSymbols
13# define ntmultiChannelEpicsExportSharedSymbols
14# undef epicsExportSharedSymbols
15#endif
16
17#include <pv/pvDisplay.h>
18#include <pv/pvControl.h>
19
20#ifdef ntmultiChannelEpicsExportSharedSymbols
21# define epicsExportSharedSymbols
22# undef ntmultiChannelEpicsExportSharedSymbols
23#endif
24
25#include <pv/ntfield.h>
26
27#include <shareLib.h>
28
29
30namespace epics { namespace nt {
31
32
33class NTMultiChannel;
34typedef std::tr1::shared_ptr<NTMultiChannel> NTMultiChannelPtr;
35
36namespace detail {
37
45 class epicsShareClass NTMultiChannelBuilder :
46 public std::tr1::enable_shared_from_this<NTMultiChannelBuilder>
47 {
48 public:
55 shared_pointer value(epics::pvData::UnionConstPtr valuePtr);
56
61 shared_pointer addDescriptor();
62
67 shared_pointer addAlarm();
68
73 shared_pointer addTimeStamp();
74
79 shared_pointer addSeverity();
80
85 shared_pointer addStatus();
86
91 shared_pointer addMessage();
92
97 shared_pointer addSecondsPastEpoch();
98
103 shared_pointer addNanoseconds();
104
109 shared_pointer addUserTag();
110
115 shared_pointer addIsConnected();
116
122 epics::pvData::StructureConstPtr createStructure();
123
129 epics::pvData::PVStructurePtr createPVStructure();
130
136 NTMultiChannelPtr create();
137
144 shared_pointer add(std::string const & name, epics::pvData::FieldConstPtr const & field);
145
146 private:
148
149 void reset();
150
151 epics::pvData::UnionConstPtr valueType;
152 bool descriptor;
153 bool alarm;
154 bool timeStamp;
155 bool severity;
156 bool status;
157 bool message;
158 bool secondsPastEpoch;
159 bool nanoseconds;
160 bool userTag;
161 bool isConnected;
162
163 // NOTE: this preserves order, however it does not handle duplicates
164 epics::pvData::StringArray extraFieldNames;
165 epics::pvData::FieldConstPtrArray extraFields;
166
167 friend class ::epics::nt::NTMultiChannel;
168 };
169
170}
171
172typedef std::tr1::shared_ptr<detail::NTMultiChannelBuilder> NTMultiChannelBuilderPtr;
173
174
181class epicsShareClass NTMultiChannel
182{
183public:
185
186 static const std::string URI;
187
199 static shared_pointer wrap(epics::pvData::PVStructurePtr const & pvStructure);
200
210 static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const & pvStructure);
211
223 static bool is_a(epics::pvData::StructureConstPtr const & structure);
224
236 static bool is_a(epics::pvData::PVStructurePtr const & pvStructure);
237
247 static bool isCompatible(
248 epics::pvData::StructureConstPtr const &structure);
249
259 static bool isCompatible(
260 epics::pvData::PVStructurePtr const &pvStructure);
261
271 bool isValid();
272
277 static NTMultiChannelBuilderPtr createBuilder();
278
289 bool attachTimeStamp(epics::pvData::PVTimeStamp &pvTimeStamp) const;
290
297 bool attachAlarm(epics::pvData::PVAlarm &pvAlarm) const;
298
303 epics::pvData::PVStructurePtr getPVStructure() const
304 {return pvNTMultiChannel;}
305
310 epics::pvData::PVStringPtr getDescriptor() const
311 {return pvDescriptor;}
312
317 epics::pvData::PVStructurePtr getTimeStamp() const
318 {return pvTimeStamp;}
319
324 epics::pvData::PVStructurePtr getAlarm() const
325 {return pvAlarm;}
326
331 epics::pvData::PVUnionArrayPtr getValue() const
332 {return pvValue;}
333
338 epics::pvData::PVStringArrayPtr getChannelName() const
339 { return pvChannelName;};
340
345 epics::pvData::PVBooleanArrayPtr getIsConnected() const
346 { return pvIsConnected;};
347
352 epics::pvData::PVIntArrayPtr getSeverity() const
353 {return pvSeverity;}
354
359 epics::pvData::PVIntArrayPtr getStatus() const
360 {return pvStatus;}
361
366 epics::pvData::PVStringArrayPtr getMessage() const
367 {return pvMessage;}
368
373 epics::pvData::PVLongArrayPtr getSecondsPastEpoch() const
374 {return pvSecondsPastEpoch;}
375
380 epics::pvData::PVIntArrayPtr getNanoseconds() const
381 {return pvNanoseconds;}
382
387 epics::pvData::PVIntArrayPtr getUserTag() const
388 {return pvUserTag;}
389
390private:
391 NTMultiChannel(epics::pvData::PVStructurePtr const & pvStructure);
392 epics::pvData::PVStructurePtr pvNTMultiChannel;
393 epics::pvData::PVStructurePtr pvTimeStamp;
394 epics::pvData::PVStructurePtr pvAlarm;
395 epics::pvData::PVUnionArrayPtr pvValue;
396 epics::pvData::PVStringArrayPtr pvChannelName;
397 epics::pvData::PVBooleanArrayPtr pvIsConnected;
398 epics::pvData::PVIntArrayPtr pvSeverity;
399 epics::pvData::PVIntArrayPtr pvStatus;
400 epics::pvData::PVStringArrayPtr pvMessage;
401 epics::pvData::PVLongArrayPtr pvSecondsPastEpoch;
402 epics::pvData::PVIntArrayPtr pvNanoseconds;
403 epics::pvData::PVIntArrayPtr pvUserTag;
404 epics::pvData::PVStringPtr pvDescriptor;
406};
407
408}}
409#endif /* NTMULTICHANNEL_H */
Convenience Class for NTMultiChannel.
static const std::string URI
POINTER_DEFINITIONS(NTMultiChannel)
static bool is_a(epics::pvData::PVStructurePtr const &pvStructure)
epics::pvData::PVIntArrayPtr getSeverity() const
epics::pvData::PVIntArrayPtr getStatus() const
static bool isCompatible(epics::pvData::PVStructurePtr const &pvStructure)
static bool is_a(epics::pvData::StructureConstPtr const &structure)
epics::pvData::PVStructurePtr getAlarm() const
epics::pvData::PVStringPtr getDescriptor() const
epics::pvData::PVStringArrayPtr getChannelName() const
epics::pvData::PVIntArrayPtr getUserTag() const
epics::pvData::PVLongArrayPtr getSecondsPastEpoch() const
epics::pvData::PVStructurePtr getTimeStamp() const
epics::pvData::PVUnionArrayPtr getValue() const
epics::pvData::PVBooleanArrayPtr getIsConnected() const
epics::pvData::PVStructurePtr getPVStructure() const
epics::pvData::PVStringArrayPtr getMessage() const
epics::pvData::PVIntArrayPtr getNanoseconds() const
static bool isCompatible(epics::pvData::StructureConstPtr const &structure)
Interface for in-line creating of NTMultiChannel.
POINTER_DEFINITIONS(NTMultiChannelBuilder)
std::tr1::shared_ptr< NTMultiChannel > NTMultiChannelPtr
std::tr1::shared_ptr< detail::NTMultiChannelBuilder > NTMultiChannelBuilderPtr