00001 // -*- C++ -*- 00002 // 00003 // Auto_Ptr.inl,v 4.3 2005/10/28 16:14:51 ossama Exp 00004 00005 #include "ace/Global_Macros.h" 00006 00007 ACE_BEGIN_VERSIONED_NAMESPACE_DECL 00008 00009 template<class X> ACE_INLINE void 00010 ACE_Auto_Basic_Ptr<X>::dump (void) const 00011 { 00012 #if defined (ACE_HAS_DUMP) 00013 ACE_TRACE ("ACE_Auto_Basic_Ptr<X>::dump"); 00014 #endif /* ACE_HAS_DUMP */ 00015 } 00016 00017 template<class X> ACE_INLINE void 00018 ACE_Auto_Basic_Array_Ptr<X>::dump (void) const 00019 { 00020 #if defined (ACE_HAS_DUMP) 00021 ACE_TRACE ("ACE_Auto_Basic_Array_Ptr<X>::dump"); 00022 #endif /* ACE_HAS_DUMP */ 00023 } 00024 00025 template<class X> ACE_INLINE 00026 ACE_Auto_Basic_Ptr<X>::ACE_Auto_Basic_Ptr (ACE_Auto_Basic_Ptr<X> &rhs) 00027 : p_ (rhs.release ()) 00028 { 00029 ACE_TRACE ("ACE_Auto_Basic_Ptr<X>::ACE_Auto_Basic_Ptr"); 00030 } 00031 00032 template<class X> ACE_INLINE X * 00033 ACE_Auto_Basic_Ptr<X>::get (void) const 00034 { 00035 ACE_TRACE ("ACE_Auto_Basic_Ptr<X>::get"); 00036 return this->p_; 00037 } 00038 00039 template<class X> ACE_INLINE X * 00040 ACE_Auto_Basic_Ptr<X>::release (void) 00041 { 00042 ACE_TRACE ("ACE_Auto_Basic_Ptr<X>::release"); 00043 X *old = this->p_; 00044 this->p_ = 0; 00045 return old; 00046 } 00047 00048 template<class X> ACE_INLINE void 00049 ACE_Auto_Basic_Ptr<X>::reset (X *p) 00050 { 00051 ACE_TRACE ("ACE_Auto_Basic_Ptr<X>::reset"); 00052 if (this->get () != p) 00053 delete this->get (); 00054 this->p_ = p; 00055 } 00056 00057 template<class X> ACE_INLINE ACE_Auto_Basic_Ptr<X> & 00058 ACE_Auto_Basic_Ptr<X>::operator= (ACE_Auto_Basic_Ptr<X> &rhs) 00059 { 00060 ACE_TRACE ("ACE_Auto_Basic_Ptr<X>::operator="); 00061 if (this != &rhs) 00062 { 00063 this->reset (rhs.release ()); 00064 } 00065 return *this; 00066 } 00067 00068 template<class X> ACE_INLINE 00069 ACE_Auto_Basic_Ptr<X>::~ACE_Auto_Basic_Ptr (void) 00070 { 00071 ACE_TRACE ("ACE_Auto_Basic_Ptr<X>::~ACE_Auto_Basic_Ptr"); 00072 delete this->get (); 00073 } 00074 00075 template<class X> ACE_INLINE X & 00076 ACE_Auto_Basic_Ptr<X>::operator *() const 00077 { 00078 ACE_TRACE ("ACE_Auto_Basic_Ptr<X>::operator *()"); 00079 return *this->get (); 00080 } 00081 00082 #if defined (ACE_LACKS_AUTO_PTR) || \ 00083 !defined (ACE_HAS_STANDARD_CPP_LIBRARY) || \ 00084 (ACE_HAS_STANDARD_CPP_LIBRARY == 0) 00085 00086 template<class X> ACE_INLINE X * 00087 auto_ptr<X>::operator-> () const 00088 { 00089 ACE_TRACE ("auto_ptr<X>::operator->"); 00090 return this->get (); 00091 } 00092 00093 #endif /* ACE_HAS_STANDARD_CPP_LIBRARY */ 00094 00095 template<class X> ACE_INLINE X * 00096 ACE_Auto_Ptr<X>::operator-> () const 00097 { 00098 ACE_TRACE ("ACE_Auto_Ptr<X>::operator->"); 00099 return this->get (); 00100 } 00101 00102 template<class X> ACE_INLINE X * 00103 ACE_Auto_Basic_Array_Ptr<X>::get (void) const 00104 { 00105 ACE_TRACE ("ACE_Auto_Basic_Array_Ptr<X>::get"); 00106 return this->p_; 00107 } 00108 00109 template<class X> ACE_INLINE X * 00110 ACE_Auto_Basic_Array_Ptr<X>::release (void) 00111 { 00112 ACE_TRACE ("ACE_Auto_Basic_Array_Ptr<X>::release"); 00113 X *old = this->p_; 00114 this->p_ = 0; 00115 return old; 00116 } 00117 00118 template<class X> ACE_INLINE void 00119 ACE_Auto_Basic_Array_Ptr<X>::reset (X *p) 00120 { 00121 ACE_TRACE ("ACE_Auto_Basic_Array_Ptr<X>::reset"); 00122 if (this->get () != p) 00123 delete [] this->get (); 00124 this->p_ = p; 00125 } 00126 00127 template<class X> ACE_INLINE 00128 ACE_Auto_Basic_Array_Ptr<X>::ACE_Auto_Basic_Array_Ptr (ACE_Auto_Basic_Array_Ptr<X> &rhs) 00129 : p_ (rhs.release ()) 00130 { 00131 ACE_TRACE ("ACE_Auto_Basic_Array_Ptr<X>::ACE_Auto_Basic_Array_Ptr"); 00132 } 00133 00134 template<class X> ACE_INLINE ACE_Auto_Basic_Array_Ptr<X> & 00135 ACE_Auto_Basic_Array_Ptr<X>::operator= (ACE_Auto_Basic_Array_Ptr<X> &rhs) 00136 { 00137 ACE_TRACE ("ACE_Auto_Basic_Array_Ptr<X>::operator="); 00138 if (this != &rhs) 00139 { 00140 this->reset (rhs.release ()); 00141 } 00142 return *this; 00143 } 00144 00145 template<class X> ACE_INLINE 00146 ACE_Auto_Basic_Array_Ptr<X>::~ACE_Auto_Basic_Array_Ptr (void) 00147 { 00148 ACE_TRACE ("ACE_Auto_Basic_Array_Ptr<X>::~ACE_Auto_Basic_Array_Ptr"); 00149 delete [] this->get (); 00150 } 00151 00152 template<class X> ACE_INLINE X & 00153 ACE_Auto_Basic_Array_Ptr<X>::operator *() const 00154 { 00155 return *this->get (); 00156 } 00157 00158 template<class X> ACE_INLINE X & 00159 ACE_Auto_Basic_Array_Ptr<X>::operator[](int i) const 00160 { 00161 X *array = this->get (); 00162 return array[i]; 00163 } 00164 00165 template<class X> ACE_INLINE X * 00166 ACE_Auto_Array_Ptr<X>::operator->() const 00167 { 00168 return this->get (); 00169 } 00170 00171 ACE_END_VERSIONED_NAMESPACE_DECL