This is Unofficial EPICS BASE Doxygen Site
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 
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 
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;
169 
170  friend class ::epics::nt::NTScalarMultiChannel;
171  };
172 
173 }
174 
175 typedef std::tr1::shared_ptr<detail::NTScalarMultiChannelBuilder> NTScalarMultiChannelBuilderPtr;
176 
177 
185 {
186 public:
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(
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 
305  {return pvNTScalarMultiChannel;}
306 
312  {return pvDescriptor;}
313 
319  {return pvTimeStamp;}
320 
326  {return pvAlarm;}
327 
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 
353  { return pvChannelName;};
354 
360  { return pvIsConnected;};
361 
367  {return pvSeverity;}
368 
374  {return pvStatus;}
375 
381  {return pvMessage;}
382 
388  {return pvSecondsPastEpoch;}
389 
395  {return pvNanoseconds;}
396 
402  {return pvUserTag;}
403 
404 private:
406  epics::pvData::PVStructurePtr pvNTScalarMultiChannel;
407  epics::pvData::PVStructurePtr pvTimeStamp;
410  epics::pvData::PVStringArrayPtr pvChannelName;
411  epics::pvData::PVBooleanArrayPtr pvIsConnected;
412  epics::pvData::PVIntArrayPtr pvSeverity;
415  epics::pvData::PVLongArrayPtr pvSecondsPastEpoch;
416  epics::pvData::PVIntArrayPtr pvNanoseconds;
418  epics::pvData::PVStringPtr pvDescriptor;
420 };
421 
422 }}
423 #endif /* NTSCALARMULTICHANNEL_H */
Definition: link.h:174
std::tr1::shared_ptr< PVIntArray > PVIntArrayPtr
Definition: pvData.h:1440
pvd::Status status
epics::pvData::PVStringPtr getDescriptor() const
epics::pvData::PVScalarArrayPtr getValue() const
std::tr1::shared_ptr< PVBooleanArray > PVBooleanArrayPtr
Definition: pvData.h:1431
epics::pvData::PVIntArrayPtr getStatus() const
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::PVBooleanArrayPtr getIsConnected() const
std::tr1::shared_ptr< PVT > getValue() const
epics::pvData::PVStructurePtr getAlarm() const
Interface for in-line creating of NTScalarMultiChannel.
epics::pvData::PVStringArrayPtr getMessage() const
#define POINTER_DEFINITIONS(clazz)
Definition: sharedPtr.h:198
epics::pvData::PVIntArrayPtr getSeverity() const
std::tr1::shared_ptr< detail::NTScalarMultiChannelBuilder > NTScalarMultiChannelBuilderPtr
epics::pvData::PVStringArrayPtr getChannelName() const
Methods for accessing a timeStamp structure.
Definition: pvTimeStamp.h:38
#define epicsShareClass
Definition: shareLib.h:206
Methods for accessing an alarm structure.
Definition: pvAlarm.h:37
std::vector< FieldConstPtr > FieldConstPtrArray
Definition: pvIntrospect.h:146
epics::pvData::PVIntArrayPtr getUserTag() const
std::tr1::shared_ptr< const Field > FieldConstPtr
Definition: pvIntrospect.h:137
std::tr1::shared_ptr< PVLongArray > PVLongArrayPtr
Definition: pvData.h:1443
std::tr1::shared_ptr< PVStructure > PVStructurePtr
Definition: pvData.h:87
std::tr1::shared_ptr< PVString > PVStringPtr
Definition: pvData.h:540
std::vector< std::string > StringArray
Definition: pvType.h:110
epics::pvData::PVLongArrayPtr getSecondsPastEpoch() const
shared_ptr< T > dynamic_pointer_cast(shared_ptr< U > const &r) BOOST_NOEXCEPT
Definition: shared_ptr.hpp:808
Convenience Class for NTScalarMultiChannel.
epics::pvData::PVIntArrayPtr getNanoseconds() const
epics::pvData::PVStructurePtr getPVStructure() const
std::tr1::shared_ptr< PVScalarArray > PVScalarArrayPtr
Definition: pvData.h:82
epics::pvData::PVStructurePtr getTimeStamp() const
std::tr1::shared_ptr< NTScalarMultiChannel > NTScalarMultiChannelPtr