This is Unofficial EPICS BASE Doxygen Site
epics::pvaClient::PvaClientNTMultiGet Class Reference

Provides channelGet to multiple channels where the value field of each channel is presented as a union. More...

#include "pvaClientMultiChannel.h"

+ Inheritance diagram for epics::pvaClient::PvaClientNTMultiGet:
+ Collaboration diagram for epics::pvaClient::PvaClientNTMultiGet:

Public Member Functions

 POINTER_DEFINITIONS (PvaClientNTMultiGet)
 
 ~PvaClientNTMultiGet ()
 
void connect ()
 Connect a channelGet for each channel. More...
 
void get (bool valueOnly=true)
 Get each channel. More...
 
PvaClientNTMultiDataPtr getData ()
 Get the data from the last get. More...
 
PvaClientNTMultiGetPtr getPtrSelf ()
 Get the shared pointer to self. More...
 

Static Public Member Functions

static PvaClientNTMultiGetPtr create (PvaClientMultiChannelPtr const &pvaClientMultiChannel, PvaClientChannelArray const &pvaClientChannelArray, epics::pvData::PVStructurePtr const &pvRequest)
 Create a PvaClientNTMultiGet. More...
 

Detailed Description

Provides channelGet to multiple channels where the value field of each channel is presented as a union.

Definition at line 338 of file pvaClientMultiChannel.h.

Constructor & Destructor Documentation

epics::pvaClient::PvaClientNTMultiGet::~PvaClientNTMultiGet ( )

Definition at line 57 of file pvaClientNTMultiGet.cpp.

58 {
59  if(PvaClient::getDebug()) cout<< "PvaClientNTMultiGet::~PvaClientNTMultiGet()\n";
60 }
static bool getDebug()
Is debug set?
Definition: pvaClient.cpp:97

Member Function Documentation

void epics::pvaClient::PvaClientNTMultiGet::connect ( )

Connect a channelGet for each channel.

Definition at line 62 of file pvaClientNTMultiGet.cpp.

63 {
64  pvaClientGet.resize(nchannel);
65  shared_vector<epics::pvData::boolean> isConnected = pvaClientMultiChannel->getIsConnected();
66  for(size_t i=0; i<nchannel; ++i)
67  {
68  if(isConnected[i]) {
69  pvaClientGet[i] = pvaClientChannelArray[i]->createGet(pvRequest);
70  pvaClientGet[i]->issueConnect();
71  }
72  }
73  for(size_t i=0; i<nchannel; ++i)
74  {
75  if(isConnected[i]) {
76  Status status = pvaClientGet[i]->waitConnect();
77  if(status.isOK()) continue;
78  string message = string("channel ") +pvaClientChannelArray[i]->getChannelName()
79  + " PvaChannelGet::waitConnect " + status.getMessage();
80  throw std::runtime_error(message);
81  }
82  }
83  this->isConnected = true;
84 }
pvd::Status status
int i
Definition: scan.c:967
const std::string & getMessage() const
Definition: status.h:80
bool isOK() const
Definition: status.h:95
PvaClientNTMultiGetPtr epics::pvaClient::PvaClientNTMultiGet::create ( PvaClientMultiChannelPtr const &  pvaClientMultiChannel,
PvaClientChannelArray const &  pvaClientChannelArray,
epics::pvData::PVStructurePtr const &  pvRequest 
)
static

Create a PvaClientNTMultiGet.

Parameters
pvaClientMultiChannelThe interface to PvaClientMultiChannel.
pvaClientChannelArrayThe PvaClientChannel array.
pvRequestThe pvRequest for each channel.
Returns
The interface.

Definition at line 26 of file pvaClientNTMultiGet.cpp.

30 {
31  UnionConstPtr u = getFieldCreate()->createVariantUnion();
32  PvaClientNTMultiGetPtr pvaClientNTMultiGet(
33  new PvaClientNTMultiGet(u,pvaMultiChannel,pvaClientChannelArray,pvRequest));
34  return pvaClientNTMultiGet;
35 }
std::tr1::shared_ptr< PvaClientNTMultiGet > PvaClientNTMultiGetPtr
std::tr1::shared_ptr< const Union > UnionConstPtr
Definition: pvIntrospect.h:170
FORCE_INLINE const FieldCreatePtr & getFieldCreate()
void epics::pvaClient::PvaClientNTMultiGet::get ( bool  valueOnly = true)

Get each channel.

Parameters
valueOnlyuse only value for union.

Definition at line 86 of file pvaClientNTMultiGet.cpp.

87 {
88  if(!isConnected) connect();
89  shared_vector<epics::pvData::boolean> isConnected = pvaClientMultiChannel->getIsConnected();
90 
91  for(size_t i=0; i<nchannel; ++i)
92  {
93  if(isConnected[i]) {
94  pvaClientGet[i]->issueGet();
95  }
96  }
97  for(size_t i=0; i<nchannel; ++i)
98  {
99  if(isConnected[i]) {
100  Status status = pvaClientGet[i]->waitGet();
101  if(status.isOK()) continue;
102  string message = string("channel ") +pvaClientChannelArray[i]->getChannelName()
103  + " PvaChannelGet::waitGet " + status.getMessage();
104  throw std::runtime_error(message);
105  }
106  }
107  pvaClientNTMultiData->startDeltaTime();
108  for(size_t i=0; i<nchannel; ++i)
109  {
110  if(isConnected[i]) {
111  pvaClientNTMultiData->setPVStructure(pvaClientGet[i]->getData()->getPVStructure(),i);
112  }
113  }
114  pvaClientNTMultiData->endDeltaTime(valueOnly);
115 }
pvd::Status status
int i
Definition: scan.c:967
const std::string & getMessage() const
Definition: status.h:80
PvaClientNTMultiDataPtr getData()
Get the data from the last get.
void connect()
Connect a channelGet for each channel.
bool isOK() const
Definition: status.h:95
PvaClientNTMultiDataPtr epics::pvaClient::PvaClientNTMultiGet::getData ( )

Get the data from the last get.

Returns
the pvaClientNTMultiData.

Definition at line 117 of file pvaClientNTMultiGet.cpp.

118 {
119  return pvaClientNTMultiData;
120 }
PvaClientNTMultiGetPtr epics::pvaClient::PvaClientNTMultiGet::getPtrSelf ( )
inline

Get the shared pointer to self.

Returns
The shared pointer.

Definition at line 375 of file pvaClientMultiChannel.h.

376  {
377  return shared_from_this();
378  }
epics::pvaClient::PvaClientNTMultiGet::POINTER_DEFINITIONS ( PvaClientNTMultiGet  )

The documentation for this class was generated from the following files: