This is Unofficial EPICS BASE Doxygen Site
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 
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 
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;
166 
167  friend class ::epics::nt::NTMultiChannel;
168  };
169 
170 }
171 
172 typedef std::tr1::shared_ptr<detail::NTMultiChannelBuilder> NTMultiChannelBuilderPtr;
173 
174 
182 {
183 public:
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(
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 
304  {return pvNTMultiChannel;}
305 
311  {return pvDescriptor;}
312 
318  {return pvTimeStamp;}
319 
325  {return pvAlarm;}
326 
332  {return pvValue;}
333 
339  { return pvChannelName;};
340 
346  { return pvIsConnected;};
347 
353  {return pvSeverity;}
354 
360  {return pvStatus;}
361 
367  {return pvMessage;}
368 
374  {return pvSecondsPastEpoch;}
375 
381  {return pvNanoseconds;}
382 
388  {return pvUserTag;}
389 
390 private:
391  NTMultiChannel(epics::pvData::PVStructurePtr const & pvStructure);
392  epics::pvData::PVStructurePtr pvNTMultiChannel;
393  epics::pvData::PVStructurePtr pvTimeStamp;
396  epics::pvData::PVStringArrayPtr pvChannelName;
397  epics::pvData::PVBooleanArrayPtr pvIsConnected;
398  epics::pvData::PVIntArrayPtr pvSeverity;
401  epics::pvData::PVLongArrayPtr pvSecondsPastEpoch;
402  epics::pvData::PVIntArrayPtr pvNanoseconds;
404  epics::pvData::PVStringPtr pvDescriptor;
406 };
407 
408 }}
409 #endif /* NTMULTICHANNEL_H */
Definition: link.h:174
std::tr1::shared_ptr< PVIntArray > PVIntArrayPtr
Definition: pvData.h:1440
epics::pvData::PVIntArrayPtr getUserTag() const
epics::pvData::PVStructurePtr getTimeStamp() const
epics::pvData::PVIntArrayPtr getStatus() const
epics::pvData::PVLongArrayPtr getSecondsPastEpoch() const
pvd::Status status
epics::pvData::PVBooleanArrayPtr getIsConnected() const
epics::pvData::PVStringPtr getDescriptor() const
std::tr1::shared_ptr< PVBooleanArray > PVBooleanArrayPtr
Definition: pvData.h:1431
Interface for in-line creating of NTMultiChannel.
TODO only here because of the Lockable.
Definition: ntaggregate.cpp:16
std::tr1::shared_ptr< const Structure > StructureConstPtr
Definition: pvIntrospect.h:162
Mark external symbols and entry points for shared libraries.
std::tr1::shared_ptr< PVStringArray > PVStringArrayPtr
Definition: pvData.h:1464
epics::pvData::PVIntArrayPtr getNanoseconds() const
std::tr1::shared_ptr< const Union > UnionConstPtr
Definition: pvIntrospect.h:170
#define POINTER_DEFINITIONS(clazz)
Definition: sharedPtr.h:198
Methods for accessing a timeStamp structure.
Definition: pvTimeStamp.h:38
#define epicsShareClass
Definition: shareLib.h:206
std::tr1::shared_ptr< PVUnionArray > PVUnionArrayPtr
Definition: pvData.h:120
Methods for accessing an alarm structure.
Definition: pvAlarm.h:37
std::vector< FieldConstPtr > FieldConstPtrArray
Definition: pvIntrospect.h:146
epics::pvData::PVStructurePtr getAlarm() const
std::tr1::shared_ptr< const Field > FieldConstPtr
Definition: pvIntrospect.h:137
std::tr1::shared_ptr< PVLongArray > PVLongArrayPtr
Definition: pvData.h:1443
epics::pvData::PVStructurePtr getPVStructure() const
epics::pvData::PVStringArrayPtr getChannelName() const
std::tr1::shared_ptr< PVStructure > PVStructurePtr
Definition: pvData.h:87
std::tr1::shared_ptr< PVString > PVStringPtr
Definition: pvData.h:540
Convenience Class for NTMultiChannel.
static const std::string URI
std::vector< std::string > StringArray
Definition: pvType.h:110
std::tr1::shared_ptr< NTMultiChannel > NTMultiChannelPtr
epics::pvData::PVUnionArrayPtr getValue() const
epics::pvData::PVStringArrayPtr getMessage() const
std::tr1::shared_ptr< detail::NTMultiChannelBuilder > NTMultiChannelBuilderPtr
epics::pvData::PVIntArrayPtr getSeverity() const