ACE_Utils::Auto_Functor< X, Functor > Class Template Reference

Helper template to implement auto_ptr<>-like classes, but executing a functor in the destructor, instead of always deleting things. More...

#include <Auto_Functor.h>

Collaboration diagram for ACE_Utils::Auto_Functor< X, Functor >:

Collaboration graph
[legend]
List of all members.

Public Types

typedef X element_type
typedef Functor functor_type

Public Member Functions

 Auto_Functor (X *p=0, Functor functor=Functor())
 Constructor.
 Auto_Functor (Auto_Functor &rhs)
Auto_Functor< X, Functor > & operator= (Auto_Functor &rhs)
template<typename Y>
 Auto_Functor (Auto_Functor< Y, Functor > &rhs)
template<typename Y>
Auto_Functor< X, Functor > & operator= (Auto_Functor< Y, Functor > &rhs)
 ~Auto_Functor ()
X & operator * () const
X * operator-> () const
X * get ()
X * release ()
void reset (X *p=0)
void reset (X *p, Functor f)
Functor const & functor () const
 Auto_Functor (Auto_Functor_Ref< X, Functor > rhs)
Auto_Functor< X, Functor > & operator= (Auto_Functor_Ref< X, Functor > rhs)
template<typename Y>
 operator Auto_Functor_Ref ()
template<typename Y>
 operator Auto_Functor ()

Private Attributes

X * p_
Functor f_

Detailed Description

template<typename X, typename Functor>
class ACE_Utils::Auto_Functor< X, Functor >

Helper template to implement auto_ptr<>-like classes, but executing a functor in the destructor, instead of always deleting things.

The functor is called in the destructor, and it must implement:

Functor() throw();
Functor(Functor const &) throw();
Functor & operator=(Functor const &) throw();
void operator()(X * p) throw();

Definition at line 58 of file Auto_Functor.h.


Member Typedef Documentation

template<typename X, typename Functor>
typedef X ACE_Utils::Auto_Functor< X, Functor >::element_type

Definition at line 61 of file Auto_Functor.h.

template<typename X, typename Functor>
typedef Functor ACE_Utils::Auto_Functor< X, Functor >::functor_type

Definition at line 62 of file Auto_Functor.h.


Constructor & Destructor Documentation

template<typename X, typename Functor>
ACE_INLINE ACE_Utils::Auto_Functor< X, Functor >::Auto_Functor ( X *  p = 0,
Functor  functor = Functor() 
) [explicit]

Constructor.

Definition at line 16 of file Auto_Functor.inl.

00017   : p_(p)
00018   , f_(f)
00019 {
00020 }

template<typename X, typename Functor>
ACE_INLINE ACE_Utils::Auto_Functor< X, Functor >::Auto_Functor ( Auto_Functor< X, Functor > &  rhs  ) 

Definition at line 23 of file Auto_Functor.inl.

00024   : p_(rhs.release())
00025   , f_(rhs.f_)
00026 {
00027 }

template<typename X, typename Functor>
template<typename Y>
ACE_INLINE ACE_Utils::Auto_Functor< X, Functor >::Auto_Functor ( Auto_Functor< Y, Functor > &  rhs  ) 

Definition at line 40 of file Auto_Functor.inl.

00041   : p_(rhs.release())
00042   , f_(rhs.f_)
00043 {
00044 }

template<typename X, typename Functor>
ACE_BEGIN_VERSIONED_NAMESPACE_DECL ACE_Utils::Auto_Functor< X, Functor >::~Auto_Functor (  ) 

Definition at line 15 of file Auto_Functor.cpp.

References ACE_Utils::Auto_Functor< X, Functor >::reset().

00016 {
00017   reset(0);
00018 }

template<typename X, typename Functor>
ACE_INLINE ACE_Utils::Auto_Functor< X, Functor >::Auto_Functor ( Auto_Functor_Ref< X, Functor >  rhs  ) 

Definition at line 92 of file Auto_Functor.inl.

00093   : p_(rhs.p_)
00094   , f_(rhs.f_)
00095 {
00096 }


Member Function Documentation

template<typename X, typename Functor>
ACE_INLINE Functor const & ACE_Utils::Auto_Functor< X, Functor >::functor (  )  const

Definition at line 86 of file Auto_Functor.inl.

References ACE_Utils::Auto_Functor< X, Functor >::f_.

00087 {
00088   return f_;
00089 }

template<typename X, typename Functor>
ACE_INLINE X * ACE_Utils::Auto_Functor< X, Functor >::get (  ) 

Definition at line 70 of file Auto_Functor.inl.

References ACE_Utils::Auto_Functor< X, Functor >::p_.

00071 {
00072   return p_;
00073 }

template<typename X, typename Functor>
ACE_INLINE X & ACE_Utils::Auto_Functor< X, Functor >::operator * (  )  const

Definition at line 56 of file Auto_Functor.inl.

References ACE_Utils::Auto_Functor< X, Functor >::p_.

00057 {
00058   return *p_;
00059 }

template<typename X, typename Functor>
template<typename Y>
ACE_Utils::Auto_Functor< X, Functor >::operator Auto_Functor (  ) 

template<typename X, typename Functor>
template<typename Y>
ACE_Utils::Auto_Functor< X, Functor >::operator Auto_Functor_Ref (  ) 

template<typename X, typename Functor>
ACE_INLINE X * ACE_Utils::Auto_Functor< X, Functor >::operator-> (  )  const

Definition at line 63 of file Auto_Functor.inl.

References ACE_Utils::Auto_Functor< X, Functor >::p_.

00064 {
00065   return p_;
00066 }

template<typename X, typename Functor>
ACE_INLINE ACE_Utils::Auto_Functor< X, Functor > & ACE_Utils::Auto_Functor< X, Functor >::operator= ( Auto_Functor_Ref< X, Functor >  rhs  ) 

Definition at line 100 of file Auto_Functor.inl.

References ACE_Utils::Auto_Functor_Ref< X, Functor >::f_, ACE_Utils::Auto_Functor< X, Functor >::f_, ACE_Utils::Auto_Functor< X, Functor >::p_, ACE_Utils::Auto_Functor_Ref< X, Functor >::p_, and ACE_Utils::Auto_Functor< X, Functor >::reset().

00101 {
00102   if(rhs.p_ != p_)
00103   {
00104     reset(rhs.p_);
00105     f_ = rhs.f_;
00106   }
00107   return *this;
00108 }

template<typename X, typename Functor>
template<typename Y>
ACE_INLINE ACE_Utils::Auto_Functor< X, Functor > & ACE_Utils::Auto_Functor< X, Functor >::operator= ( Auto_Functor< Y, Functor > &  rhs  ) 

Definition at line 48 of file Auto_Functor.inl.

References ACE_Utils::Auto_Functor< X, Functor >::release(), and ACE_Utils::Auto_Functor< X, Functor >::reset().

00049 {
00050   reset(rhs.release());
00051   return *this;
00052 }

template<typename X, typename Functor>
ACE_INLINE ACE_Utils::Auto_Functor< X, Functor > & ACE_Utils::Auto_Functor< X, Functor >::operator= ( Auto_Functor< X, Functor > &  rhs  ) 

Definition at line 31 of file Auto_Functor.inl.

References ACE_Utils::Auto_Functor< X, Functor >::f_, ACE_Utils::Auto_Functor< X, Functor >::release(), and ACE_Utils::Auto_Functor< X, Functor >::reset().

00032 {
00033   reset(rhs.release());
00034   f_ = rhs.f_;
00035   return *this;
00036 }

template<typename X, typename Functor>
ACE_INLINE X * ACE_Utils::Auto_Functor< X, Functor >::release (  ) 

Definition at line 77 of file Auto_Functor.inl.

References ACE_Utils::Auto_Functor< X, Functor >::p_.

Referenced by ACE_Utils::Auto_Functor< X, Functor >::operator=().

00078 {
00079   X * tmp = p_;
00080   p_ = 0;
00081   return tmp;
00082 }

template<typename X, typename Functor>
void ACE_Utils::Auto_Functor< X, Functor >::reset ( X *  p,
Functor  f 
)

Definition at line 31 of file Auto_Functor.cpp.

References ACE_Utils::Auto_Functor< X, Functor >::f_, and ACE_Utils::Auto_Functor< X, Functor >::reset().

00032 {
00033   reset(p);
00034   f_ = f;
00035 }

template<typename X, typename Functor>
void ACE_Utils::Auto_Functor< X, Functor >::reset ( X *  p = 0  ) 

Definition at line 21 of file Auto_Functor.cpp.

References ACE_Utils::Auto_Functor< X, Functor >::f_, and ACE_Utils::Auto_Functor< X, Functor >::p_.

Referenced by ACE_Utils::Auto_Functor< X, Functor >::operator=(), ACE_Utils::Auto_Functor< X, Functor >::reset(), and ACE_Utils::Auto_Functor< X, Functor >::~Auto_Functor().

00022 {
00023   if(p_ != 0)
00024   {
00025     f_(p_);
00026   }
00027   p_ = p;
00028 }


Member Data Documentation

template<typename X, typename Functor>
Functor ACE_Utils::Auto_Functor< X, Functor >::f_ [private]

Definition at line 111 of file Auto_Functor.h.

Referenced by ACE_Utils::Auto_Functor< X, Functor >::functor(), ACE_Utils::Auto_Functor< X, Functor >::operator=(), and ACE_Utils::Auto_Functor< X, Functor >::reset().

template<typename X, typename Functor>
X* ACE_Utils::Auto_Functor< X, Functor >::p_ [private]

Definition at line 109 of file Auto_Functor.h.

Referenced by ACE_Utils::Auto_Functor< X, Functor >::get(), ACE_Utils::Auto_Functor< X, Functor >::operator *(), ACE_Utils::Auto_Functor< X, Functor >::operator->(), ACE_Utils::Auto_Functor< X, Functor >::operator=(), ACE_Utils::Auto_Functor< X, Functor >::release(), and ACE_Utils::Auto_Functor< X, Functor >::reset().


The documentation for this class was generated from the following files:
Generated on Tue Feb 2 17:36:07 2010 for ACE by  doxygen 1.4.7