diff options
author | parsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2003-06-24 18:54:31 +0000 |
---|---|---|
committer | parsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2003-06-24 18:54:31 +0000 |
commit | a4b9ad0510c6a018162a01221eab95bc2ca2a232 (patch) | |
tree | abf6e98f8d3caabe70819241be47bf5cbb726f63 | |
parent | ba0cfe80e4780db2b67e390d33648cff678c1ece (diff) | |
download | ATCD-a4b9ad0510c6a018162a01221eab95bc2ca2a232.tar.gz |
ChangeLogTag: Tue Jun 24 13:48:20 2003 Jeff Parsons <j.parsons@vanderbilt.edu>
-rw-r--r-- | TAO/ChangeLog_ref | 29 | ||||
-rw-r--r-- | TAO/tao/Arg_Traits_T.h | 39 | ||||
-rw-r--r-- | TAO/tao/Basic_Arguments.cpp | 20 | ||||
-rw-r--r-- | TAO/tao/Basic_Arguments.h | 66 | ||||
-rw-r--r-- | TAO/tao/Objref_VarOut_T.cpp | 62 | ||||
-rw-r--r-- | TAO/tao/Objref_VarOut_T.h | 22 | ||||
-rw-r--r-- | TAO/tao/Special_Basic_Arguments.cpp | 10 | ||||
-rw-r--r-- | TAO/tao/Special_Basic_Arguments.h | 61 | ||||
-rw-r--r-- | TAO/tao/UB_String_Arguments.cpp | 6 | ||||
-rw-r--r-- | TAO/tao/UB_String_Arguments.h | 31 | ||||
-rw-r--r-- | TAO/tests/Bench/wire/testC.cpp | 8 | ||||
-rw-r--r-- | TAO/tests/Bench/wire/testS.cpp | 8 |
12 files changed, 304 insertions, 58 deletions
diff --git a/TAO/ChangeLog_ref b/TAO/ChangeLog_ref index 433ca176172..440bfbbfbdd 100644 --- a/TAO/ChangeLog_ref +++ b/TAO/ChangeLog_ref @@ -1,3 +1,32 @@ +Tue Jun 24 13:48:20 2003 Jeff Parsons <j.parsons@vanderbilt.edu> + + * tao/Arg_Traits_T.h: + + Added this file to the repository again, decided to go back to + the template specialization approach to specific arg traits + instead of the typedef approach. + + * tao/Basic_Arguments.cpp: + * tao/Basic_Arguments.h: + * tao/Special_Basic_Arguments.cpp: + * tao/Special_Basic_Arguments.h: + * tao/UB_String_Arguments.cpp: + * tao/UB_String_Arguments.h: + + Change to support the above change in approach. + + * tao/Objref_VarOut_T.cpp: + * tao/Objref_VarOut_T.h: + + Made a start on templatizing helper structs of interface + traits that have been generated by the IDL compler up to now. + + * tests/Bench/local/testC.cpp: + * tests/Bench/local/testS.cpp: + + Changed test code to reflect the change in approach to + specific arg traits mentioned above. + Mon Jun 23 16:50:31 2003 Jeff Parsons <j.parsons@vanderbilt.edu> * tao/Cleanup_Func_Registry.h: diff --git a/TAO/tao/Arg_Traits_T.h b/TAO/tao/Arg_Traits_T.h new file mode 100644 index 00000000000..5612b22aadc --- /dev/null +++ b/TAO/tao/Arg_Traits_T.h @@ -0,0 +1,39 @@ +// This may look like C, but it's really -*- C++ -*- + +//============================================================================= +/** + * @file Arg_Traits_T.h + * + * $Id$ + * + * @authors Jeff Parsons and Carlos O'Ryan + */ +//============================================================================= + + +#ifndef TAO_ARG_TRAITS_T_H +#define TAO_ARG_TRAITS_T_H + +#include "ace/pre.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +namespace TAO +{ + /** + * + * @brief Base class for all arg traits specializations + * + */ + template<typename T> + class Arg_Traits + { + }; + +}; + +#include "ace/post.h" + +#endif /* TAO_ARG_TRAITS_T_H */ diff --git a/TAO/tao/Basic_Arguments.cpp b/TAO/tao/Basic_Arguments.cpp index 67e52b81fe6..8f487e39922 100644 --- a/TAO/tao/Basic_Arguments.cpp +++ b/TAO/tao/Basic_Arguments.cpp @@ -8,6 +8,16 @@ ACE_RCSID (tao, #if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION) +template class TAO::Arg_Traits_T<CORBA::Short>; +template class TAO::Arg_Traits_T<CORBA::Long>; +template class TAO::Arg_Traits_T<CORBA::UShort>; +template class TAO::Arg_Traits_T<CORBA::ULong>; +template class TAO::Arg_Traits_T<CORBA::Float>; +template class TAO::Arg_Traits_T<CORBA::Double>; +template class TAO::Arg_Traits_T<CORBA::LongLong>; +template class TAO::Arg_Traits_T<CORBA::ULongLong>; +template class TAO::Arg_Traits_T<CORBA::LongDouble>; + template class TAO::Basic_Arg_Traits_T<CORBA::Short>; template class TAO::Basic_Arg_Traits_T<CORBA::Long>; template class TAO::Basic_Arg_Traits_T<CORBA::UShort>; @@ -20,6 +30,16 @@ template class TAO::Basic_Arg_Traits_T<CORBA::LongDouble>; #elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA) +# pragma instantiate TAO::Arg_Traits_T<CORBA::Short> +# pragma instantiate TAO::Arg_Traits_T<CORBA::Long> +# pragma instantiate TAO::Arg_Traits_T<CORBA::UShort> +# pragma instantiate TAO::Arg_Traits_T<CORBA::ULong> +# pragma instantiate TAO::Arg_Traits_T<CORBA::Float> +# pragma instantiate TAO::Arg_Traits_T<CORBA::Double> +# pragma instantiate TAO::Arg_Traits_T<CORBA::LongLong> +# pragma instantiate TAO::Arg_Traits_T<CORBA::ULongLong> +# pragma instantiate TAO::Arg_Traits_T<CORBA::LongDouble> + # pragma instantiate TAO::Basic_Arg_Traits_T<CORBA::Short> # pragma instantiate TAO::Basic_Arg_Traits_T<CORBA::Long> # pragma instantiate TAO::Basic_Arg_Traits_T<CORBA::UShort> diff --git a/TAO/tao/Basic_Arguments.h b/TAO/tao/Basic_Arguments.h index 1137b38fe91..9a71ab9f0d2 100644 --- a/TAO/tao/Basic_Arguments.h +++ b/TAO/tao/Basic_Arguments.h @@ -15,21 +15,23 @@ #define TAO_BASIC_ARGUMENTS_H #include "ace/pre.h" -#include "Basic_Argument_T.h" +#include "tao/Basic_Argument_T.h" #if !defined (ACE_LACKS_PRAGMA_ONCE) # pragma once #endif /* ACE_LACKS_PRAGMA_ONCE */ +#include "tao/Arg_Traits_T.h" + namespace TAO { /** * - * @brief Specializations for void return type. + * @brief Specialization for void return type. * */ - - struct Void_Arg_Traits + template<> + class TAO_Export Arg_Traits<void> { typedef void ret_type; @@ -41,27 +43,63 @@ namespace TAO /** * - * @brief Typedefs for basic IDL arg types, except (w)char/boolean/octet. + * @brief Specializations for basic arg types, except (w)char/boolean/octet. * */ - typedef Basic_Arg_Traits_T<CORBA::Short> Short_Arg_Traits; + template<> + class TAO_Export Arg_Traits<CORBA::Short> + : public Basic_Arg_Traits_T<CORBA::Short> + { + }; - typedef Basic_Arg_Traits_T<CORBA::Long> Long_Arg_Traits; + template<> + class TAO_Export Arg_Traits<CORBA::Long> + : public Basic_Arg_Traits_T<CORBA::Long> + { + }; - typedef Basic_Arg_Traits_T<CORBA::UShort> UShort_Arg_Traits; + template<> + class TAO_Export Arg_Traits<CORBA::UShort> + : public Basic_Arg_Traits_T<CORBA::UShort> + { + }; - typedef Basic_Arg_Traits_T<CORBA::ULong> ULong_Arg_Traits; + template<> + class TAO_Export Arg_Traits<CORBA::ULong> + : public Basic_Arg_Traits_T<CORBA::Short> + { + }; - typedef Basic_Arg_Traits_T<CORBA::Float> Float_Arg_Traits; + template<> + class TAO_Export Arg_Traits<CORBA::Float> + : public Basic_Arg_Traits_T<CORBA::Float> + { + }; - typedef Basic_Arg_Traits_T<CORBA::Double> Double_Arg_Traits; + template<> + class TAO_Export Arg_Traits<CORBA::Double> + : public Basic_Arg_Traits_T<CORBA::Double> + { + }; - typedef Basic_Arg_Traits_T<CORBA::LongLong> LongLong_Arg_Traits; + template<> + class TAO_Export Arg_Traits<CORBA::LongLong> + : public Basic_Arg_Traits_T<CORBA::LongLong> + { + }; - typedef Basic_Arg_Traits_T<CORBA::ULongLong> ULongLong_Arg_Traits; + template<> + class TAO_Export Arg_Traits<CORBA::ULongLong> + : public Basic_Arg_Traits_T<CORBA::ULongLong> + { + }; - typedef Basic_Arg_Traits_T<CORBA::LongDouble> LongDouble_Arg_Traits; + template<> + class TAO_Export Arg_Traits<CORBA::LongDouble> + : public Basic_Arg_Traits_T<CORBA::LongDouble> + { + }; }; #include "ace/post.h" diff --git a/TAO/tao/Objref_VarOut_T.cpp b/TAO/tao/Objref_VarOut_T.cpp index 8f0b2572a67..34d4129a855 100644 --- a/TAO/tao/Objref_VarOut_T.cpp +++ b/TAO/tao/Objref_VarOut_T.cpp @@ -15,6 +15,68 @@ ACE_RCSID (tao, Objref_VarOut_T, "$Id$") +template<typename T> +T * +TAO_Life<T>::tao_duplicate ( + T * p + ) +{ + return T::_duplicate (p); +} + +template<typename T> +void +TAO_Life<T>::tao_release ( + T * p + ) +{ + CORBA::release (p); +} + +template<typename T> +T * +TAO_Life<T>::tao_nil ( + void + ) +{ + return T::_nil (); +} + +template<typename T> +CORBA::Boolean +TAO_Life<T>::tao_marshal ( + T * p, + TAO_OutputCDR & cdr + ) +{ + return p->marshal (cdr); +} + +// ================================================================ + +template<typename T> +T * +TAO_Cast<T>::tao_narrow ( + CORBA::Object *p + ACE_ENV_ARG_DECL + ) +{ + return T::_narrow (p ACE_ENV_ARG_PARAMETER); +} + +template<typename T> +CORBA::Object * +TAO_Cast<T>::tao_upcast ( + void *src + ) +{ + T ** tmp = + ACE_static_cast (T **, src); + return *tmp; +} + +// ================================================================= + template <typename T, typename T_life> TAO_Objref_Var_T<T, T_life>::TAO_Objref_Var_T (void) : ptr_ (T_life::tao_nil ()) diff --git a/TAO/tao/Objref_VarOut_T.h b/TAO/tao/Objref_VarOut_T.h index c75bed92b90..f12a5884c6c 100644 --- a/TAO/tao/Objref_VarOut_T.h +++ b/TAO/tao/Objref_VarOut_T.h @@ -24,6 +24,28 @@ #include "ace/CORBA_macros.h" +template<typename T> +struct TAO_Life +{ + static T * tao_duplicate (T *); + static void tao_release (T *); + static T * tao_nil (void); + static CORBA::Boolean tao_marshal ( + T *, + TAO_OutputCDR & + ); +}; + +template<typename T> +struct TAO_Cast +{ + static T * tao_narrow ( + CORBA::Object_ptr + ACE_ENV_ARG_DECL + ); + static CORBA::Object_ptr tao_upcast (void *); +}; + /** * @class TAO_Objref_Var_T * diff --git a/TAO/tao/Special_Basic_Arguments.cpp b/TAO/tao/Special_Basic_Arguments.cpp index 2bc86262e4f..63bba52ec54 100644 --- a/TAO/tao/Special_Basic_Arguments.cpp +++ b/TAO/tao/Special_Basic_Arguments.cpp @@ -8,6 +8,11 @@ ACE_RCSID (tao, #if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION) +template class TAO::Arg_Traits<ACE_InputCDR::to_char>; +template class TAO::Arg_Traits<ACE_InputCDR::to_wchar>; +template class TAO::Arg_Traits<ACE_InputCDR::to_octet>; +template class TAO::Arg_Traits<ACE_InputCDR::to_boolean>; + template class TAO::Special_Basic_Arg_Traits_T<CORBA::Char, ACE_InputCDR::to_char, ACE_OutputCDR::from_char>; @@ -26,6 +31,11 @@ template class TAO::Special_Basic_Arg_Traits_T<CORBA::Boolean, #elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA) +# pragma instantiate TAO::Arg_Traits<ACE_InputCDR::to_char> +# pragma instantiate TAO::Arg_Traits<ACE_InputCDR::to_wchar> +# pragma instantiate TAO::Arg_Traits<ACE_InputCDR::to_octet> +# pragma instantiate TAO::Arg_Traits<ACE_InputCDR::to_boolean> + # pragma instantiate TAO::Special_Basic_Arg_Traits_T< \ CORBA::Char, \ ACE_InputCDR::to_char, \ diff --git a/TAO/tao/Special_Basic_Arguments.h b/TAO/tao/Special_Basic_Arguments.h index 910d0da8c3e..b3e4211f4ec 100644 --- a/TAO/tao/Special_Basic_Arguments.h +++ b/TAO/tao/Special_Basic_Arguments.h @@ -21,40 +21,51 @@ # pragma once #endif /* ACE_LACKS_PRAGMA_ONCE */ -#include "Special_Basic_Argument_T.h" +#include "tao/Special_Basic_Argument_T.h" +#include "Arg_Traits_T.h" namespace TAO { /** * - * @brief Typedefs for (w)char, octet and boolean. + * @brief Specializations for (w)char, octet and boolean. * */ - typedef - Special_Basic_Arg_Traits_T<CORBA::Char, - ACE_InputCDR::to_char, - ACE_OutputCDR::from_char> - Char_Arg_Traits; - - typedef - Special_Basic_Arg_Traits_T<CORBA::WChar, - ACE_InputCDR::to_wchar, - ACE_OutputCDR::from_wchar> - WChar_Arg_Traits; - - typedef - Special_Basic_Arg_Traits_T<CORBA::Octet, - ACE_InputCDR::to_octet, - ACE_OutputCDR::from_octet> - Octet_Arg_Traits; - - typedef - Special_Basic_Arg_Traits_T<CORBA::Boolean, - ACE_InputCDR::to_boolean, - ACE_OutputCDR::from_boolean> - Boolean_Arg_Traits; + template<> + class TAO_Export Arg_Traits<ACE_InputCDR::to_char> + : public Special_Basic_Arg_Traits_T<CORBA::Char, + ACE_InputCDR::to_char, + ACE_OutputCDR::from_char> + { + }; + + template<> + class TAO_Export Arg_Traits<ACE_InputCDR::to_wchar> + : public Special_Basic_Arg_Traits_T<CORBA::WChar, + ACE_InputCDR::to_wchar, + ACE_OutputCDR::from_wchar> + { + }; + + template<> + class TAO_Export Arg_Traits<ACE_InputCDR::to_octet> + : public Special_Basic_Arg_Traits_T<CORBA::Octet, + ACE_InputCDR::to_octet, + ACE_OutputCDR::from_octet> + { + }; + + template<> + class TAO_Export Arg_Traits<ACE_InputCDR::to_boolean> + : public Special_Basic_Arg_Traits_T<CORBA::Boolean, + ACE_InputCDR::to_boolean, + ACE_OutputCDR::from_boolean> + { + }; }; +#include "ace/post.h" + #endif /* TAO_SPECIAL_BASIC_ARGUMENTS_H */ diff --git a/TAO/tao/UB_String_Arguments.cpp b/TAO/tao/UB_String_Arguments.cpp index bf8da550bfd..0fed9644852 100644 --- a/TAO/tao/UB_String_Arguments.cpp +++ b/TAO/tao/UB_String_Arguments.cpp @@ -8,6 +8,9 @@ ACE_RCSID (tao, #if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION) +template class TAO::Arg_Traits<CORBA::String>; +template class TAO::Arg_Traits<CORBA::WString>; + template class TAO::UB_String_Arg_Traits_T<CORBA::Char, CORBA::String_var, CORBA::String_out>; @@ -17,6 +20,9 @@ template class TAO::UB_String_Arg_Traits_T<CORBA::WChar, #elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA) +# pragma instantiate TAO::Arg_Traits<CORBA::String> +# pragma instantiate TAO::Arg_Traits<CORBA::WString> + # pragma instantiate TAO::UB_String_Arg_Traits_T<CORBA::Char, \ CORBA::String_var, \ CORBA::String_out> diff --git a/TAO/tao/UB_String_Arguments.h b/TAO/tao/UB_String_Arguments.h index 5e148bf3e5a..ca9cb31a08b 100644 --- a/TAO/tao/UB_String_Arguments.h +++ b/TAO/tao/UB_String_Arguments.h @@ -15,29 +15,38 @@ #define TAO_UB_STRING_ARGUMENTS_H #include "ace/pre.h" -#include "UB_String_Argument_T.h" +#include "tao/corbafwd.h" +#include "tao/UB_String_Argument_T.h" #if !defined (ACE_LACKS_PRAGMA_ONCE) # pragma once #endif /* ACE_LACKS_PRAGMA_ONCE */ +#include "tao/Arg_Traits_T.h" + namespace TAO { /** * - * @brief Typedefs for unbounded (w)strings. + * @brief Specializatons for unbounded (w)strings. * */ - typedef UB_String_Arg_Traits_T<CORBA::Char, - CORBA::String_var, - CORBA::String_out> - UB_String_Arg_Traits; - - typedef UB_String_Arg_Traits_T<CORBA::WChar, - CORBA::WString_var, - CORBA::WString_out> - UB_WString_Arg_Traits; + template<> + class TAO_Export Arg_Traits<CORBA::Char *> + : public UB_String_Arg_Traits_T<CORBA::Char, + CORBA::String_var, + CORBA::String_out> + { + }; + + template<> + class TAO_Export Arg_Traits<CORBA::WChar *> + : public UB_String_Arg_Traits_T<CORBA::WChar, + CORBA::WString_var, + CORBA::WString_out> + { + }; }; #include "ace/post.h" diff --git a/TAO/tests/Bench/wire/testC.cpp b/TAO/tests/Bench/wire/testC.cpp index 2c289720962..d77737edd7f 100644 --- a/TAO/tests/Bench/wire/testC.cpp +++ b/TAO/tests/Bench/wire/testC.cpp @@ -274,10 +274,10 @@ char * _TAO_foo_Remote_Proxy_Impl::all_str ( CORBA::SystemException )) { - TAO::UB_String_Arg_Traits::stub_ret_val _tao_retval; - TAO::UB_String_Arg_Traits::in_arg_val _tao_inarg (inarg); - TAO::UB_String_Arg_Traits::inout_arg_val _tao_inoutarg (inoutarg); - TAO::UB_String_Arg_Traits::out_arg_val _tao_outarg (outarg); + TAO::Arg_Traits<CORBA::Char *>::stub_ret_val _tao_retval; + TAO::Arg_Traits<CORBA::Char *>::in_arg_val _tao_inarg (inarg); + TAO::Arg_Traits<CORBA::Char *>::inout_arg_val _tao_inoutarg (inoutarg); + TAO::Arg_Traits<CORBA::Char *>::out_arg_val _tao_outarg (outarg); TAO::Argument *_tao_signature [] = { diff --git a/TAO/tests/Bench/wire/testS.cpp b/TAO/tests/Bench/wire/testS.cpp index c90bd660c67..c1b1cb9accd 100644 --- a/TAO/tests/Bench/wire/testS.cpp +++ b/TAO/tests/Bench/wire/testS.cpp @@ -539,10 +539,10 @@ void POA_foo::all_str_skel ( ACE_ENV_ARG_DECL ) { - TAO::UB_String_Arg_Traits::skel_ret_val _tao_retval; - TAO::UB_String_Arg_Traits::in_sarg_val _tao_inarg; - TAO::UB_String_Arg_Traits::inout_sarg_val _tao_inoutarg; - TAO::UB_String_Arg_Traits::out_sarg_val _tao_outarg; + TAO::Arg_Traits<CORBA::Char *>::skel_ret_val _tao_retval; + TAO::Arg_Traits<CORBA::Char *>::in_sarg_val _tao_inarg; + TAO::Arg_Traits<CORBA::Char *>::inout_sarg_val _tao_inoutarg; + TAO::Arg_Traits<CORBA::Char *>::out_sarg_val _tao_outarg; TAO::Argument *_tao_signature [] = { |