Auto_Functor.inl

Go to the documentation of this file.
00001 // -*- C++ -*-
00002 //
00003 // $Id: Auto_Functor.inl 80826 2008-03-04 14:51:23Z wotte $
00004 
00005 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00006 
00007 template<typename X, typename Functor> ACE_INLINE
00008 ACE_Utils::Auto_Functor_Ref<X,Functor>::
00009 Auto_Functor_Ref(X * p, Functor f)
00010   : p_(p)
00011   , f_(f)
00012 {
00013 }
00014 
00015 template<typename X, typename Functor> ACE_INLINE
00016 ACE_Utils::Auto_Functor<X,Functor>::Auto_Functor(X * p, Functor f)
00017   : p_(p)
00018   , f_(f)
00019 {
00020 }
00021 
00022 template<typename X, typename Functor> ACE_INLINE
00023 ACE_Utils::Auto_Functor<X,Functor>::Auto_Functor(Auto_Functor & rhs)
00024   : p_(rhs.release())
00025   , f_(rhs.f_)
00026 {
00027 }
00028 
00029 template<typename X, typename Functor>
00030 ACE_INLINE ACE_Utils::Auto_Functor<X,Functor>&
00031 ACE_Utils::Auto_Functor<X,Functor>:: operator=(Auto_Functor & rhs)
00032 {
00033   reset(rhs.release());
00034   f_ = rhs.f_;
00035   return *this;
00036 }
00037 
00038 #if !defined(ACE_LACKS_MEMBER_TEMPLATES)
00039 template<typename X, typename Functor> template<typename Y> ACE_INLINE
00040 ACE_Utils::Auto_Functor<X,Functor>::Auto_Functor(Auto_Functor<Y,Functor>& rhs)
00041   : p_(rhs.release())
00042   , f_(rhs.f_)
00043 {
00044 }
00045 
00046 template<typename X, typename Functor> template<typename Y>
00047 ACE_INLINE ACE_Utils::Auto_Functor<X,Functor>&
00048 ACE_Utils::Auto_Functor<X,Functor>::operator=(Auto_Functor<Y,Functor>& rhs)
00049 {
00050   reset(rhs.release());
00051   return *this;
00052 }
00053 #endif /* ACE_LACKS_MEMBER_TEMPLATES */
00054 
00055 template<typename X, typename Functor> ACE_INLINE X &
00056 ACE_Utils::Auto_Functor<X,Functor>::operator*() const
00057 {
00058   return *p_;
00059 }
00060 
00061 template<typename X, typename Functor>
00062 ACE_INLINE X *
00063 ACE_Utils::Auto_Functor<X,Functor>::operator->() const
00064 {
00065   return p_;
00066 }
00067 
00068 template<typename X, typename Functor>
00069 ACE_INLINE X *
00070 ACE_Utils::Auto_Functor<X,Functor>::get()
00071 {
00072   return p_;
00073 }
00074 
00075 template<typename X, typename Functor>
00076 ACE_INLINE X *
00077 ACE_Utils::Auto_Functor<X,Functor>::release()
00078 {
00079   X * tmp = p_;
00080   p_ = 0;
00081   return tmp;
00082 }
00083 
00084 template<typename X, typename Functor>
00085 ACE_INLINE Functor const &
00086 ACE_Utils::Auto_Functor<X,Functor>::functor() const
00087 {
00088   return f_;
00089 }
00090 
00091 template<typename X, typename Functor> ACE_INLINE
00092 ACE_Utils::Auto_Functor<X,Functor>::Auto_Functor(Auto_Functor_Ref<X,Functor> rhs)
00093   : p_(rhs.p_)
00094   , f_(rhs.f_)
00095 {
00096 }
00097 
00098 template<typename X, typename Functor>
00099 ACE_INLINE ACE_Utils::Auto_Functor<X,Functor> &
00100 ACE_Utils::Auto_Functor<X,Functor>::operator=(Auto_Functor_Ref<X,Functor> rhs)
00101 {
00102   if(rhs.p_ != p_)
00103   {
00104     reset(rhs.p_);
00105     f_ = rhs.f_;
00106   }
00107   return *this;
00108 }
00109 
00110 #if !defined(ACE_LACKS_MEMBER_TEMPLATES)
00111 
00112 template<typename X, typename Functor> template<typename Y> ACE_INLINE
00113 ACE_Utils::Auto_Functor<X,Functor>::operator ACE_Utils::Auto_Functor_Ref<Y,Functor>()
00114 {
00115   return ACE_Utils::Auto_Functor_Ref<Y,Functor>(release(), f_);
00116 }
00117 
00118 template<typename X, typename Functor> template<typename Y> ACE_INLINE
00119 ACE_Utils::Auto_Functor<X,Functor>::operator ACE_Utils::Auto_Functor<Y,Functor>()
00120 {
00121   return ACE_Utils::Auto_Functor<Y,Functor>(release(), f_);
00122 }
00123 
00124 #else
00125 
00126 template<typename X, typename Functor>ACE_INLINE
00127 ACE_Utils::Auto_Functor<X,Functor>::operator ACE_Utils::Auto_Functor_Ref<X,Functor>()
00128 {
00129   return ACE_Utils::Auto_Functor_Ref<X,Functor>(release(), f_);
00130 }
00131 
00132 #endif /* ACE_LACKS_MEMBER_TEMPLATES */
00133 
00134 ACE_END_VERSIONED_NAMESPACE_DECL

Generated on Tue Feb 2 17:18:38 2010 for ACE by  doxygen 1.4.7