normativeTypesCPP
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 
30 namespace epics { namespace nt {
31 
32 
34 typedef std::tr1::shared_ptr<NTMultiChannel> NTMultiChannelPtr;
35 
36 namespace detail {
37 
45  class epicsShareClass NTMultiChannelBuilder :
46  public std::tr1::enable_shared_from_this<NTMultiChannelBuilder>
47  {
48  public:
49  POINTER_DEFINITIONS(NTMultiChannelBuilder);
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 
172 typedef std::tr1::shared_ptr<detail::NTMultiChannelBuilder> NTMultiChannelBuilderPtr;
173 
174 
181 class epicsShareClass NTMultiChannel
182 {
183 public:
184  POINTER_DEFINITIONS(NTMultiChannel);
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 
390 private:
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 */
epics::pvData::PVStringArrayPtr getChannelName() const
epics::pvData::PVIntArrayPtr getUserTag() const
epics::pvData::PVIntArrayPtr getSeverity() const
epics::pvData::PVStringPtr getDescriptor() const
Interface for in-line creating of NTMultiChannel.
epics::pvData::PVBooleanArrayPtr getIsConnected() const
epics::pvData::PVStructurePtr getAlarm() const
epics::pvData::PVStringArrayPtr getMessage() const
epics::pvData::PVUnionArrayPtr getValue() const
epics::pvData::PVStructurePtr getPVStructure() const
Convenience Class for NTMultiChannel.
static const std::string URI
std::tr1::shared_ptr< NTMultiChannel > NTMultiChannelPtr
epics::pvData::PVIntArrayPtr getStatus() const
epics::pvData::PVLongArrayPtr getSecondsPastEpoch() const
std::tr1::shared_ptr< detail::NTMultiChannelBuilder > NTMultiChannelBuilderPtr
epics::pvData::PVIntArrayPtr getNanoseconds() const
epics::pvData::PVStructurePtr getTimeStamp() const