00001 // -*- C++ -*- 00002 // 00003 // $Id: VarOut_T.inl 87688 2009-11-21 05:00:59Z sowayaa $ 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 const T & 00045 TAO_Var_Base_T<T>::in (void) const 00046 { 00047 return *this->ptr_; 00048 } 00049 00050 template<typename T> 00051 ACE_INLINE 00052 T & 00053 TAO_Var_Base_T<T>::inout (void) 00054 { 00055 return *this->ptr_; 00056 } 00057 00058 template<typename T> 00059 ACE_INLINE 00060 T * 00061 TAO_Var_Base_T<T>::ptr (void) const 00062 { 00063 return this->ptr_; 00064 } 00065 // ************************************************************* 00066 00067 template<typename T> 00068 ACE_INLINE 00069 TAO_Fixed_Var_T<T>::TAO_Fixed_Var_T (void) 00070 {} 00071 00072 template<typename T> 00073 ACE_INLINE 00074 TAO_Fixed_Var_T<T>::TAO_Fixed_Var_T (T * p) 00075 : TAO_Var_Base_T<T> (p) 00076 {} 00077 00078 template<typename T> 00079 ACE_INLINE 00080 TAO_Fixed_Var_T<T>::TAO_Fixed_Var_T (const TAO_Fixed_Var_T<T> & p) 00081 : TAO_Var_Base_T<T> (p) 00082 {} 00083 00084 // Fixed-size types only. 00085 template<typename T> 00086 ACE_INLINE 00087 TAO_Fixed_Var_T<T>::TAO_Fixed_Var_T (const T & p) 00088 { 00089 ACE_NEW (this->ptr_, 00090 T (p)); 00091 } 00092 00093 template<typename T> 00094 ACE_INLINE 00095 TAO_Fixed_Var_T<T> & 00096 TAO_Fixed_Var_T<T>::operator= (T * p) 00097 { 00098 delete this->ptr_; 00099 this->ptr_ = p; 00100 return *this; 00101 } 00102 00103 template<typename T> 00104 ACE_INLINE 00105 TAO_Fixed_Var_T<T>::operator const T & () const 00106 { 00107 return *this->ptr_; 00108 } 00109 00110 template<typename T> 00111 ACE_INLINE 00112 TAO_Fixed_Var_T<T>::operator T & () 00113 { 00114 // Use plain new, using the ACE_NEW macros will mean we dereference a 00115 // nil pointer and crash which is more bad then plain new which could 00116 // lead to a bad_alloc exception 00117 if (this->ptr_ == 0) 00118 this->ptr_ = new T; 00119 00120 return *this->ptr_; 00121 } 00122 00123 template<typename T> 00124 ACE_INLINE 00125 TAO_Fixed_Var_T<T>::operator T & () const 00126 { 00127 return *this->ptr_; 00128 } 00129 00130 // Mapping for fixed size. 00131 template<typename T> 00132 ACE_INLINE 00133 T & 00134 TAO_Fixed_Var_T<T>::out (void) 00135 { 00136 // Use plain new, using the ACE_NEW macros will mean we dereference a 00137 // nil pointer and crash which is more bad then plain new which could 00138 // lead to a bad_alloc exception 00139 if (this->ptr_ == 0) 00140 this->ptr_ = new T; 00141 00142 return *this->ptr_; 00143 } 00144 00145 template<typename T> 00146 ACE_INLINE 00147 T 00148 TAO_Fixed_Var_T<T>::_retn (void) 00149 { 00150 return *this->ptr_; 00151 } 00152 00153 // ************************************************************* 00154 00155 template<typename T> 00156 ACE_INLINE 00157 TAO_Var_Var_T<T>::TAO_Var_Var_T (void) 00158 {} 00159 00160 template<typename T> 00161 ACE_INLINE 00162 TAO_Var_Var_T<T>::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>::TAO_Var_Var_T (const TAO_Var_Var_T<T> & p) 00169 : TAO_Var_Base_T<T> (p) 00170 {} 00171 00172 template<typename T> 00173 ACE_INLINE 00174 TAO_Var_Var_T<T> & 00175 TAO_Var_Var_T<T>::operator= (T * p) 00176 { 00177 delete this->ptr_; 00178 this->ptr_ = p; 00179 return *this; 00180 } 00181 00182 // Variable-size types only. 00183 template<typename T> 00184 ACE_INLINE 00185 TAO_Var_Var_T<T>::operator T *& () 00186 { 00187 return this->ptr_; 00188 } 00189 00190 template<typename T> 00191 ACE_INLINE 00192 TAO_Var_Var_T<T>::operator const T & () const 00193 { 00194 return *this->ptr_; 00195 } 00196 00197 template<typename T> 00198 ACE_INLINE 00199 TAO_Var_Var_T<T>::operator T & () 00200 { 00201 return *this->ptr_; 00202 } 00203 00204 template<typename T> 00205 ACE_INLINE 00206 TAO_Var_Var_T<T>::operator T & () const 00207 { 00208 return *this->ptr_; 00209 } 00210 00211 // Mapping for variable size. 00212 template<typename T> 00213 ACE_INLINE 00214 T *& 00215 TAO_Var_Var_T<T>::out (void) 00216 { 00217 delete this->ptr_; 00218 this->ptr_ = 0; 00219 return this->ptr_; 00220 } 00221 00222 template<typename T> 00223 ACE_INLINE 00224 T * 00225 TAO_Var_Var_T<T>::_retn (void) 00226 { 00227 T * tmp = this->ptr_; 00228 this->ptr_ = 0; 00229 return tmp; 00230 } 00231 00232 // ************************************************************* 00233 00234 template<typename T> 00235 ACE_INLINE 00236 TAO_Out_T<T>::TAO_Out_T (T *& p) 00237 : ptr_ (p) 00238 { 00239 this->ptr_ = 0; 00240 } 00241 00242 template<typename T> 00243 ACE_INLINE 00244 TAO_Out_T<T>::TAO_Out_T (T_var & p) 00245 : ptr_ (p.out ()) 00246 { 00247 delete this->ptr_; 00248 this->ptr_ = 0; 00249 } 00250 00251 template<typename T> 00252 ACE_INLINE 00253 TAO_Out_T<T>::TAO_Out_T (const TAO_Out_T<T> & p) 00254 : ptr_ (p.ptr_) 00255 {} 00256 00257 template<typename T> 00258 ACE_INLINE 00259 TAO_Out_T<T> & 00260 TAO_Out_T<T>::operator= (const TAO_Out_T<T> & p) 00261 { 00262 this->ptr_ = p.ptr_; 00263 return *this; 00264 } 00265 00266 template<typename T> 00267 ACE_INLINE 00268 TAO_Out_T<T> & 00269 TAO_Out_T<T>::operator= (T * p) 00270 { 00271 this->ptr_ = p; 00272 return *this; 00273 } 00274 00275 template<typename T> 00276 ACE_INLINE 00277 TAO_Out_T<T>::operator T *& () 00278 { 00279 return this->ptr_; 00280 } 00281 00282 template<typename T> 00283 ACE_INLINE 00284 T *& 00285 TAO_Out_T<T>::ptr (void) 00286 { 00287 return this->ptr_; 00288 } 00289 00290 template<typename T> 00291 ACE_INLINE 00292 T * 00293 TAO_Out_T<T>::operator-> (void) 00294 { 00295 return this->ptr_; 00296 } 00297 00298 TAO_END_VERSIONED_NAMESPACE_DECL