00001
00002
00003
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
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
00148
00149 ACE_END_VERSIONED_NAMESPACE_DECL