Auto_Functor.inl

Go to the documentation of this file.
00001 // -*- C++ -*-
00002 //
00003 // Auto_Functor.inl,v 1.2 2005/10/28 16:14:51 ossama Exp
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   ACE_THROW_SPEC (())
00018   : p_(p)
00019   , f_(f)
00020 {
00021 }
00022 
00023 template<typename X, typename Functor> ACE_INLINE
00024 ACE_Utils::Auto_Functor<X,Functor>::Auto_Functor(Auto_Functor & rhs)
00025   ACE_THROW_SPEC (())
00026   : p_(rhs.release())
00027   , f_(rhs.f_)
00028 {
00029 }
00030 
00031 template<typename X, typename Functor>
00032 ACE_INLINE ACE_Utils::Auto_Functor<X,Functor>&
00033 ACE_Utils::Auto_Functor<X,Functor>:: operator=(Auto_Functor & rhs)
00034   ACE_THROW_SPEC (())
00035 {
00036   reset(rhs.release());
00037   f_ = rhs.f_;
00038   return *this;
00039 }
00040 
00041 #if !defined(ACE_LACKS_MEMBER_TEMPLATES)
00042 template<typename X, typename Functor> template<typename Y> ACE_INLINE
00043 ACE_Utils::Auto_Functor<X,Functor>::Auto_Functor(Auto_Functor<Y,Functor>& rhs)
00044   ACE_THROW_SPEC (())
00045   : p_(rhs.release())
00046   , f_(rhs.f_)
00047 {
00048 }
00049 
00050 template<typename X, typename Functor> template<typename Y>
00051 ACE_INLINE ACE_Utils::Auto_Functor<X,Functor>&
00052 ACE_Utils::Auto_Functor<X,Functor>::operator=(Auto_Functor<Y,Functor>& rhs)
00053   ACE_THROW_SPEC (())
00054 {
00055   reset(rhs.release());
00056   return *this;
00057 }
00058 #endif /* ACE_LACKS_MEMBER_TEMPLATES */
00059 
00060 template<typename X, typename Functor> ACE_INLINE X &
00061 ACE_Utils::Auto_Functor<X,Functor>::operator*() const
00062   ACE_THROW_SPEC (())
00063 {
00064   return *p_;
00065 }
00066 
00067 template<typename X, typename Functor>
00068 ACE_INLINE X *
00069 ACE_Utils::Auto_Functor<X,Functor>::operator->() const
00070   ACE_THROW_SPEC (())
00071 {
00072   return p_;
00073 }
00074 
00075 template<typename X, typename Functor>
00076 ACE_INLINE X *
00077 ACE_Utils::Auto_Functor<X,Functor>::get()
00078   ACE_THROW_SPEC (())
00079 {
00080   return p_;
00081 }
00082 
00083 template<typename X, typename Functor>
00084 ACE_INLINE X *
00085 ACE_Utils::Auto_Functor<X,Functor>::release()
00086   ACE_THROW_SPEC (())
00087 {
00088   X * tmp = p_;
00089   p_ = 0;
00090   return tmp;
00091 }
00092 
00093 template<typename X, typename Functor>
00094 ACE_INLINE Functor const &
00095 ACE_Utils::Auto_Functor<X,Functor>::functor() const
00096   ACE_THROW_SPEC (())
00097 {
00098   return f_;
00099 }
00100 
00101 template<typename X, typename Functor> ACE_INLINE
00102 ACE_Utils::Auto_Functor<X,Functor>::Auto_Functor(Auto_Functor_Ref<X,Functor> rhs)
00103   ACE_THROW_SPEC (())
00104   : p_(rhs.p_)
00105   , f_(rhs.f_)
00106 {
00107 }
00108 
00109 template<typename X, typename Functor>
00110 ACE_INLINE ACE_Utils::Auto_Functor<X,Functor> &
00111 ACE_Utils::Auto_Functor<X,Functor>::operator=(Auto_Functor_Ref<X,Functor> rhs)
00112   ACE_THROW_SPEC (())
00113 {
00114   if(rhs.p_ != p_)
00115   {
00116     reset(rhs.p_);
00117     f_ = rhs.f_;
00118   }
00119   return *this;
00120 }
00121 
00122 #if !defined(ACE_LACKS_MEMBER_TEMPLATES)
00123 
00124 template<typename X, typename Functor> template<typename Y> ACE_INLINE
00125 ACE_Utils::Auto_Functor<X,Functor>::operator ACE_Utils::Auto_Functor_Ref<Y,Functor>()
00126   ACE_THROW_SPEC (())
00127 {
00128   return ACE_Utils::Auto_Functor_Ref<Y,Functor>(release(), f_);
00129 }
00130 
00131 template<typename X, typename Functor> template<typename Y> ACE_INLINE
00132 ACE_Utils::Auto_Functor<X,Functor>::operator ACE_Utils::Auto_Functor<Y,Functor>()
00133   ACE_THROW_SPEC (())
00134 {
00135   return ACE_Utils::Auto_Functor<Y,Functor>(release(), f_);
00136 }
00137 
00138 #else
00139 
00140 template<typename X, typename Functor>ACE_INLINE
00141 ACE_Utils::Auto_Functor<X,Functor>::operator ACE_Utils::Auto_Functor_Ref<X,Functor>()
00142   ACE_THROW_SPEC (())
00143 {
00144   return ACE_Utils::Auto_Functor_Ref<X,Functor>(release(), f_);
00145 }
00146 
00147 #endif /* ACE_LACKS_MEMBER_TEMPLATES */
00148 
00149 ACE_END_VERSIONED_NAMESPACE_DECL

Generated on Thu Nov 9 09:41:46 2006 for ACE by doxygen 1.3.6