Public Types | Public Member Functions | Public Attributes | Private Attributes

TAO_ESF_Copy_On_Write_Write_Guard< COLLECTION, ITERATOR, ACE_SYNCH_DECL > Class Template Reference

TAO_ESF_Copy_On_Write_Write_Guard. More...

#include <ESF_Copy_On_Write.h>

Collaboration diagram for TAO_ESF_Copy_On_Write_Write_Guard< COLLECTION, ITERATOR, ACE_SYNCH_DECL >:
Collaboration graph
[legend]

List of all members.

Public Types

typedef
TAO_ESF_Copy_On_Write_Collection
< COLLECTION, ITERATOR > 
Collection
 Constructor.

Public Member Functions

 TAO_ESF_Copy_On_Write_Write_Guard (ACE_SYNCH_MUTEX_T &mutex, ACE_SYNCH_CONDITION_T &cond, int &pending_writes, int &writing_flag, Collection *&collection)
 ~TAO_ESF_Copy_On_Write_Write_Guard (void)
 Destructor.

Public Attributes

Collectioncopy

Private Attributes

ACE_SYNCH_MUTEX_T & mutex
ACE_SYNCH_CONDITION_T & cond
int & pending_writes
int & writing_flag
Collection *& collection

Detailed Description

template<class COLLECTION, class ITERATOR, ACE_SYNCH_DECL>
class TAO_ESF_Copy_On_Write_Write_Guard< COLLECTION, ITERATOR, ACE_SYNCH_DECL >

TAO_ESF_Copy_On_Write_Write_Guard.

This helper class atomically increments the reference count of a TAO_ESF_Copy_On_Write_Collection and reads the current collection in the Copy_On_Write class.

Definition at line 87 of file ESF_Copy_On_Write.h.


Member Typedef Documentation

template<class COLLECTION , class ITERATOR , ACE_SYNCH_DECL >
typedef TAO_ESF_Copy_On_Write_Collection<COLLECTION,ITERATOR> TAO_ESF_Copy_On_Write_Write_Guard< COLLECTION, ITERATOR, ACE_SYNCH_DECL >::Collection

Constructor.

Definition at line 91 of file ESF_Copy_On_Write.h.


Constructor & Destructor Documentation

template<class COLLECTION , class ITERATOR , ACE_SYNCH_DECL >
TAO_ESF_Copy_On_Write_Write_Guard< COLLECTION, ITERATOR, ACE_SYNCH_DECL >::TAO_ESF_Copy_On_Write_Write_Guard ( ACE_SYNCH_MUTEX_T &  mutex,
ACE_SYNCH_CONDITION_T &  cond,
int &  pending_writes,
int &  writing_flag,
Collection *&  collection 
)

Definition at line 138 of file ESF_Copy_On_Write.cpp.

      :  copy (0),
         mutex (m),
         cond (c),
         pending_writes (p),
         writing_flag (w),
         collection (cr)
{
  {
    ACE_GUARD (ACE_SYNCH_MUTEX_T, ace_mon, this->mutex);

    this->pending_writes++;

    while (this->writing_flag != 0)
      this->cond.wait ();

    this->writing_flag = 1;
  }

  // Copy outside the mutex, because it may take a long time.
  // Nobody can change it, because it is protected by the
  // writing_flag.

  // First initialize it (with the correct reference count
  ACE_NEW (this->copy, Collection);
  // Copy the contents
  this->copy->collection = this->collection->collection;

  // Increase the reference counts
  ITERATOR end = this->copy->collection.end ();
  for (ITERATOR i = this->copy->collection.begin (); i != end; ++i)
    {
      (*i)->_incr_refcnt ();
    }
}

template<class COLLECTION , class ITERATOR , ACE_SYNCH_DECL >
TAO_ESF_Copy_On_Write_Write_Guard< COLLECTION, ITERATOR, ACE_SYNCH_DECL >::~TAO_ESF_Copy_On_Write_Write_Guard ( void   ) 

Destructor.

Definition at line 180 of file ESF_Copy_On_Write.cpp.

{
  Collection *tmp = 0;
  {
    ACE_GUARD (ACE_SYNCH_MUTEX_T, ace_mon, this->mutex);

    tmp = this->collection;
    this->collection = this->copy;
    this->writing_flag = 0;
    this->pending_writes--;

    this->cond.signal ();
  }
  // Delete outside the mutex, because it may take a long time.
  tmp->_decr_refcnt ();
}


Member Data Documentation

template<class COLLECTION , class ITERATOR , ACE_SYNCH_DECL >
Collection*& TAO_ESF_Copy_On_Write_Write_Guard< COLLECTION, ITERATOR, ACE_SYNCH_DECL >::collection [private]

Definition at line 108 of file ESF_Copy_On_Write.h.

template<class COLLECTION , class ITERATOR , ACE_SYNCH_DECL >
ACE_SYNCH_CONDITION_T& TAO_ESF_Copy_On_Write_Write_Guard< COLLECTION, ITERATOR, ACE_SYNCH_DECL >::cond [private]

Definition at line 105 of file ESF_Copy_On_Write.h.

template<class COLLECTION , class ITERATOR , ACE_SYNCH_DECL >
Collection* TAO_ESF_Copy_On_Write_Write_Guard< COLLECTION, ITERATOR, ACE_SYNCH_DECL >::copy

Definition at line 101 of file ESF_Copy_On_Write.h.

template<class COLLECTION , class ITERATOR , ACE_SYNCH_DECL >
ACE_SYNCH_MUTEX_T& TAO_ESF_Copy_On_Write_Write_Guard< COLLECTION, ITERATOR, ACE_SYNCH_DECL >::mutex [private]

Definition at line 104 of file ESF_Copy_On_Write.h.

template<class COLLECTION , class ITERATOR , ACE_SYNCH_DECL >
int& TAO_ESF_Copy_On_Write_Write_Guard< COLLECTION, ITERATOR, ACE_SYNCH_DECL >::pending_writes [private]

Definition at line 106 of file ESF_Copy_On_Write.h.

template<class COLLECTION , class ITERATOR , ACE_SYNCH_DECL >
int& TAO_ESF_Copy_On_Write_Write_Guard< COLLECTION, ITERATOR, ACE_SYNCH_DECL >::writing_flag [private]

Definition at line 107 of file ESF_Copy_On_Write.h.


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Friends Defines