summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2003-06-24 18:54:31 +0000
committerparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2003-06-24 18:54:31 +0000
commita4b9ad0510c6a018162a01221eab95bc2ca2a232 (patch)
treeabf6e98f8d3caabe70819241be47bf5cbb726f63
parentba0cfe80e4780db2b67e390d33648cff678c1ece (diff)
downloadATCD-a4b9ad0510c6a018162a01221eab95bc2ca2a232.tar.gz
ChangeLogTag: Tue Jun 24 13:48:20 2003 Jeff Parsons <j.parsons@vanderbilt.edu>
-rw-r--r--TAO/ChangeLog_ref29
-rw-r--r--TAO/tao/Arg_Traits_T.h39
-rw-r--r--TAO/tao/Basic_Arguments.cpp20
-rw-r--r--TAO/tao/Basic_Arguments.h66
-rw-r--r--TAO/tao/Objref_VarOut_T.cpp62
-rw-r--r--TAO/tao/Objref_VarOut_T.h22
-rw-r--r--TAO/tao/Special_Basic_Arguments.cpp10
-rw-r--r--TAO/tao/Special_Basic_Arguments.h61
-rw-r--r--TAO/tao/UB_String_Arguments.cpp6
-rw-r--r--TAO/tao/UB_String_Arguments.h31
-rw-r--r--TAO/tests/Bench/wire/testC.cpp8
-rw-r--r--TAO/tests/Bench/wire/testS.cpp8
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 [] =
{