00001 // -*- C++ -*- 00002 00003 //============================================================================= 00004 /** 00005 * @file Value_VarOut_T.h 00006 * 00007 * $Id: Value_VarOut_T.h 72137 2006-04-19 09:17:17Z jwillemsen $ 00008 * 00009 * @author Jeff Parsons 00010 */ 00011 //============================================================================= 00012 00013 #ifndef TAO_VALUE_VAROUT_T_H 00014 #define TAO_VALUE_VAROUT_T_H 00015 00016 #include /**/ "ace/pre.h" 00017 00018 #include "ace/config-all.h" 00019 00020 #if !defined (ACE_LACKS_PRAGMA_ONCE) 00021 # pragma once 00022 #endif /* ACE_LACKS_PRAGMA_ONCE */ 00023 00024 #include "tao/varbase.h" 00025 00026 TAO_BEGIN_VERSIONED_NAMESPACE_DECL 00027 00028 namespace TAO 00029 { 00030 /** 00031 * struct Value_Traits 00032 * 00033 * @brief Specialized for each valuetype in generated code. 00034 */ 00035 template<typename T> struct Value_Traits; 00036 } 00037 00038 /** 00039 * @class TAO_Value_Var_T 00040 * 00041 * @brief Parametrized implementation of _var class for valuetypes. 00042 * 00043 */ 00044 template <typename T> 00045 class TAO_Value_Var_T : private TAO_Base_var 00046 { 00047 public: 00048 TAO_Value_Var_T (void); 00049 TAO_Value_Var_T (T *); 00050 TAO_Value_Var_T (const TAO_Value_Var_T<T> &); 00051 00052 // (TAO extension) 00053 TAO_Value_Var_T (const T *); 00054 00055 ~TAO_Value_Var_T (void); 00056 00057 TAO_Value_Var_T &operator= (T *); 00058 TAO_Value_Var_T &operator= (const TAO_Value_Var_T<T> &); 00059 00060 T * operator-> (void) const; 00061 00062 operator const T * () const; 00063 operator T *& (); 00064 00065 typedef T * _in_type; 00066 typedef T *& _inout_type; 00067 typedef T *& _out_type; 00068 typedef T * _retn_type; 00069 00070 // in, inout, out, _retn 00071 _in_type in (void) const; 00072 _inout_type inout (void); 00073 _out_type out (void); 00074 _retn_type _retn (void); 00075 00076 // (TAO extension) 00077 T * ptr (void) const; 00078 00079 private: 00080 00081 // Prevent widening assignment. 00082 TAO_Value_Var_T (const TAO_Base_var &); 00083 void operator= (const TAO_Base_var &); 00084 00085 private: 00086 T * ptr_; 00087 }; 00088 00089 /** 00090 * @class TAO_Value_Var_T 00091 * 00092 * @brief Parametrized implementation of _out class for valuetypes. 00093 * 00094 */ 00095 template <typename T> 00096 class TAO_Value_Out_T 00097 { 00098 public: 00099 TAO_Value_Out_T (T *&); 00100 TAO_Value_Out_T (TAO_Value_Var_T<T> &); 00101 TAO_Value_Out_T (const TAO_Value_Out_T<T> &); 00102 00103 TAO_Value_Out_T &operator= (const TAO_Value_Out_T<T> &); 00104 TAO_Value_Out_T &operator= (T *); 00105 00106 operator T *& (); 00107 T *& ptr (void); 00108 00109 T * operator-> (void); 00110 00111 private: 00112 T *& ptr_; 00113 /// Assignment from _var not allowed. 00114 TAO_Value_Out_T &operator= (const TAO_Value_Var_T<T> &); 00115 }; 00116 00117 TAO_END_VERSIONED_NAMESPACE_DECL 00118 00119 #if defined (ACE_TEMPLATES_REQUIRE_SOURCE) 00120 #include "tao/Valuetype/Value_VarOut_T.cpp" 00121 #endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ 00122 00123 #if defined (ACE_TEMPLATES_REQUIRE_PRAGMA) 00124 #pragma implementation ("Value_VarOut_T.cpp") 00125 #endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */ 00126 00127 #include /**/ "ace/post.h" 00128 00129 #endif /* TAO_VALUE_VAROUT_T_H */