normativeTypesCPP 6.0.2
ntscalarMultiChannel.h
Go to the documentation of this file.
1/* ntscalarMultiChannel.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 NTSCALARMULTICHANNEL_H
7#define NTSCALARMULTICHANNEL_H
8
9#include <vector>
10#include <string>
11
12#ifdef epicsExportSharedSymbols
13# define ntscalarMultiChannelEpicsExportSharedSymbols
14# undef epicsExportSharedSymbols
15#endif
16
17#include <pv/pvDisplay.h>
18#include <pv/pvControl.h>
19
20#ifdef ntscalarMultiChannelEpicsExportSharedSymbols
21# define epicsExportSharedSymbols
22# undef ntscalarMultiChannelEpicsExportSharedSymbols
23#endif
24
25#include <pv/ntfield.h>
26
27#include <shareLib.h>
28
29
30namespace epics { namespace nt {
31
32
33class NTScalarMultiChannel;
34typedef std::tr1::shared_ptr<NTScalarMultiChannel> NTScalarMultiChannelPtr;
35
36namespace detail {
37
46 class epicsShareClass NTScalarMultiChannelBuilder :
47 public std::tr1::enable_shared_from_this<NTScalarMultiChannelBuilder>
48 {
49 public:
51
58 shared_pointer value(epics::pvData::ScalarType scalarType);
59
64 shared_pointer addDescriptor();
65
70 shared_pointer addAlarm();
71
76 shared_pointer addTimeStamp();
77
82 shared_pointer addSeverity();
83
88 shared_pointer addStatus();
89
94 shared_pointer addMessage();
95
100 shared_pointer addSecondsPastEpoch();
101
106 shared_pointer addNanoseconds();
107
112 shared_pointer addUserTag();
113
118 shared_pointer addIsConnected();
119
125 epics::pvData::StructureConstPtr createStructure();
126
132 epics::pvData::PVStructurePtr createPVStructure();
133
140
147 shared_pointer add(std::string const & name, epics::pvData::FieldConstPtr const & field);
148
149 private:
151
152 void reset();
153
154 epics::pvData::ScalarType valueType;
155 bool descriptor;
156 bool alarm;
157 bool timeStamp;
158 bool severity;
159 bool status;
160 bool message;
161 bool secondsPastEpoch;
162 bool nanoseconds;
163 bool userTag;
164 bool isConnected;
165
166 // NOTE: this preserves order, however it does not handle duplicates
167 epics::pvData::StringArray extraFieldNames;
168 epics::pvData::FieldConstPtrArray extraFields;
169
170 friend class ::epics::nt::NTScalarMultiChannel;
171 };
172
173}
174
175typedef std::tr1::shared_ptr<detail::NTScalarMultiChannelBuilder> NTScalarMultiChannelBuilderPtr;
176
177
184class epicsShareClass NTScalarMultiChannel
185{
186public:
188
189 static const std::string URI;
190
202 static shared_pointer wrap(epics::pvData::PVStructurePtr const & pvStructure);
203
213 static shared_pointer wrapUnsafe(epics::pvData::PVStructurePtr const & pvStructure);
214
226 static bool is_a(epics::pvData::StructureConstPtr const & structure);
227
239 static bool is_a(epics::pvData::PVStructurePtr const & pvStructure);
240
250 static bool isCompatible(
251 epics::pvData::StructureConstPtr const &structure);
252
261 static bool isCompatible(
262 epics::pvData::PVStructurePtr const &pvStructure);
263
272 bool isValid();
273
278 static NTScalarMultiChannelBuilderPtr createBuilder();
279
290 bool attachTimeStamp(epics::pvData::PVTimeStamp &pvTimeStamp) const;
291
298 bool attachAlarm(epics::pvData::PVAlarm &pvAlarm) const;
299
304 epics::pvData::PVStructurePtr getPVStructure() const
305 {return pvNTScalarMultiChannel;}
306
311 epics::pvData::PVStringPtr getDescriptor() const
312 {return pvDescriptor;}
313
318 epics::pvData::PVStructurePtr getTimeStamp() const
319 {return pvTimeStamp;}
320
325 epics::pvData::PVStructurePtr getAlarm() const
326 {return pvAlarm;}
327
332 epics::pvData::PVScalarArrayPtr getValue() const
333 {return pvValue;}
334
342 template<typename PVT>
343 std::tr1::shared_ptr<PVT> getValue() const
344 {
345 return std::tr1::dynamic_pointer_cast<PVT>(pvValue);
346 }
347
352 epics::pvData::PVStringArrayPtr getChannelName() const
353 { return pvChannelName;};
354
359 epics::pvData::PVBooleanArrayPtr getIsConnected() const
360 { return pvIsConnected;};
361
366 epics::pvData::PVIntArrayPtr getSeverity() const
367 {return pvSeverity;}
368
373 epics::pvData::PVIntArrayPtr getStatus() const
374 {return pvStatus;}
375
380 epics::pvData::PVStringArrayPtr getMessage() const
381 {return pvMessage;}
382
387 epics::pvData::PVLongArrayPtr getSecondsPastEpoch() const
388 {return pvSecondsPastEpoch;}
389
394 epics::pvData::PVIntArrayPtr getNanoseconds() const
395 {return pvNanoseconds;}
396
401 epics::pvData::PVIntArrayPtr getUserTag() const
402 {return pvUserTag;}
403
404private:
405 NTScalarMultiChannel(epics::pvData::PVStructurePtr const & pvStructure);
406 epics::pvData::PVStructurePtr pvNTScalarMultiChannel;
407 epics::pvData::PVStructurePtr pvTimeStamp;
408 epics::pvData::PVStructurePtr pvAlarm;
409 epics::pvData::PVScalarArrayPtr pvValue;
410 epics::pvData::PVStringArrayPtr pvChannelName;
411 epics::pvData::PVBooleanArrayPtr pvIsConnected;
412 epics::pvData::PVIntArrayPtr pvSeverity;
413 epics::pvData::PVIntArrayPtr pvStatus;
414 epics::pvData::PVStringArrayPtr pvMessage;
415 epics::pvData::PVLongArrayPtr pvSecondsPastEpoch;
416 epics::pvData::PVIntArrayPtr pvNanoseconds;
417 epics::pvData::PVIntArrayPtr pvUserTag;
418 epics::pvData::PVStringPtr pvDescriptor;
420};
421
422}}
423#endif /* NTSCALARMULTICHANNEL_H */
Convenience Class for NTScalarMultiChannel.
static bool is_a(epics::pvData::StructureConstPtr const &structure)
static bool is_a(epics::pvData::PVStructurePtr const &pvStructure)
epics::pvData::PVBooleanArrayPtr getIsConnected() const
epics::pvData::PVScalarArrayPtr getValue() const
epics::pvData::PVIntArrayPtr getNanoseconds() const
epics::pvData::PVStructurePtr getPVStructure() const
epics::pvData::PVStructurePtr getTimeStamp() const
std::tr1::shared_ptr< PVT > getValue() const
POINTER_DEFINITIONS(NTScalarMultiChannel)
epics::pvData::PVIntArrayPtr getStatus() const
static bool isCompatible(epics::pvData::PVStructurePtr const &pvStructure)
epics::pvData::PVIntArrayPtr getUserTag() const
epics::pvData::PVIntArrayPtr getSeverity() const
epics::pvData::PVLongArrayPtr getSecondsPastEpoch() const
epics::pvData::PVStructurePtr getAlarm() const
epics::pvData::PVStringPtr getDescriptor() const
static bool isCompatible(epics::pvData::StructureConstPtr const &structure)
epics::pvData::PVStringArrayPtr getMessage() const
epics::pvData::PVStringArrayPtr getChannelName() const
Interface for in-line creating of NTScalarMultiChannel.
POINTER_DEFINITIONS(NTScalarMultiChannelBuilder)
std::tr1::shared_ptr< NTScalarMultiChannel > NTScalarMultiChannelPtr
std::tr1::shared_ptr< detail::NTScalarMultiChannelBuilder > NTScalarMultiChannelBuilderPtr