00001 // -*- C++ -*- 00002 // 00003 // $Id: VarOut_T.inl 73614 2006-07-18 13:18:18Z jwillemsen $ 00004 00005 TAO_BEGIN_VERSIONED_NAMESPACE_DECL 00006 00007 template<typename T> 00008 ACE_INLINE 00009 TAO_Var_Base_T<T>::TAO_Var_Base_T (void) 00010 : ptr_ (0) 00011 {} 00012 00013 template<typename T> 00014 ACE_INLINE 00015 TAO_Var_Base_T<T>::TAO_Var_Base_T (T * p) 00016 : ptr_ (p) 00017 {} 00018 00019 template<typename T> 00020 ACE_INLINE 00021 TAO_Var_Base_T<T>::~TAO_Var_Base_T (void) 00022 { 00023 delete this->ptr_; 00024 } 00025 00026 template<typename T> 00027 ACE_INLINE 00028 const T * 00029 TAO_Var_Base_T<T>::operator-> (void) const 00030 { 00031 return this->ptr_; 00032 } 00033 00034 template<typename T> 00035 ACE_INLINE 00036 T * 00037 TAO_Var_Base_T<T>::operator-> (void) 00038 { 00039 return this->ptr_; 00040 } 00041 00042 template<typename T> 00043 ACE_INLINE 00044 TAO_Var_Base_T<T>::operator const T & () const 00045 { 00046 return *this->ptr_; 00047 } 00048 00049 template<typename T> 00050 ACE_INLINE 00051 TAO_Var_Base_T<T>::operator T & () 00052 { 00053 return *this->ptr_; 00054 } 00055 00056 template<typename T> 00057 ACE_INLINE 00058 TAO_Var_Base_T<T>::operator T & () const 00059 { 00060 return *this->ptr_; 00061 } 00062 00063 template<typename T> 00064 ACE_INLINE 00065 const T & 00066 TAO_Var_Base_T<T>::in (void) const 00067 { 00068 return *this->ptr_; 00069 } 00070 00071 template<typename T> 00072 ACE_INLINE 00073 T & 00074 TAO_Var_Base_T<T>::inout (void) 00075 { 00076 return *this->ptr_; 00077 } 00078 00079 template<typename T> 00080 ACE_INLINE 00081 T * 00082 TAO_Var_Base_T<T>::ptr (void) const 00083 { 00084 return this->ptr_; 00085 } 00086 // ************************************************************* 00087 00088 template<typename T> 00089 ACE_INLINE 00090 TAO_Fixed_Var_T<T>::TAO_Fixed_Var_T (void) 00091 {} 00092 00093 template<typename T> 00094 ACE_INLINE 00095 TAO_Fixed_Var_T<T>::TAO_Fixed_Var_T (T * p) 00096 : TAO_Var_Base_T<T> (p) 00097 {} 00098 00099 template<typename T> 00100 ACE_INLINE 00101 TAO_Fixed_Var_T<T>::TAO_Fixed_Var_T (const TAO_Fixed_Var_T<T> & p) 00102 : TAO_Var_Base_T<T> (p) 00103 {} 00104 00105 // Fixed-size types only. 00106 template<typename T> 00107 ACE_INLINE 00108 TAO_Fixed_Var_T<T>::TAO_Fixed_Var_T (const T & p) 00109 { 00110 ACE_NEW (this->ptr_, 00111 T (p)); 00112 } 00113 00114 template<typename T> 00115 ACE_INLINE 00116 TAO_Fixed_Var_T<T> & 00117 TAO_Fixed_Var_T<T>::operator= (T * p) 00118 { 00119 delete this->ptr_; 00120 this->ptr_ = p; 00121 return *this; 00122 } 00123 00124 // Mapping for fixed size. 00125 template<typename T> 00126 ACE_INLINE 00127 T & 00128 TAO_Fixed_Var_T<T>::out (void) 00129 { 00130 // Use plain new, using the ACE_NEW macros will mean we dereference a 00131 // nil pointer and crash which is more bad then plain new which could 00132 // lead to a bad_alloc exception 00133 if (this->ptr_ == 0) 00134 this->ptr_ = new T; 00135 00136 return *this->ptr_; 00137 } 00138 00139 template<typename T> 00140 ACE_INLINE 00141 T 00142 TAO_Fixed_Var_T<T>::_retn (void) 00143 { 00144 return *this->ptr_; 00145 } 00146 00147 // ************************************************************* 00148 00149 template<typename T> 00150 ACE_INLINE 00151 TAO_Var_Var_T<T>::TAO_Var_Var_T (void) 00152 {} 00153 00154 template<typename T> 00155 ACE_INLINE 00156 TAO_Var_Var_T<T>::TAO_Var_Var_T (T * p) 00157 : TAO_Var_Base_T<T> (p) 00158 {} 00159 00160 template<typename T> 00161 ACE_INLINE 00162 TAO_Var_Var_T<T>::TAO_Var_Var_T (const TAO_Var_Var_T<T> & p) 00163 : TAO_Var_Base_T<T> (p) 00164 {} 00165 00166 template<typename T> 00167 ACE_INLINE 00168 TAO_Var_Var_T<T> & 00169 TAO_Var_Var_T<T>::operator= (T * p) 00170 { 00171 delete this->ptr_; 00172 this->ptr_ = p; 00173 return *this; 00174 } 00175 00176 // Variable-size types only. 00177 template<typename T> 00178 ACE_INLINE 00179 TAO_Var_Var_T<T>::operator T *& () 00180 { 00181 return this->ptr_; 00182 } 00183 00184 // Mapping for variable size. 00185 template<typename T> 00186 ACE_INLINE 00187 T *& 00188 TAO_Var_Var_T<T>::out (void) 00189 { 00190 delete this->ptr_; 00191 this->ptr_ = 0; 00192 return this->ptr_; 00193 } 00194 00195 template<typename T> 00196 ACE_INLINE 00197 T * 00198 TAO_Var_Var_T<T>::_retn (void) 00199 { 00200 T * tmp = this->ptr_; 00201 this->ptr_ = 0; 00202 return tmp; 00203 } 00204 00205 // ************************************************************* 00206 00207 template<typename T> 00208 ACE_INLINE 00209 TAO_Out_T<T>::TAO_Out_T (T *& p) 00210 : ptr_ (p) 00211 { 00212 this->ptr_ = 0; 00213 } 00214 00215 template<typename T> 00216 ACE_INLINE 00217 TAO_Out_T<T>::TAO_Out_T (T_var & p) 00218 : ptr_ (p.out ()) 00219 { 00220 delete this->ptr_; 00221 this->ptr_ = 0; 00222 } 00223 00224 template<typename T> 00225 ACE_INLINE 00226 TAO_Out_T<T>::TAO_Out_T (const TAO_Out_T<T> & p) 00227 : ptr_ (p.ptr_) 00228 {} 00229 00230 template<typename T> 00231 ACE_INLINE 00232 TAO_Out_T<T> & 00233 TAO_Out_T<T>::operator= (const TAO_Out_T<T> & p) 00234 { 00235 this->ptr_ = p.ptr_; 00236 return *this; 00237 } 00238 00239 template<typename T> 00240 ACE_INLINE 00241 TAO_Out_T<T> & 00242 TAO_Out_T<T>::operator= (T * p) 00243 { 00244 this->ptr_ = p; 00245 return *this; 00246 } 00247 00248 template<typename T> 00249 ACE_INLINE 00250 TAO_Out_T<T>::operator T *& () 00251 { 00252 return this->ptr_; 00253 } 00254 00255 template<typename T> 00256 ACE_INLINE 00257 T *& 00258 TAO_Out_T<T>::ptr (void) 00259 { 00260 return this->ptr_; 00261 } 00262 00263 template<typename T> 00264 ACE_INLINE 00265 T * 00266 TAO_Out_T<T>::operator-> (void) 00267 { 00268 return this->ptr_; 00269 } 00270 00271 TAO_END_VERSIONED_NAMESPACE_DECL