This is Unofficial EPICS BASE Doxygen Site
PDBSinglePV Struct Reference

#include "pdbsingle.h"

+ Inheritance diagram for PDBSinglePV:
+ Collaboration diagram for PDBSinglePV:

Public Types

typedef std::set< PDBSingleMonitor * > interested_t
 
typedef std::set< BaseMonitor::shared_pointer > interested_remove_t
 

Public Member Functions

 POINTER_DEFINITIONS (PDBSinglePV)
 
shared_pointer shared_from_this ()
 
 PDBSinglePV (DBCH &chan, const PDBProvider::shared_pointer &prov)
 
virtual ~PDBSinglePV ()
 
void activate ()
 
virtual epics::pvAccess::Channel::shared_pointer connect (const std::tr1::shared_ptr< PDBProvider > &prov, const epics::pvAccess::ChannelRequester::shared_pointer &req) OVERRIDE FINAL
 
void addMonitor (PDBSingleMonitor *)
 
void removeMonitor (PDBSingleMonitor *)
 
void finalizeMonitor ()
 
- Public Member Functions inherited from PDBPV
 POINTER_DEFINITIONS (PDBPV)
 
 PDBPV ()
 
virtual ~PDBPV ()
 
virtual void show (int lvl)
 

Public Attributes

weak_pointer weakself
 
DBCH chan
 
PDBProvider::shared_pointer provider
 
epics::pvData::BitSet scratch
 
epicsMutex lock
 
p2p::auto_ptr< ScalarBuilderbuilder
 
p2p::auto_ptr< PVIFpvif
 
epics::pvData::PVStructurePtr complete
 
bool interested_iterating
 
interested_t interested
 
interested_t interested_add
 
interested_remove_t interested_remove
 
DBEvent evt_VALUE
 
DBEvent evt_PROPERTY
 
bool hadevent_VALUE
 
bool hadevent_PROPERTY
 
- Public Attributes inherited from PDBPV
epics::pvData::StructureConstPtr fielddesc
 

Static Public Attributes

static size_t num_instances
 

Detailed Description

Definition at line 23 of file pdbsingle.h.

Member Typedef Documentation

typedef std::set<BaseMonitor::shared_pointer> PDBSinglePV::interested_remove_t

Definition at line 52 of file pdbsingle.h.

Definition at line 48 of file pdbsingle.h.

Constructor & Destructor Documentation

PDBSinglePV::PDBSinglePV ( DBCH chan,
const PDBProvider::shared_pointer &  prov 
)

Definition at line 96 of file pdbsingle.cpp.

98  :provider(prov)
100  ,interested_iterating(false)
101  ,evt_VALUE(this)
102  ,evt_PROPERTY(this)
103  ,hadevent_VALUE(false)
104  ,hadevent_PROPERTY(false)
105 {
106  this->chan.swap(chan);
107  fielddesc = std::tr1::static_pointer_cast<const pvd::Structure>(builder->dtype(this->chan));
108 
109  complete = pvd::getPVDataCreate()->createPVStructure(fielddesc);
110  FieldName temp;
111  pvif.reset(builder->attach(this->chan, complete, temp));
112 
113  epics::atomic::increment(num_instances);
114 }
bool interested_iterating
Definition: pdbsingle.h:49
p2p::auto_ptr< PVIF > pvif
Definition: pdbsingle.h:44
shared_ptr< T > static_pointer_cast(shared_ptr< U > const &r) BOOST_NOEXCEPT
Definition: shared_ptr.hpp:788
bool hadevent_PROPERTY
Definition: pdbsingle.h:56
void swap(DBCH &)
Definition: pvif.cpp:67
PDBProvider::shared_pointer provider
Definition: pdbsingle.h:35
epics::pvData::StructureConstPtr fielddesc
Definition: pdb.h:19
DBEvent evt_PROPERTY
Definition: pdbsingle.h:55
This class implements introspection object for a structure.
Definition: pvIntrospect.h:697
epics::pvData::PVStructurePtr complete
Definition: pdbsingle.h:46
p2p::auto_ptr< ScalarBuilder > builder
Definition: pdbsingle.h:43
DBEvent evt_VALUE
Definition: pdbsingle.h:55
static size_t num_instances
Definition: pdbsingle.h:58
bool hadevent_VALUE
Definition: pdbsingle.h:56
FORCE_INLINE const PVDataCreatePtr & getPVDataCreate()
Definition: pvData.h:1648
PDBSinglePV::~PDBSinglePV ( )
virtual

Definition at line 116 of file pdbsingle.cpp.

117 {
118  epics::atomic::decrement(num_instances);
119 }
static size_t num_instances
Definition: pdbsingle.h:58

Member Function Documentation

void PDBSinglePV::activate ( )

Definition at line 121 of file pdbsingle.cpp.

122 {
123  evt_VALUE.create(provider->event_context, this->chan, &pdb_single_event, DBE_VALUE|DBE_ALARM);
124  evt_PROPERTY.create(provider->event_context, this->chan, &pdb_single_event, DBE_PROPERTY);
125 }
#define DBE_ALARM
Definition: caeventmask.h:41
PDBProvider::shared_pointer provider
Definition: pdbsingle.h:35
#define DBE_VALUE
Definition: caeventmask.h:38
DBEvent evt_PROPERTY
Definition: pdbsingle.h:55
void create(dbEventCtx ctx, dbChannel *ch, EVENTFUNC *fn, unsigned mask)
Definition: pvif.h:224
DBEvent evt_VALUE
Definition: pdbsingle.h:55
#define DBE_PROPERTY
Definition: caeventmask.h:42
void PDBSinglePV::addMonitor ( PDBSingleMonitor mon)

Definition at line 140 of file pdbsingle.cpp.

141 {
142  Guard G(lock);
143  if(interested.empty() && interested_add.empty()) {
144  // first monitor
145  // start subscription
146 
147  hadevent_VALUE = false;
148  hadevent_PROPERTY = false;
149  db_event_enable(evt_VALUE.subscript);
150  db_event_enable(evt_PROPERTY.subscript);
151  db_post_single_event(evt_VALUE.subscript);
152  db_post_single_event(evt_PROPERTY.subscript);
153 
154  } else if(hadevent_VALUE && hadevent_PROPERTY) {
155  // new subscriber and already had initial update
156  mon->post(G);
157  } // else new subscriber, but no initial update. so just wait
158 
160  interested_add.insert(mon);
161  } else {
162  interested.insert(mon);
163  }
164 }
bool interested_iterating
Definition: pdbsingle.h:49
interested_t interested
Definition: pdbsingle.h:50
dbEventSubscription subscript
Definition: pvif.h:216
bool hadevent_PROPERTY
Definition: pdbsingle.h:56
epicsMutex lock
Definition: pdbsingle.h:41
DBEvent evt_PROPERTY
Definition: pdbsingle.h:55
DBEvent evt_VALUE
Definition: pdbsingle.h:55
interested_t interested_add
Definition: pdbsingle.h:50
bool post(guard_t &guard, const epics::pvData::BitSet &updated, no_overflow)
post update if queue not full, if full return false w/o overflow
Definition: pvahelper.h:136
bool hadevent_VALUE
Definition: pdbsingle.h:56
pva::Channel::shared_pointer PDBSinglePV::connect ( const std::tr1::shared_ptr< PDBProvider > &  prov,
const epics::pvAccess::ChannelRequester::shared_pointer &  req 
)
virtual

Implements PDBPV.

Definition at line 128 of file pdbsingle.cpp.

130 {
131  PDBSingleChannel::shared_pointer ret(new PDBSingleChannel(shared_from_this(), req));
132 
133  ret->cred.update(req);
134 
135  ret->aspvt.add(chan, ret->cred);
136 
137  return ret;
138 }
shared_pointer shared_from_this()
Definition: pdbsingle.h:27
DBCH chan
Definition: pdbsingle.h:34
void PDBSinglePV::finalizeMonitor ( )

Definition at line 183 of file pdbsingle.cpp.

184 {
186 
187  if(interested.empty()) {
188  db_event_disable(evt_VALUE.subscript);
189  db_event_disable(evt_PROPERTY.subscript);
190  }
191 }
bool interested_iterating
Definition: pdbsingle.h:49
interested_t interested
Definition: pdbsingle.h:50
#define assert(exp)
Declare that a condition should be true.
Definition: epicsAssert.h:70
dbEventSubscription subscript
Definition: pvif.h:216
DBEvent evt_PROPERTY
Definition: pdbsingle.h:55
DBEvent evt_VALUE
Definition: pdbsingle.h:55
PDBSinglePV::POINTER_DEFINITIONS ( PDBSinglePV  )
void PDBSinglePV::removeMonitor ( PDBSingleMonitor mon)

Definition at line 166 of file pdbsingle.cpp.

167 {
168  Guard G(lock);
169 
170  if(interested_add.erase(mon)) {
171  // and+remove while iterating. no-op
172 
173  } else if(interested_iterating) {
174  // keep monitor alive while iterating
175  interested_remove.insert(mon->shared_from_this());
176 
177  } else {
178  interested.erase(mon);
179  finalizeMonitor();
180  }
181 }
bool interested_iterating
Definition: pdbsingle.h:49
interested_t interested
Definition: pdbsingle.h:50
interested_remove_t interested_remove
Definition: pdbsingle.h:53
epicsMutex lock
Definition: pdbsingle.h:41
shared_pointer shared_from_this()
Definition: pvahelper.h:73
void finalizeMonitor()
Definition: pdbsingle.cpp:183
interested_t interested_add
Definition: pdbsingle.h:50
shared_pointer PDBSinglePV::shared_from_this ( )
inline

Definition at line 27 of file pdbsingle.h.

27 { return shared_pointer(weakself); }
weak_pointer weakself
Definition: pdbsingle.h:26

Member Data Documentation

p2p::auto_ptr<ScalarBuilder> PDBSinglePV::builder

Definition at line 43 of file pdbsingle.h.

DBCH PDBSinglePV::chan

Definition at line 34 of file pdbsingle.h.

epics::pvData::PVStructurePtr PDBSinglePV::complete

Definition at line 46 of file pdbsingle.h.

DBEvent PDBSinglePV::evt_PROPERTY

Definition at line 55 of file pdbsingle.h.

DBEvent PDBSinglePV::evt_VALUE

Definition at line 55 of file pdbsingle.h.

bool PDBSinglePV::hadevent_PROPERTY

Definition at line 56 of file pdbsingle.h.

bool PDBSinglePV::hadevent_VALUE

Definition at line 56 of file pdbsingle.h.

interested_t PDBSinglePV::interested

Definition at line 50 of file pdbsingle.h.

interested_t PDBSinglePV::interested_add

Definition at line 50 of file pdbsingle.h.

bool PDBSinglePV::interested_iterating

Definition at line 49 of file pdbsingle.h.

interested_remove_t PDBSinglePV::interested_remove

Definition at line 53 of file pdbsingle.h.

epicsMutex PDBSinglePV::lock

Definition at line 41 of file pdbsingle.h.

size_t PDBSinglePV::num_instances
static

Definition at line 58 of file pdbsingle.h.

PDBProvider::shared_pointer PDBSinglePV::provider

Definition at line 35 of file pdbsingle.h.

p2p::auto_ptr<PVIF> PDBSinglePV::pvif

Definition at line 44 of file pdbsingle.h.

epics::pvData::BitSet PDBSinglePV::scratch

Definition at line 39 of file pdbsingle.h.

weak_pointer PDBSinglePV::weakself

Definition at line 26 of file pdbsingle.h.


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