00001 // $Id: Objref_VarOut_T.cpp 76881 2007-02-02 16:23:57Z johnnyw $ 00002 #ifndef TAO_OBJREF_VAROUT_T_CPP 00003 #define TAO_OBJREF_VAROUT_T_CPP 00004 00005 #include "tao/Objref_VarOut_T.h" 00006 #include "tao/Environment.h" 00007 00008 TAO_BEGIN_VERSIONED_NAMESPACE_DECL 00009 00010 template <typename T> 00011 TAO_Objref_Var_T<T>::TAO_Objref_Var_T (void) 00012 : ptr_ (TAO::Objref_Traits<T>::nil ()) 00013 { 00014 } 00015 00016 template <typename T> 00017 TAO_Objref_Var_T<T>::TAO_Objref_Var_T ( 00018 const TAO_Objref_Var_T<T> & p 00019 ) 00020 : TAO_Base_var (), 00021 ptr_ (TAO::Objref_Traits<T>::duplicate (p.ptr ())) 00022 { 00023 } 00024 00025 template <typename T> 00026 TAO_Objref_Var_T<T>::~TAO_Objref_Var_T (void) 00027 { 00028 TAO::Objref_Traits<T>::release (this->ptr_); 00029 } 00030 00031 template <typename T> 00032 TAO_Objref_Var_T<T> & 00033 TAO_Objref_Var_T<T>::operator= (T * p) 00034 { 00035 TAO::Objref_Traits<T>::release (this->ptr_); 00036 this->ptr_ = p; 00037 return *this; 00038 } 00039 00040 template <typename T> 00041 TAO_Objref_Var_T<T> & 00042 TAO_Objref_Var_T<T>::operator= ( 00043 const TAO_Objref_Var_T<T> & p 00044 ) 00045 { 00046 if (this != &p) 00047 { 00048 TAO::Objref_Traits<T>::release (this->ptr_); 00049 this->ptr_ = TAO::Objref_Traits<T>::duplicate (p.ptr ()); 00050 } 00051 00052 return *this; 00053 } 00054 00055 template <typename T> 00056 T * 00057 TAO_Objref_Var_T<T>::operator-> (void) const 00058 { 00059 return this->ptr_; 00060 } 00061 00062 template <typename T> 00063 TAO_Objref_Var_T<T>::operator T * const & () const 00064 { 00065 return this->ptr_; 00066 } 00067 00068 template <typename T> 00069 TAO_Objref_Var_T<T>::operator T *& () 00070 { 00071 return this->ptr_; 00072 } 00073 00074 template <typename T> 00075 T * 00076 TAO_Objref_Var_T<T>::in (void) const 00077 { 00078 return this->ptr_; 00079 } 00080 00081 template <typename T> 00082 T *& 00083 TAO_Objref_Var_T<T>::inout (void) 00084 { 00085 return this->ptr_; 00086 } 00087 00088 template <typename T> 00089 T *& 00090 TAO_Objref_Var_T<T>::out (void) 00091 { 00092 TAO::Objref_Traits<T>::release (this->ptr_); 00093 this->ptr_ = TAO::Objref_Traits<T>::nil (); 00094 return this->ptr_; 00095 } 00096 00097 template <typename T> 00098 T * 00099 TAO_Objref_Var_T<T>::_retn (void) 00100 { 00101 T * val = this->ptr_; 00102 this->ptr_ = TAO::Objref_Traits<T>::nil (); 00103 return val; 00104 } 00105 00106 template <typename T> 00107 T * 00108 TAO_Objref_Var_T<T>::ptr (void) const 00109 { 00110 return this->ptr_; 00111 } 00112 00113 template <typename T> 00114 void 00115 TAO_Objref_Var_T<T>::free (void) 00116 { 00117 TAO::Objref_Traits<T>::release (this->ptr_); 00118 } 00119 00120 template <typename T> 00121 void 00122 TAO_Objref_Var_T<T>::reset (T * p) 00123 { 00124 TAO::Objref_Traits<T>::release (this->ptr_); 00125 this->ptr_ = p; 00126 } 00127 00128 // ****************************************************** 00129 00130 template <typename T> 00131 TAO_Objref_Out_T<T>::TAO_Objref_Out_T (T *& p) 00132 : ptr_ (p) 00133 { 00134 this->ptr_ = TAO::Objref_Traits<T>::nil (); 00135 } 00136 00137 template <typename T> 00138 TAO_Objref_Out_T<T>::TAO_Objref_Out_T ( 00139 TAO_Objref_Var_T<T> & p 00140 ) 00141 : ptr_ (p.out ()) 00142 { 00143 TAO::Objref_Traits<T>::release (this->ptr_); 00144 this->ptr_ = TAO::Objref_Traits<T>::nil (); 00145 } 00146 00147 template <typename T> 00148 TAO_Objref_Out_T<T>::TAO_Objref_Out_T ( 00149 const TAO_Objref_Out_T<T> & p 00150 ) 00151 : ptr_ (p.ptr_) 00152 { 00153 } 00154 00155 template <typename T> 00156 TAO_Objref_Out_T<T> & 00157 TAO_Objref_Out_T<T>::operator= ( 00158 const TAO_Objref_Out_T<T> & p 00159 ) 00160 { 00161 this->ptr_ = p.ptr_; 00162 return *this; 00163 } 00164 00165 template <typename T> 00166 TAO_Objref_Out_T<T> & 00167 TAO_Objref_Out_T<T>::operator= (T * p) 00168 { 00169 this->ptr_ = p; 00170 return *this; 00171 } 00172 00173 template <typename T> 00174 T *& 00175 TAO_Objref_Out_T<T>::ptr (void) 00176 { 00177 return this->ptr_; 00178 } 00179 00180 template <typename T> 00181 TAO_Objref_Out_T<T>::operator T *& () 00182 { 00183 return this->ptr_; 00184 } 00185 00186 template <typename T> 00187 T * 00188 TAO_Objref_Out_T<T>::operator-> (void) 00189 { 00190 return this->ptr_; 00191 } 00192 00193 TAO_END_VERSIONED_NAMESPACE_DECL 00194 00195 #endif /* TAO_OBJREF_VAROUT_T_CPP */