summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2006-11-30 18:11:27 +0000
committerparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2006-11-30 18:11:27 +0000
commit925b4812a6ad31d959c267746f2e7696818676f5 (patch)
tree48ef0b36d442ee10e3a79281d741378d15405a6b
parent18097461bcedb50914d5bbed11749f629dc96f5c (diff)
downloadATCD-925b4812a6ad31d959c267746f2e7696818676f5.tar.gz
ChangeLogTag: Thu Nov 30 18:01:43 UTC 2006 Jeff Parsons <j.parsons@vanderbilt.edu>
-rw-r--r--TAO/ChangeLog31
-rw-r--r--TAO/tao/AnyTypeCode/BasicTypeTraits.cpp193
-rw-r--r--TAO/tao/AnyTypeCode/BasicTypeTraits.h64
-rw-r--r--TAO/tao/DynamicAny/DynAnyUtils_T.h8
-rw-r--r--TAO/tests/DynAny_Test/analyzer.cpp52
5 files changed, 315 insertions, 33 deletions
diff --git a/TAO/ChangeLog b/TAO/ChangeLog
index d4804b97d08..2301567ad8b 100644
--- a/TAO/ChangeLog
+++ b/TAO/ChangeLog
@@ -1,18 +1,41 @@
+Thu Nov 30 18:01:43 UTC 2006 Jeff Parsons <j.parsons@vanderbilt.edu>
+
+ * tao/AnyTypeCode/BasicTypeTraits.cpp:
+ * tao/AnyTypeCode/BasicTypeTraits.h:
+
+ Added one-line convert() method to each specialization,
+ since returning the extraction type in
+ DynAnyBasicTypeUtils<>::get_value() is not correct for
+ chars, wchars, octets and booleans.
+
+ * tao/DynamicAny/DynAnyUtils_T.h:
+
+ Replaced an implicit temporary in
+ DynAnyBasicTypeUtils<>::get_value() with an explicit
+ constructor call, since the temporary was confused with a
+ cast by some compilers.
+
+ * tests/DynAny_Test/analyzer.cpp:
+
+ Replace a call to length() on an aliased array typecode
+ (which returned a BADKIND exception) to a call on the
+ unaliased typecode.
+
Thu Nov 30 14:48:57 UTC 2006 Vadym Ridosh <vridosh@prismtech.com>
* tao/PortableServer/Var_Size_SArgument_T.cpp
* tao/Bounded_Sequence_CDR_T.h
* tao/Unbounded_Sequence_CDR_T.h
- Fix for bugzilla 1676 (uninitialized "out" param for sequence<string>
+ Fix for bugzilla 1676 (uninitialized "out" param for sequence<string>
can cause server to core). Old attempt to fix this was also removed.
Thu Nov 30 14:17:22 UTC 2006 Jeff Parsons <j.parsons@vanderbilt.edu>
- * orbsvcs/orbsvcs/Notify/Notify_Constraint_Visitors.cpp (visito_union_pos):
-
+ * orbsvcs/orbsvcs/Notify/Notify_Constraint_Visitors.cpp (visit_union_pos):
+
Change to use the new DynAnyFactory method similar to the
change to Log_Constraint_Visitors.cpp in
-
+
Tue Nov 28 19:32:46 UTC 2006 Jeff Parsons <j.parsons@vanderbilt.edu>
Thu Nov 30 13:28:22 UTC 2006 Chad Elliott <elliott_c@ociweb.com>
diff --git a/TAO/tao/AnyTypeCode/BasicTypeTraits.cpp b/TAO/tao/AnyTypeCode/BasicTypeTraits.cpp
index 149bee750b9..32f4bdf335c 100644
--- a/TAO/tao/AnyTypeCode/BasicTypeTraits.cpp
+++ b/TAO/tao/AnyTypeCode/BasicTypeTraits.cpp
@@ -38,6 +38,13 @@ namespace TAO
CORBA::TCKind const
BasicTypeTraits<CORBA::Boolean>::tckind_value = CORBA::tk_boolean;
+ BasicTypeTraits<CORBA::Boolean>::return_type
+ BasicTypeTraits<CORBA::Boolean>::convert (
+ BasicTypeTraits<CORBA::Boolean>::extract_type& et)
+ {
+ return et.ref_;
+ }
+
//================================================================
CORBA::TypeCode_ptr const
@@ -46,6 +53,12 @@ namespace TAO
CORBA::TCKind const
BasicTypeTraits<CORBA::Octet>::tckind_value = CORBA::tk_octet;
+ BasicTypeTraits<CORBA::Octet>::return_type
+ BasicTypeTraits<CORBA::Octet>::convert (extract_type& et)
+ {
+ return et.ref_;
+ }
+
//================================================================
CORBA::TypeCode_ptr const
@@ -54,6 +67,12 @@ namespace TAO
CORBA::TCKind const
BasicTypeTraits<CORBA::Char>::tckind_value = CORBA::tk_char;
+ BasicTypeTraits<CORBA::Char>::return_type
+ BasicTypeTraits<CORBA::Char>::convert (extract_type& et)
+ {
+ return et.ref_;
+ }
+
//================================================================
#if (defined (ACE_HAS_WCHAR) || defined (ACE_HAS_XPG4_MULTIBYTE_CHAR)) && !defined (ACE_LACKS_NATIVE_WCHAR_T)
@@ -64,6 +83,12 @@ namespace TAO
CORBA::TCKind const
BasicTypeTraits<CORBA::WChar>::tckind_value = CORBA::tk_wchar;
+ BasicTypeTraits<CORBA::WChar>::return_type
+ BasicTypeTraits<CORBA::WChar>::convert (extract_type& et)
+ {
+ return et.ref_;
+ }
+
#endif
//================================================================
@@ -74,6 +99,12 @@ namespace TAO
CORBA::TCKind const
BasicTypeTraits<CORBA::Short>::tckind_value = CORBA::tk_short;
+ BasicTypeTraits<CORBA::Short>::return_type
+ BasicTypeTraits<CORBA::Short>::convert (extract_type& et)
+ {
+ return et;
+ }
+
//================================================================
CORBA::TypeCode_ptr const
@@ -82,6 +113,12 @@ namespace TAO
CORBA::TCKind const
BasicTypeTraits<CORBA::UShort>::tckind_value = CORBA::tk_ushort;
+ BasicTypeTraits<CORBA::UShort>::return_type
+ BasicTypeTraits<CORBA::UShort>::convert (extract_type& et)
+ {
+ return et;
+ }
+
//================================================================
CORBA::TypeCode_ptr const
@@ -90,6 +127,12 @@ namespace TAO
CORBA::TCKind const
BasicTypeTraits<CORBA::Long>::tckind_value = CORBA::tk_long;
+ BasicTypeTraits<CORBA::Long>::return_type
+ BasicTypeTraits<CORBA::Long>::convert (extract_type& et)
+ {
+ return et;
+ }
+
//================================================================
CORBA::TypeCode_ptr const
@@ -98,6 +141,12 @@ namespace TAO
CORBA::TCKind const
BasicTypeTraits<CORBA::ULong>::tckind_value = CORBA::tk_ulong;
+ BasicTypeTraits<CORBA::ULong>::return_type
+ BasicTypeTraits<CORBA::ULong>::convert (extract_type& et)
+ {
+ return et;
+ }
+
//================================================================
CORBA::TypeCode_ptr const
@@ -106,6 +155,12 @@ namespace TAO
CORBA::TCKind const
BasicTypeTraits<CORBA::LongLong>::tckind_value = CORBA::tk_longlong;
+ BasicTypeTraits<CORBA::LongLong>::return_type
+ BasicTypeTraits<CORBA::LongLong>::convert (extract_type& et)
+ {
+ return et;
+ }
+
//================================================================
CORBA::TypeCode_ptr const
@@ -114,6 +169,12 @@ namespace TAO
CORBA::TCKind const
BasicTypeTraits<CORBA::ULongLong>::tckind_value = CORBA::tk_ulonglong;
+ BasicTypeTraits<CORBA::ULongLong>::return_type
+ BasicTypeTraits<CORBA::ULongLong>::convert (extract_type& et)
+ {
+ return et;
+ }
+
//================================================================
CORBA::TypeCode_ptr const
@@ -122,6 +183,12 @@ namespace TAO
CORBA::TCKind const
BasicTypeTraits<CORBA::Float>::tckind_value = CORBA::tk_float;
+ BasicTypeTraits<CORBA::Float>::return_type
+ BasicTypeTraits<CORBA::Float>::convert (extract_type& et)
+ {
+ return et;
+ }
+
//================================================================
CORBA::TypeCode_ptr const
@@ -130,6 +197,12 @@ namespace TAO
CORBA::TCKind const
BasicTypeTraits<CORBA::Double>::tckind_value = CORBA::tk_double;
+ BasicTypeTraits<CORBA::Double>::return_type
+ BasicTypeTraits<CORBA::Double>::convert (extract_type& et)
+ {
+ return et;
+ }
+
//================================================================
CORBA::TypeCode_ptr const
@@ -138,6 +211,12 @@ namespace TAO
CORBA::TCKind const
BasicTypeTraits<CORBA::LongDouble>::tckind_value = CORBA::tk_longdouble;
+ BasicTypeTraits<CORBA::LongDouble>::return_type
+ BasicTypeTraits<CORBA::LongDouble>::convert (extract_type& et)
+ {
+ return et;
+ }
+
//================================================================
CORBA::TypeCode_ptr const
@@ -146,6 +225,12 @@ namespace TAO
CORBA::TCKind const
BasicTypeTraits<CORBA::Char *>::tckind_value = CORBA::tk_string;
+ BasicTypeTraits<CORBA::Char *>::return_type
+ BasicTypeTraits<CORBA::Char *>::convert (extract_type& et)
+ {
+ return et;
+ }
+
//================================================================
CORBA::TypeCode_ptr const
@@ -154,6 +239,12 @@ namespace TAO
CORBA::TCKind const
BasicTypeTraits<CORBA::WChar *>::tckind_value = CORBA::tk_wstring;
+ BasicTypeTraits<CORBA::WChar *>::return_type
+ BasicTypeTraits<CORBA::WChar *>::convert (extract_type& et)
+ {
+ return et;
+ }
+
//================================================================
CORBA::TypeCode_ptr const
@@ -162,6 +253,12 @@ namespace TAO
CORBA::TCKind const
BasicTypeTraits<CORBA::Any>::tckind_value = CORBA::tk_any;
+ BasicTypeTraits<CORBA::Any>::return_type
+ BasicTypeTraits<CORBA::Any>::convert (extract_type& et)
+ {
+ return et;
+ }
+
//================================================================
CORBA::TypeCode_ptr const
@@ -170,6 +267,12 @@ namespace TAO
CORBA::TCKind const
BasicTypeTraits<CORBA::Object_ptr>::tckind_value = CORBA::tk_objref;
+ BasicTypeTraits<CORBA::Object_ptr>::return_type
+ BasicTypeTraits<CORBA::Object_ptr>::convert (extract_type& et)
+ {
+ return et;
+ }
+
//================================================================
CORBA::TypeCode_ptr const
@@ -178,6 +281,12 @@ namespace TAO
CORBA::TCKind const
BasicTypeTraits<CORBA::TypeCode_ptr>::tckind_value = CORBA::tk_TypeCode;
+ BasicTypeTraits<CORBA::TypeCode_ptr>::return_type
+ BasicTypeTraits<CORBA::TypeCode_ptr>::convert (extract_type& et)
+ {
+ return et;
+ }
+
//================================================================
CORBA::TypeCode_ptr const
@@ -186,6 +295,12 @@ namespace TAO
CORBA::TCKind const
BasicTypeTraits<CORBA::BooleanSeq>::tckind_value = CORBA::tk_sequence;
+ BasicTypeTraits<CORBA::BooleanSeq>::return_type
+ BasicTypeTraits<CORBA::BooleanSeq>::convert (extract_type& et)
+ {
+ return et;
+ }
+
//================================================================
CORBA::TypeCode_ptr const
@@ -194,6 +309,12 @@ namespace TAO
CORBA::TCKind const
BasicTypeTraits<CORBA::OctetSeq>::tckind_value = CORBA::tk_sequence;
+ BasicTypeTraits<CORBA::OctetSeq>::return_type
+ BasicTypeTraits<CORBA::OctetSeq>::convert (extract_type& et)
+ {
+ return et;
+ }
+
//================================================================
CORBA::TypeCode_ptr const
@@ -202,6 +323,12 @@ namespace TAO
CORBA::TCKind const
BasicTypeTraits<CORBA::CharSeq>::tckind_value = CORBA::tk_sequence;
+ BasicTypeTraits<CORBA::CharSeq>::return_type
+ BasicTypeTraits<CORBA::CharSeq>::convert (extract_type& et)
+ {
+ return et;
+ }
+
//================================================================
CORBA::TypeCode_ptr const
@@ -210,6 +337,12 @@ namespace TAO
CORBA::TCKind const
BasicTypeTraits<CORBA::WCharSeq>::tckind_value = CORBA::tk_sequence;
+ BasicTypeTraits<CORBA::WCharSeq>::return_type
+ BasicTypeTraits<CORBA::WCharSeq>::convert (extract_type& et)
+ {
+ return et;
+ }
+
//================================================================
CORBA::TypeCode_ptr const
@@ -218,6 +351,12 @@ namespace TAO
CORBA::TCKind const
BasicTypeTraits<CORBA::ShortSeq>::tckind_value = CORBA::tk_sequence;
+ BasicTypeTraits<CORBA::ShortSeq>::return_type
+ BasicTypeTraits<CORBA::ShortSeq>::convert (extract_type& et)
+ {
+ return et;
+ }
+
//================================================================
CORBA::TypeCode_ptr const
@@ -226,6 +365,12 @@ namespace TAO
CORBA::TCKind const
BasicTypeTraits<CORBA::UShortSeq>::tckind_value = CORBA::tk_sequence;
+ BasicTypeTraits<CORBA::UShortSeq>::return_type
+ BasicTypeTraits<CORBA::UShortSeq>::convert (extract_type& et)
+ {
+ return et;
+ }
+
//================================================================
CORBA::TypeCode_ptr const
@@ -234,6 +379,12 @@ namespace TAO
CORBA::TCKind const
BasicTypeTraits<CORBA::LongSeq>::tckind_value = CORBA::tk_sequence;
+ BasicTypeTraits<CORBA::LongSeq>::return_type
+ BasicTypeTraits<CORBA::LongSeq>::convert (extract_type& et)
+ {
+ return et;
+ }
+
//================================================================
CORBA::TypeCode_ptr const
@@ -242,6 +393,12 @@ namespace TAO
CORBA::TCKind const
BasicTypeTraits<CORBA::ULongSeq>::tckind_value = CORBA::tk_sequence;
+ BasicTypeTraits<CORBA::ULongSeq>::return_type
+ BasicTypeTraits<CORBA::ULongSeq>::convert (extract_type& et)
+ {
+ return et;
+ }
+
//================================================================
CORBA::TypeCode_ptr const
@@ -250,6 +407,12 @@ namespace TAO
CORBA::TCKind const
BasicTypeTraits<CORBA::LongLongSeq>::tckind_value = CORBA::tk_sequence;
+ BasicTypeTraits<CORBA::LongLongSeq>::return_type
+ BasicTypeTraits<CORBA::LongLongSeq>::convert (extract_type& et)
+ {
+ return et;
+ }
+
//================================================================
CORBA::TypeCode_ptr const
@@ -258,6 +421,12 @@ namespace TAO
CORBA::TCKind const
BasicTypeTraits<CORBA::ULongLongSeq>::tckind_value = CORBA::tk_sequence;
+ BasicTypeTraits<CORBA::ULongLongSeq>::return_type
+ BasicTypeTraits<CORBA::ULongLongSeq>::convert (extract_type& et)
+ {
+ return et;
+ }
+
//================================================================
CORBA::TypeCode_ptr const
@@ -266,6 +435,12 @@ namespace TAO
CORBA::TCKind const
BasicTypeTraits<CORBA::FloatSeq>::tckind_value = CORBA::tk_sequence;
+ BasicTypeTraits<CORBA::FloatSeq>::return_type
+ BasicTypeTraits<CORBA::FloatSeq>::convert (extract_type& et)
+ {
+ return et;
+ }
+
//================================================================
CORBA::TypeCode_ptr const
@@ -274,6 +449,12 @@ namespace TAO
CORBA::TCKind const
BasicTypeTraits<CORBA::DoubleSeq>::tckind_value = CORBA::tk_sequence;
+ BasicTypeTraits<CORBA::DoubleSeq>::return_type
+ BasicTypeTraits<CORBA::DoubleSeq>::convert (extract_type& et)
+ {
+ return et;
+ }
+
//================================================================
CORBA::TypeCode_ptr const
@@ -282,6 +463,12 @@ namespace TAO
CORBA::TCKind const
BasicTypeTraits<CORBA::LongDoubleSeq>::tckind_value = CORBA::tk_sequence;
+ BasicTypeTraits<CORBA::LongDoubleSeq>::return_type
+ BasicTypeTraits<CORBA::LongDoubleSeq>::convert (extract_type& et)
+ {
+ return et;
+ }
+
//================================================================
CORBA::TypeCode_ptr const
@@ -289,6 +476,12 @@ namespace TAO
CORBA::TCKind const
BasicTypeTraits<CORBA::AnySeq>::tckind_value = CORBA::tk_sequence;
+
+ BasicTypeTraits<CORBA::AnySeq>::return_type
+ BasicTypeTraits<CORBA::AnySeq>::convert (extract_type& et)
+ {
+ return et;
+ }
}
TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/tao/AnyTypeCode/BasicTypeTraits.h b/TAO/tao/AnyTypeCode/BasicTypeTraits.h
index 8a5925837a8..73b3c0b4109 100644
--- a/TAO/tao/AnyTypeCode/BasicTypeTraits.h
+++ b/TAO/tao/AnyTypeCode/BasicTypeTraits.h
@@ -55,6 +55,8 @@ namespace TAO
typedef CORBA::Any::from_boolean insert_type;
typedef CORBA::Any::to_boolean extract_type;
typedef CORBA::Boolean return_type;
+
+ static return_type convert (extract_type& et);
};
template<>
@@ -66,6 +68,8 @@ namespace TAO
typedef CORBA::Any::from_octet insert_type;
typedef CORBA::Any::to_octet extract_type;
typedef CORBA::Octet return_type;
+
+ static return_type convert (extract_type& et);
};
template<>
@@ -77,6 +81,8 @@ namespace TAO
typedef CORBA::Any::from_char insert_type;
typedef CORBA::Any::to_char extract_type;
typedef CORBA::Char return_type;
+
+ static return_type convert (extract_type& et);
};
#if (defined (ACE_HAS_WCHAR) || defined (ACE_HAS_XPG4_MULTIBYTE_CHAR)) && !defined (ACE_LACKS_NATIVE_WCHAR_T)
@@ -89,6 +95,8 @@ namespace TAO
typedef CORBA::Any::from_wchar insert_type;
typedef CORBA::Any::to_wchar extract_type;
typedef CORBA::WChar return_type;
+
+ static return_type convert (extract_type& et);
};
#endif
@@ -101,6 +109,8 @@ namespace TAO
typedef CORBA::Short insert_type;
typedef CORBA::Short extract_type;
typedef CORBA::Short return_type;
+
+ static return_type convert (extract_type& et);
};
template<>
@@ -112,6 +122,8 @@ namespace TAO
typedef CORBA::UShort insert_type;
typedef CORBA::UShort extract_type;
typedef CORBA::UShort return_type;
+
+ static return_type convert (extract_type& et);
};
template<>
@@ -123,6 +135,8 @@ namespace TAO
typedef CORBA::Long insert_type;
typedef CORBA::Long extract_type;
typedef CORBA::Long return_type;
+
+ static return_type convert (extract_type& et);
};
template<>
@@ -134,6 +148,8 @@ namespace TAO
typedef CORBA::ULong insert_type;
typedef CORBA::ULong extract_type;
typedef CORBA::ULong return_type;
+
+ static return_type convert (extract_type& et);
};
template<>
@@ -145,6 +161,8 @@ namespace TAO
typedef CORBA::LongLong insert_type;
typedef CORBA::LongLong extract_type;
typedef CORBA::LongLong return_type;
+
+ static return_type convert (extract_type& et);
};
template<>
@@ -156,6 +174,8 @@ namespace TAO
typedef CORBA::ULongLong insert_type;
typedef CORBA::ULongLong extract_type;
typedef CORBA::ULongLong return_type;
+
+ static return_type convert (extract_type& et);
};
template<>
@@ -167,6 +187,8 @@ namespace TAO
typedef CORBA::Float insert_type;
typedef CORBA::Float extract_type;
typedef CORBA::Float return_type;
+
+ static return_type convert (extract_type& et);
};
template<>
@@ -178,6 +200,8 @@ namespace TAO
typedef CORBA::Double insert_type;
typedef CORBA::Double extract_type;
typedef CORBA::Double return_type;
+
+ static return_type convert (extract_type& et);
};
template<>
@@ -189,6 +213,8 @@ namespace TAO
typedef CORBA::LongDouble insert_type;
typedef CORBA::LongDouble extract_type;
typedef CORBA::LongDouble return_type;
+
+ static return_type convert (extract_type& et);
};
template<>
@@ -200,6 +226,8 @@ namespace TAO
typedef CORBA::Char * insert_type;
typedef CORBA::Char * extract_type;
typedef CORBA::Char * return_type;
+
+ static return_type convert (extract_type& et);
};
template<>
@@ -211,6 +239,8 @@ namespace TAO
typedef CORBA::WChar * insert_type;
typedef CORBA::WChar * extract_type;
typedef CORBA::WChar * return_type;
+
+ static return_type convert (extract_type& et);
};
template<>
@@ -222,6 +252,8 @@ namespace TAO
typedef CORBA::Any insert_type;
typedef CORBA::Any * extract_type;
typedef CORBA::Any * return_type;
+
+ static return_type convert (extract_type& et);
};
template<>
@@ -233,6 +265,8 @@ namespace TAO
typedef CORBA::Object_ptr insert_type;
typedef CORBA::Object_ptr extract_type;
typedef CORBA::Object_ptr return_type;
+
+ static return_type convert (extract_type& et);
};
template<>
@@ -244,6 +278,8 @@ namespace TAO
typedef CORBA::TypeCode_ptr insert_type;
typedef CORBA::TypeCode_ptr extract_type;
typedef CORBA::TypeCode_ptr return_type;
+
+ static return_type convert (extract_type& et);
};
template<>
@@ -255,6 +291,8 @@ namespace TAO
typedef CORBA::BooleanSeq insert_type;
typedef CORBA::BooleanSeq * extract_type;
typedef CORBA::BooleanSeq * return_type;
+
+ static return_type convert (extract_type& et);
};
template<>
@@ -266,6 +304,8 @@ namespace TAO
typedef CORBA::OctetSeq insert_type;
typedef CORBA::OctetSeq * extract_type;
typedef CORBA::OctetSeq * return_type;
+
+ static return_type convert (extract_type& et);
};
template<>
@@ -277,6 +317,8 @@ namespace TAO
typedef CORBA::CharSeq insert_type;
typedef CORBA::CharSeq * extract_type;
typedef CORBA::CharSeq * return_type;
+
+ static return_type convert (extract_type& et);
};
template<>
@@ -288,6 +330,8 @@ namespace TAO
typedef CORBA::WCharSeq insert_type;
typedef CORBA::WCharSeq * extract_type;
typedef CORBA::WCharSeq * return_type;
+
+ static return_type convert (extract_type& et);
};
template<>
@@ -299,6 +343,8 @@ namespace TAO
typedef CORBA::ShortSeq insert_type;
typedef CORBA::ShortSeq * extract_type;
typedef CORBA::ShortSeq * return_type;
+
+ static return_type convert (extract_type& et);
};
template<>
@@ -310,6 +356,8 @@ namespace TAO
typedef CORBA::UShortSeq insert_type;
typedef CORBA::UShortSeq * extract_type;
typedef CORBA::UShortSeq * return_type;
+
+ static return_type convert (extract_type& et);
};
template<>
@@ -321,6 +369,8 @@ namespace TAO
typedef CORBA::LongSeq insert_type;
typedef CORBA::LongSeq * extract_type;
typedef CORBA::LongSeq * return_type;
+
+ static return_type convert (extract_type& et);
};
template<>
@@ -332,6 +382,8 @@ namespace TAO
typedef CORBA::ULongSeq insert_type;
typedef CORBA::ULongSeq * extract_type;
typedef CORBA::ULongSeq * return_type;
+
+ static return_type convert (extract_type& et);
};
template<>
@@ -343,6 +395,8 @@ namespace TAO
typedef CORBA::LongLongSeq insert_type;
typedef CORBA::LongLongSeq * extract_type;
typedef CORBA::LongLongSeq * return_type;
+
+ static return_type convert (extract_type& et);
};
template<>
@@ -354,6 +408,8 @@ namespace TAO
typedef CORBA::ULongLongSeq insert_type;
typedef CORBA::ULongLongSeq * extract_type;
typedef CORBA::ULongLongSeq * return_type;
+
+ static return_type convert (extract_type& et);
};
template<>
@@ -365,6 +421,8 @@ namespace TAO
typedef CORBA::FloatSeq insert_type;
typedef CORBA::FloatSeq * extract_type;
typedef CORBA::FloatSeq * return_type;
+
+ static return_type convert (extract_type& et);
};
template<>
@@ -376,6 +434,8 @@ namespace TAO
typedef CORBA::DoubleSeq insert_type;
typedef CORBA::DoubleSeq * extract_type;
typedef CORBA::DoubleSeq * return_type;
+
+ static return_type convert (extract_type& et);
};
template<>
@@ -387,6 +447,8 @@ namespace TAO
typedef CORBA::LongDoubleSeq insert_type;
typedef CORBA::LongDoubleSeq * extract_type;
typedef CORBA::LongDoubleSeq * return_type;
+
+ static return_type convert (extract_type& et);
};
template<>
@@ -398,6 +460,8 @@ namespace TAO
typedef CORBA::AnySeq insert_type;
typedef CORBA::AnySeq * extract_type;
typedef CORBA::AnySeq * return_type;
+
+ static return_type convert (extract_type& et);
};
}
diff --git a/TAO/tao/DynamicAny/DynAnyUtils_T.h b/TAO/tao/DynamicAny/DynAnyUtils_T.h
index 8d421a962d9..08742ad5d00 100644
--- a/TAO/tao/DynamicAny/DynAnyUtils_T.h
+++ b/TAO/tao/DynamicAny/DynAnyUtils_T.h
@@ -56,7 +56,8 @@ namespace TAO
the_dynany->check_type (TAO::BasicTypeTraits<T>::tc_value);
CORBA::Any &my_any = the_dynany->the_any ();
typedef typename TAO::BasicTypeTraits<T>::insert_type i_type;
- my_any <<= i_type (val);
+ i_type insert_arg (val);
+ my_any <<= insert_arg;
}
}
@@ -85,15 +86,16 @@ namespace TAO
typedef typename TAO::BasicTypeTraits<T>::return_type ret_type;
typedef typename TAO::BasicTypeTraits<T>::extract_type ext_type;
ret_type retval = ret_type ();
+ ext_type extval (retval);
const CORBA::Any &my_any = the_dynany->the_any ();
- if (!(my_any >>= ext_type (retval)))
+ if (!(my_any >>= extval))
{
ACE_THROW_RETURN (DynamicAny::DynAny::TypeMismatch (),
TAO::BasicTypeTraits<T>::return_type ());
}
- return retval;
+ return TAO::BasicTypeTraits<T>::convert (extval);
}
}
};
diff --git a/TAO/tests/DynAny_Test/analyzer.cpp b/TAO/tests/DynAny_Test/analyzer.cpp
index 43e09879f4d..55bad99ed41 100644
--- a/TAO/tests/DynAny_Test/analyzer.cpp
+++ b/TAO/tests/DynAny_Test/analyzer.cpp
@@ -24,7 +24,7 @@
if (debug_) \
ACE_DEBUG ((LM_DEBUG, str , b)); \
} break;
-
+
#define CASEBS(type,CT,str) case CORBA::tk_##type: \
{\
CORBA::CT##Seq_var seq = da->get_##type##_seq (); \
@@ -47,7 +47,7 @@
} \
--level_; \
} \
- break;
+ break;
DynAnyAnalyzer::DynAnyAnalyzer (CORBA::ORB_ptr orb,
DynamicAny::DynAnyFactory_ptr dynany_factory,
@@ -87,7 +87,7 @@ void DynAnyAnalyzer::analyze (DynamicAny::DynAny_ptr da ACE_ENV_ARG_DECL)
ACE_CHECK;
CORBA::TypeCode_var dup = CORBA::TypeCode::_duplicate (tc.in ());
-
+
// strip aliases
while (kind == CORBA::tk_alias)
{
@@ -117,7 +117,7 @@ void DynAnyAnalyzer::analyze (DynamicAny::DynAny_ptr da ACE_ENV_ARG_DECL)
if (da->seek (0) )
{
level_++;
-
+
do
{
DynamicAny::DynAny_var cc =
@@ -143,7 +143,7 @@ void DynAnyAnalyzer::analyze (DynamicAny::DynAny_ptr da ACE_ENV_ARG_DECL)
}
} while (da->next ());
-
+
level_--;
}
}
@@ -173,7 +173,7 @@ void DynAnyAnalyzer::analyze (DynamicAny::DynAny_ptr da ACE_ENV_ARG_DECL)
if (ds->seek (0UL))
{
level_++;
-
+
do
{
tab(level_);
@@ -193,7 +193,7 @@ void DynAnyAnalyzer::analyze (DynamicAny::DynAny_ptr da ACE_ENV_ARG_DECL)
i++;
} while (da->next ());
-
+
level_--;
}
}
@@ -213,7 +213,7 @@ void DynAnyAnalyzer::analyze (DynamicAny::DynAny_ptr da ACE_ENV_ARG_DECL)
level_++;
CORBA::ULong const len =
- tc->length (ACE_ENV_SINGLE_ARG_PARAMETER);
+ dup->length (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
for (CORBA::ULong i = 0 ; i < len; ++i)
@@ -310,7 +310,7 @@ void DynAnyAnalyzer::analyze (DynamicAny::DynAny_ptr da ACE_ENV_ARG_DECL)
{
CORBA::String_var b (da->get_string ());
tab (level_);
-
+
if (debug_)
{
ACE_DEBUG ((LM_DEBUG, " Value (string) = %s\n", b.in ()));
@@ -321,7 +321,7 @@ void DynAnyAnalyzer::analyze (DynamicAny::DynAny_ptr da ACE_ENV_ARG_DECL)
case CORBA::tk_TypeCode:
{
tab (level_);
-
+
if (debug_)
{
CORBA::TCKind const kind =
@@ -338,7 +338,7 @@ void DynAnyAnalyzer::analyze (DynamicAny::DynAny_ptr da ACE_ENV_ARG_DECL)
default:
{
tab (level_);
-
+
if (debug_)
{
CORBA::TCKind const kind =
@@ -365,9 +365,9 @@ DynAnyAnalyzer::analyze_basic_seq (CORBA::TypeCode_ptr tc,
{
CORBA::TypeCode_var ct = tc->content_type ();
CORBA::TCKind tk = ct->kind ();
-
+
tab (level_);
-
+
if (debug_)
{
ACE_DEBUG ((LM_DEBUG,
@@ -377,28 +377,28 @@ DynAnyAnalyzer::analyze_basic_seq (CORBA::TypeCode_ptr tc,
switch (tk)
{
CASEBS (boolean, Boolean, " Value (bool) = %d\n");
- CASEBS (octet, Octet, " Value (octet) = %c\n");
- CASEBS (char, Char, " Value (char) = %c\n");
- CASEBS (wchar, WChar, " Value (wchar) = %u\n");
- CASEBS (short, Short, " Value (short) = %d\n");
- CASEBS (ushort, UShort, " Value (ushort) = %u\n");
- CASEBS (long, Long, " Value (long) = %d\n");
- CASEBS (ulong, ULong, " Value (ulong) = %u\n");
- CASEBS (longlong, LongLong, " Value (longlong) = %Ld\n");
- CASEBS (ulonglong, ULongLong, " Value (ulonglong) = %Lu\n");
- CASEBS (float, Float, " Value (float) = %f\n");
- CASEBS (double, Double, " Value (double) = %f\n");
+ CASEBS (octet, Octet, " Value (octet) = %c\n");
+ CASEBS (char, Char, " Value (char) = %c\n");
+ CASEBS (wchar, WChar, " Value (wchar) = %u\n");
+ CASEBS (short, Short, " Value (short) = %d\n");
+ CASEBS (ushort, UShort, " Value (ushort) = %u\n");
+ CASEBS (long, Long, " Value (long) = %d\n");
+ CASEBS (ulong, ULong, " Value (ulong) = %u\n");
+ CASEBS (longlong, LongLong, " Value (longlong) = %Ld\n");
+ CASEBS (ulonglong, ULongLong, " Value (ulonglong) = %Lu\n");
+ CASEBS (float, Float, " Value (float) = %f\n");
+ CASEBS (double, Double, " Value (double) = %f\n");
case CORBA::tk_longdouble:
default:
tab (level_);
-
+
if (debug_)
{
ACE_DEBUG ((LM_DEBUG,
" unhandled typecode = %d\n",
static_cast<int> (tk)));
}
-
+
break;
}
}