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 : 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
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
00133
00134 ACE_END_VERSIONED_NAMESPACE_DECL