This is Unofficial EPICS BASE Doxygen Site
epics::pvAccess::ca::CAChannelGetField Class Reference

#include "caChannel.h"

+ Inheritance diagram for epics::pvAccess::ca::CAChannelGetField:
+ Collaboration diagram for epics::pvAccess::ca::CAChannelGetField:

Public Member Functions

 POINTER_DEFINITIONS (CAChannelGetField)
 
 CAChannelGetField (CAChannelPtr const &channel, GetFieldRequester::shared_pointer const &requester, std::string const &subField)
 
 ~CAChannelGetField ()
 
void callRequester (CAChannelPtr const &caChannel)
 
void activate ()
 

Detailed Description

Definition at line 70 of file caChannel.h.

Constructor & Destructor Documentation

epics::pvAccess::ca::CAChannelGetField::CAChannelGetField ( CAChannelPtr const &  channel,
GetFieldRequester::shared_pointer const &  requester,
std::string const &  subField 
)

Definition at line 371 of file caChannel.cpp.

374  : channel(channel),
375  getFieldRequester(requester),
376  subField(subField)
377 {
378  if(DEBUG_LEVEL>0) {
379  cout << "CAChannelGetField::CAChannelGetField()\n";
380  }
381 }
#define DEBUG_LEVEL
Definition: caProviderPvt.h:25
const ChannelProcessRequester::weak_pointer requester
Definition: pvAccess.cpp:68
epics::pvAccess::ca::CAChannelGetField::~CAChannelGetField ( )

Definition at line 389 of file caChannel.cpp.

390 {
391  if(DEBUG_LEVEL>0) {
392  cout << "CAChannelGetField::~CAChannelGetField()\n";
393  }
394 }
#define DEBUG_LEVEL
Definition: caProviderPvt.h:25

Member Function Documentation

void epics::pvAccess::ca::CAChannelGetField::activate ( )

Definition at line 383 of file caChannel.cpp.

384 {
385  CAChannelPtr chan(channel.lock());
386  if(chan) callRequester(chan);
387 }
std::tr1::shared_ptr< CAChannel > CAChannelPtr
Definition: caChannel.h:31
void callRequester(CAChannelPtr const &caChannel)
Definition: caChannel.cpp:396
void epics::pvAccess::ca::CAChannelGetField::callRequester ( CAChannelPtr const &  caChannel)

Definition at line 396 of file caChannel.cpp.

397 {
398  if(DEBUG_LEVEL>0) {
399  cout << "CAChannelGetField::callRequester\n";
400  }
401  GetFieldRequester::shared_pointer requester(getFieldRequester.lock());
402  if(!requester) return;
403  PVStructurePtr pvRequest(createRequest(""));
404  DbdToPvPtr dbdToPv = DbdToPv::create(caChannel,pvRequest,getIO);
405  Structure::const_shared_pointer structure(dbdToPv->getStructure());
406  Field::const_shared_pointer field =
407  subField.empty() ?
409  structure->getField(subField);
410 
411  if (field)
412  {
413  EXCEPTION_GUARD(requester->getDone(Status::Ok, field));
414  }
415  else
416  {
417  Status errorStatus(Status::STATUSTYPE_ERROR, "field '" + subField + "' not found");
418  EXCEPTION_GUARD(requester->getDone(errorStatus, FieldConstPtr()));
419  }
420 }
#define DEBUG_LEVEL
Definition: caProviderPvt.h:25
static Status Ok
Definition: status.h:47
shared_ptr< T > static_pointer_cast(shared_ptr< U > const &r) BOOST_NOEXCEPT
Definition: shared_ptr.hpp:788
PVStructure::shared_pointer createRequest(std::string const &request)
This class implements introspection object for field.
Definition: pvIntrospect.h:336
const ChannelProcessRequester::weak_pointer requester
Definition: pvAccess.cpp:68
std::tr1::shared_ptr< const Field > FieldConstPtr
Definition: pvIntrospect.h:137
std::tr1::shared_ptr< PVStructure > PVStructurePtr
Definition: pvData.h:87
#define EXCEPTION_GUARD(code)
Definition: caChannel.cpp:31
std::tr1::shared_ptr< DbdToPv > DbdToPvPtr
Definition: dbdToPv.h:73
static DbdToPvPtr create(CAChannelPtr const &caChannel, epics::pvData::PVStructurePtr const &pvRequest, IOType ioType)
Definition: dbdToPv.cpp:37
epics::pvAccess::ca::CAChannelGetField::POINTER_DEFINITIONS ( CAChannelGetField  )

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