TAO_ESF_Copy_On_Read< PROXY, COLLECTION, ITERATOR, ACE_LOCK > Class Template Reference

Implement the Copy_On_Read protocol. More...

#include <ESF_Copy_On_Read.h>

Inheritance diagram for TAO_ESF_Copy_On_Read< PROXY, COLLECTION, ITERATOR, ACE_LOCK >:

Inheritance graph
[legend]
Collaboration diagram for TAO_ESF_Copy_On_Read< PROXY, COLLECTION, ITERATOR, ACE_LOCK >:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 TAO_ESF_Copy_On_Read (void)
 Constructors.

 TAO_ESF_Copy_On_Read (const COLLECTION &collection)
virtual void for_each (TAO_ESF_Worker< PROXY > *worker ACE_ENV_ARG_DECL)
virtual void connected (PROXY *proxy ACE_ENV_ARG_DECL)
virtual void reconnected (PROXY *proxy ACE_ENV_ARG_DECL)
virtual void disconnected (PROXY *proxy ACE_ENV_ARG_DECL)
virtual void shutdown (ACE_ENV_SINGLE_ARG_DECL)

Private Attributes

COLLECTION collection_
ACE_LOCK lock_

Detailed Description

template<class PROXY, class COLLECTION, class ITERATOR, class ACE_LOCK>
class TAO_ESF_Copy_On_Read< PROXY, COLLECTION, ITERATOR, ACE_LOCK >

Implement the Copy_On_Read protocol.

The class is parametric on the kind of collection and locking mechanism used.

Definition at line 38 of file ESF_Copy_On_Read.h.


Constructor & Destructor Documentation

template<class PROXY, class COLLECTION, class ITERATOR, class ACE_LOCK>
TAO_BEGIN_VERSIONED_NAMESPACE_DECL TAO_ESF_Copy_On_Read< PROXY, COLLECTION, ITERATOR, ACE_LOCK >::TAO_ESF_Copy_On_Read void   ) 
 

Constructors.

Definition at line 13 of file ESF_Copy_On_Read.cpp.

00014 {
00015 }

template<class PROXY, class COLLECTION, class ITERATOR, class ACE_LOCK>
TAO_ESF_Copy_On_Read< PROXY, COLLECTION, ITERATOR, ACE_LOCK >::TAO_ESF_Copy_On_Read const COLLECTION &  collection  ) 
 

Definition at line 19 of file ESF_Copy_On_Read.cpp.

00020       :  collection_ (collection)
00021 {
00022 }


Member Function Documentation

template<class PROXY, class COLLECTION, class ITERATOR, class ACE_LOCK>
void TAO_ESF_Copy_On_Read< PROXY, COLLECTION, ITERATOR, ACE_LOCK >::connected PROXY *proxy  ACE_ENV_ARG_DECL  )  [virtual]
 

Definition at line 79 of file ESF_Copy_On_Read.cpp.

References ACE_ENV_ARG_PARAMETER, and ACE_GUARD.

00081 {
00082   ACE_GUARD (ACE_LOCK, ace_mon, this->lock_);
00083 
00084   proxy->_incr_refcnt ();
00085   this->collection_.connected (proxy ACE_ENV_ARG_PARAMETER);
00086 }

template<class PROXY, class COLLECTION, class ITERATOR, class ACE_LOCK>
void TAO_ESF_Copy_On_Read< PROXY, COLLECTION, ITERATOR, ACE_LOCK >::disconnected PROXY *proxy  ACE_ENV_ARG_DECL  )  [virtual]
 

Definition at line 101 of file ESF_Copy_On_Read.cpp.

References ACE_ENV_ARG_PARAMETER, and ACE_GUARD.

00103 {
00104   ACE_GUARD (ACE_LOCK, ace_mon, this->lock_);
00105 
00106   this->collection_.disconnected (proxy ACE_ENV_ARG_PARAMETER);
00107 }

template<class PROXY, class COLLECTION, class ITERATOR, class ACE_LOCK>
void TAO_ESF_Copy_On_Read< PROXY, COLLECTION, ITERATOR, ACE_LOCK >::for_each TAO_ESF_Worker< PROXY > *worker  ACE_ENV_ARG_DECL  )  [virtual]
 

Definition at line 26 of file ESF_Copy_On_Read.cpp.

References ACE_CATCHANY, ACE_ENDTRY, ACE_ENV_ARG_PARAMETER, ACE_GUARD, ACE_NEW, ACE_RE_THROW, ACE_TRY, and ACE_TRY_CHECK.

00028 {
00029   // @@ Use an allocator for this memory...
00030   PROXY **proxies = 0;
00031   size_t size = 0;
00032   ACE_TRY
00033     {
00034       {
00035         ACE_GUARD (ACE_LOCK, ace_mon, this->lock_);
00036 
00037         size = this->collection_.size ();
00038         ACE_NEW (proxies, PROXY*[size]);
00039         PROXY **j = proxies;
00040 
00041         for (; j != proxies + size; ++j)
00042           *j = 0;
00043 
00044         j = proxies;
00045 
00046         ITERATOR end = this->collection_.end ();
00047         for (ITERATOR i = this->collection_.begin (); i != end; ++i)
00048           {
00049             *j = *i;
00050             (*j)->_incr_refcnt ();
00051             ++j;
00052           }
00053       }
00054       worker->set_size(size);
00055       for (PROXY **j = proxies; j != proxies + size; ++j)
00056         {
00057           worker->work (*j ACE_ENV_ARG_PARAMETER);
00058           ACE_TRY_CHECK;
00059           (*j)->_decr_refcnt ();
00060         }
00061       delete[] proxies;
00062     }
00063   ACE_CATCHANY
00064     {
00065       for (PROXY **j = proxies; j != proxies + size; ++j)
00066         {
00067           if (*j != 0)
00068             (*j)->_decr_refcnt ();
00069         }
00070       delete[] proxies;
00071 
00072       ACE_RE_THROW;
00073     }
00074   ACE_ENDTRY;
00075 }

template<class PROXY, class COLLECTION, class ITERATOR, class ACE_LOCK>
void TAO_ESF_Copy_On_Read< PROXY, COLLECTION, ITERATOR, ACE_LOCK >::reconnected PROXY *proxy  ACE_ENV_ARG_DECL  )  [virtual]
 

Definition at line 90 of file ESF_Copy_On_Read.cpp.

References ACE_ENV_ARG_PARAMETER, and ACE_GUARD.

00092 {
00093   ACE_GUARD (ACE_LOCK, ace_mon, this->lock_);
00094 
00095   proxy->_incr_refcnt ();
00096   this->collection_.reconnected (proxy ACE_ENV_ARG_PARAMETER);
00097 }

template<class PROXY, class COLLECTION, class ITERATOR, class ACE_LOCK>
void TAO_ESF_Copy_On_Read< PROXY, COLLECTION, ITERATOR, ACE_LOCK >::shutdown ACE_ENV_SINGLE_ARG_DECL   )  [virtual]
 

Definition at line 111 of file ESF_Copy_On_Read.cpp.

References ACE_ENV_SINGLE_ARG_PARAMETER, and ACE_GUARD.

00112 {
00113   ACE_GUARD (ACE_LOCK, ace_mon, this->lock_);
00114 
00115   this->collection_.shutdown (ACE_ENV_SINGLE_ARG_PARAMETER);
00116 }


Member Data Documentation

template<class PROXY, class COLLECTION, class ITERATOR, class ACE_LOCK>
COLLECTION TAO_ESF_Copy_On_Read< PROXY, COLLECTION, ITERATOR, ACE_LOCK >::collection_ [private]
 

Definition at line 57 of file ESF_Copy_On_Read.h.

template<class PROXY, class COLLECTION, class ITERATOR, class ACE_LOCK>
ACE_LOCK TAO_ESF_Copy_On_Read< PROXY, COLLECTION, ITERATOR, ACE_LOCK >::lock_ [private]
 

Definition at line 59 of file ESF_Copy_On_Read.h.


The documentation for this class was generated from the following files:
Generated on Thu Nov 9 13:08:44 2006 for TAO_ESF by doxygen 1.3.6