normativeTypesCPP
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 
30 namespace epics { namespace nt {
31 
32 
34 typedef std::tr1::shared_ptr<NTScalarMultiChannel> NTScalarMultiChannelPtr;
35 
36 namespace detail {
37 
46  class epicsShareClass NTScalarMultiChannelBuilder :
47  public std::tr1::enable_shared_from_this<NTScalarMultiChannelBuilder>
48  {
49  public:
50  POINTER_DEFINITIONS(NTScalarMultiChannelBuilder);
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 
139  NTScalarMultiChannelPtr create();
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 
175 typedef std::tr1::shared_ptr<detail::NTScalarMultiChannelBuilder> NTScalarMultiChannelBuilderPtr;
176 
177 
184 class epicsShareClass NTScalarMultiChannel
185 {
186 public:
187  POINTER_DEFINITIONS(NTScalarMultiChannel);
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 
404 private:
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 */
epics::pvData::PVStructurePtr getTimeStamp() const
epics::pvData::PVIntArrayPtr getUserTag() const
epics::pvData::PVStringArrayPtr getChannelName() const
std::tr1::shared_ptr< PVT > getValue() const
epics::pvData::PVStringPtr getDescriptor() const
Interface for in-line creating of NTScalarMultiChannel.
std::tr1::shared_ptr< detail::NTScalarMultiChannelBuilder > NTScalarMultiChannelBuilderPtr
epics::pvData::PVScalarArrayPtr getValue() const
epics::pvData::PVBooleanArrayPtr getIsConnected() const
epics::pvData::PVStringArrayPtr getMessage() const
epics::pvData::PVIntArrayPtr getStatus() const
epics::pvData::PVIntArrayPtr getSeverity() const
epics::pvData::PVStructurePtr getPVStructure() const
epics::pvData::PVIntArrayPtr getNanoseconds() const
Convenience Class for NTScalarMultiChannel.
epics::pvData::PVLongArrayPtr getSecondsPastEpoch() const
epics::pvData::PVStructurePtr getAlarm() const
std::tr1::shared_ptr< NTScalarMultiChannel > NTScalarMultiChannelPtr