From 62e05725747789e0f46a32f883d5141eac4c7f94 Mon Sep 17 00:00:00 2001 From: Johnny Willemsen Date: Mon, 6 Mar 2006 15:32:37 +0000 Subject: ChangeLogTag: Mon Mar 06 15:13:12 2006 Johnny Willemsen --- TAO/tao/AnyTypeCode/Any.cpp | 10 +- TAO/tao/AnyTypeCode/Any_Array_Impl_T.cpp | 16 +- TAO/tao/AnyTypeCode/Any_Basic_Impl.cpp | 12 +- TAO/tao/AnyTypeCode/Any_Basic_Impl_T.cpp | 18 +- TAO/tao/AnyTypeCode/Any_Dual_Impl_T.cpp | 10 +- TAO/tao/AnyTypeCode/Any_Impl_T.cpp | 12 +- TAO/tao/AnyTypeCode/Any_Special_Impl_T.cpp | 14 +- TAO/tao/AnyTypeCode/Any_SystemException.cpp | 26 +-- TAO/tao/AnyTypeCode/Any_Unknown_IDL_Type.cpp | 6 +- TAO/tao/AnyTypeCode/Empty_Param_TypeCode.cpp | 8 +- TAO/tao/AnyTypeCode/Enum_TypeCode.cpp | 16 +- TAO/tao/AnyTypeCode/Enum_TypeCode_Static.cpp | 16 +- TAO/tao/AnyTypeCode/ExceptionA.cpp | 10 +- TAO/tao/AnyTypeCode/TypeCode.cpp | 2 +- TAO/tao/AnyTypeCode/TypeCode_CDR_Extraction.cpp | 265 +++++++++++++++--------- TAO/tao/AnyTypeCode/TypeCode_Case_T.cpp | 2 +- TAO/tao/AnyTypeCode/Union_TypeCode.cpp | 49 +++-- TAO/tao/AnyTypeCode/Union_TypeCode_Static.cpp | 50 +++-- TAO/tao/AnyTypeCode/Value_TypeCode.cpp | 56 ++--- TAO/tao/AnyTypeCode/Value_TypeCode_Static.cpp | 56 ++--- 20 files changed, 374 insertions(+), 280 deletions(-) diff --git a/TAO/tao/AnyTypeCode/Any.cpp b/TAO/tao/AnyTypeCode/Any.cpp index 7ed239f9c3d..cc1338b633f 100644 --- a/TAO/tao/AnyTypeCode/Any.cpp +++ b/TAO/tao/AnyTypeCode/Any.cpp @@ -275,7 +275,7 @@ operator>> (TAO_InputCDR &cdr, CORBA::Any &any) if ((cdr >> tc.out ()) == 0) { - return 0; + return false; } ACE_TRY_NEW_ENV @@ -283,7 +283,7 @@ operator>> (TAO_InputCDR &cdr, CORBA::Any &any) TAO::Unknown_IDL_Type *impl = 0; ACE_NEW_RETURN (impl, TAO::Unknown_IDL_Type (tc.in ()), - 0); + false); any.replace (impl); impl->_tao_decode (cdr @@ -292,11 +292,11 @@ operator>> (TAO_InputCDR &cdr, CORBA::Any &any) } ACE_CATCH (CORBA::Exception, ex) { - return 0; + return false; } ACE_ENDTRY; - return 1; + return true; } // ======================================================================= @@ -768,7 +768,7 @@ namespace TAO ) const { _tao_elem = CORBA::Object::_duplicate (this->value_); - return 1; + return true; } } diff --git a/TAO/tao/AnyTypeCode/Any_Array_Impl_T.cpp b/TAO/tao/AnyTypeCode/Any_Array_Impl_T.cpp index eb5bc831afc..ad9c1a3470e 100644 --- a/TAO/tao/AnyTypeCode/Any_Array_Impl_T.cpp +++ b/TAO/tao/AnyTypeCode/Any_Array_Impl_T.cpp @@ -65,14 +65,14 @@ TAO::Any_Array_Impl_T::extract (const CORBA::Any & any, ACE_TRY_NEW_ENV { CORBA::TypeCode_ptr any_tc = any._tao_get_typecode (); - const CORBA::Boolean _tao_equiv = + CORBA::Boolean const _tao_equiv = any_tc->equivalent (tc ACE_ENV_ARG_PARAMETER); ACE_TRY_CHECK; - if (_tao_equiv == 0) + if (_tao_equiv == false) { - return 0; + return false; } TAO::Any_Impl *impl = any.impl (); @@ -84,11 +84,11 @@ TAO::Any_Array_Impl_T::extract (const CORBA::Any & any, if (narrow_impl == 0) { - return 0; + return false; } _tao_elem = reinterpret_cast (narrow_impl->value_); - return 1; + return true; } TAO::Any_Array_Impl_T *replacement = 0; @@ -97,7 +97,7 @@ TAO::Any_Array_Impl_T::extract (const CORBA::Any & any, ARRAY_ANY_IMPL (destructor, any_tc, T_forany::tao_alloc ()), - 0); + false); auto_ptr > replacement_safety ( replacement @@ -111,7 +111,7 @@ TAO::Any_Array_Impl_T::extract (const CORBA::Any & any, // shared by another Any. This copies the state, not the buffer. TAO_InputCDR for_reading (unk->_tao_get_cdr ()); - CORBA::Boolean good_decode = + CORBA::Boolean const good_decode = replacement->demarshal_value (for_reading); if (good_decode) @@ -119,7 +119,7 @@ TAO::Any_Array_Impl_T::extract (const CORBA::Any & any, _tao_elem = reinterpret_cast (replacement->value_); const_cast (any).replace (replacement); replacement_safety.release (); - return 1; + return true; } // Duplicated by Any_Impl base class constructor. diff --git a/TAO/tao/AnyTypeCode/Any_Basic_Impl.cpp b/TAO/tao/AnyTypeCode/Any_Basic_Impl.cpp index a61785783fe..525fdbadbf7 100644 --- a/TAO/tao/AnyTypeCode/Any_Basic_Impl.cpp +++ b/TAO/tao/AnyTypeCode/Any_Basic_Impl.cpp @@ -111,7 +111,7 @@ namespace TAO if (_tao_equiv == 0) { - return 0; + return false; } TAO::Any_Impl *impl = any.impl (); @@ -123,12 +123,12 @@ namespace TAO if (narrow_impl == 0) { - return 0; + return false; } Any_Basic_Impl::assign_value (_tao_elem, narrow_impl); - return 1; + return true; } TAO::Any_Basic_Impl *replacement = @@ -150,7 +150,7 @@ namespace TAO // shared by another Any. This copies the state, not the buffer. TAO_InputCDR for_reading (unk->_tao_get_cdr ()); - CORBA::Boolean good_decode = + CORBA::Boolean const good_decode = replacement->demarshal_value (for_reading, static_cast (tck)); @@ -161,7 +161,7 @@ namespace TAO tck); const_cast (any).replace (replacement); replacement_safety.release (); - return 1; + return true; } // Duplicated by Any_Impl base class constructor. @@ -172,7 +172,7 @@ namespace TAO } ACE_ENDTRY; - return 0; + return false; } CORBA::Boolean diff --git a/TAO/tao/AnyTypeCode/Any_Basic_Impl_T.cpp b/TAO/tao/AnyTypeCode/Any_Basic_Impl_T.cpp index c1a53a33929..d2871693f43 100644 --- a/TAO/tao/AnyTypeCode/Any_Basic_Impl_T.cpp +++ b/TAO/tao/AnyTypeCode/Any_Basic_Impl_T.cpp @@ -56,13 +56,13 @@ TAO::Any_Basic_Impl_T::extract (const CORBA::Any & any, ACE_TRY_NEW_ENV { CORBA::TypeCode_ptr any_tc = any._tao_get_typecode (); - CORBA::Boolean _tao_equiv = any_tc->equivalent (tc - ACE_ENV_ARG_PARAMETER); + CORBA::Boolean const _tao_equiv = any_tc->equivalent (tc + ACE_ENV_ARG_PARAMETER); ACE_TRY_CHECK; - if (_tao_equiv == 0) + if (_tao_equiv == false) { - return 0; + return false; } TAO::Any_Impl *impl = any.impl (); @@ -74,11 +74,11 @@ TAO::Any_Basic_Impl_T::extract (const CORBA::Any & any, if (narrow_impl == 0) { - return 0; + return false; } _tao_elem = narrow_impl->value_; - return 1; + return true; } TAO::Any_Basic_Impl_T *replacement = @@ -94,7 +94,7 @@ TAO::Any_Basic_Impl_T::extract (const CORBA::Any & any, // shared by another Any. This copies the state, not the buffer. TAO_InputCDR for_reading (unk->_tao_get_cdr ()); - CORBA::Boolean good_decode = + CORBA::Boolean const good_decode = replacement->demarshal_value (for_reading); if (good_decode) @@ -102,7 +102,7 @@ TAO::Any_Basic_Impl_T::extract (const CORBA::Any & any, _tao_elem = replacement->value_; const_cast (any).replace (replacement); replacement_safety.release (); - return 1; + return true; } // Duplicated by Any_Impl base class constructor. @@ -113,7 +113,7 @@ TAO::Any_Basic_Impl_T::extract (const CORBA::Any & any, } ACE_ENDTRY; - return 0; + return false; } template diff --git a/TAO/tao/AnyTypeCode/Any_Dual_Impl_T.cpp b/TAO/tao/AnyTypeCode/Any_Dual_Impl_T.cpp index e8613b6b3e8..59aded80015 100644 --- a/TAO/tao/AnyTypeCode/Any_Dual_Impl_T.cpp +++ b/TAO/tao/AnyTypeCode/Any_Dual_Impl_T.cpp @@ -110,7 +110,7 @@ TAO::Any_Dual_Impl_T::extract (const CORBA::Any & any, if (_tao_equiv == 0) { - return 0; + return false; } TAO::Any_Impl *impl = any.impl (); @@ -122,11 +122,11 @@ TAO::Any_Dual_Impl_T::extract (const CORBA::Any & any, if (narrow_impl == 0) { - return 0; + return false; } _tao_elem = narrow_impl->value_; - return 1; + return true; } T *empty_value = 0; @@ -150,7 +150,7 @@ TAO::Any_Dual_Impl_T::extract (const CORBA::Any & any, // shared by another Any. This copies the state, not the buffer. TAO_InputCDR for_reading (unk->_tao_get_cdr ()); - CORBA::Boolean good_decode = + CORBA::Boolean const good_decode = replacement->demarshal_value (for_reading); if (good_decode) @@ -158,7 +158,7 @@ TAO::Any_Dual_Impl_T::extract (const CORBA::Any & any, _tao_elem = replacement->value_; const_cast (any).replace (replacement); replacement_safety.release (); - return 1; + return true; } // Duplicated by Any_Impl base class constructor. diff --git a/TAO/tao/AnyTypeCode/Any_Impl_T.cpp b/TAO/tao/AnyTypeCode/Any_Impl_T.cpp index c0e8104cf70..d4afd38e237 100644 --- a/TAO/tao/AnyTypeCode/Any_Impl_T.cpp +++ b/TAO/tao/AnyTypeCode/Any_Impl_T.cpp @@ -69,7 +69,7 @@ TAO::Any_Impl_T::extract (const CORBA::Any & any, if (_tao_equiv == 0) { - return 0; + return false; } TAO::Any_Impl *impl = any.impl (); @@ -81,11 +81,11 @@ TAO::Any_Impl_T::extract (const CORBA::Any & any, if (narrow_impl == 0) { - return 0; + return false; } _tao_elem = (T *) narrow_impl->value_; - return 1; + return true; } TAO::Any_Impl_T *replacement = 0; @@ -93,7 +93,7 @@ TAO::Any_Impl_T::extract (const CORBA::Any & any, TAO::Any_Impl_T (destructor, any_tc, 0), - 0); + false); auto_ptr > replacement_safety (replacement); @@ -105,7 +105,7 @@ TAO::Any_Impl_T::extract (const CORBA::Any & any, // shared by another Any. This copies the state, not the buffer. TAO_InputCDR for_reading (unk->_tao_get_cdr ()); - CORBA::Boolean good_decode = + CORBA::Boolean const good_decode = replacement->demarshal_value (for_reading); if (good_decode) @@ -113,7 +113,7 @@ TAO::Any_Impl_T::extract (const CORBA::Any & any, _tao_elem = const_cast (replacement->value_); const_cast (any).replace (replacement); replacement_safety.release (); - return 1; + return true; } // Duplicated by Any_Impl base class constructor. diff --git a/TAO/tao/AnyTypeCode/Any_Special_Impl_T.cpp b/TAO/tao/AnyTypeCode/Any_Special_Impl_T.cpp index 0ec2bd72b5c..544e89127d3 100644 --- a/TAO/tao/AnyTypeCode/Any_Special_Impl_T.cpp +++ b/TAO/tao/AnyTypeCode/Any_Special_Impl_T.cpp @@ -103,7 +103,7 @@ TAO::Any_Special_Impl_T::extract (const CORBA::Any & any, if (any_kind != try_kind) { - return 0; + return false; } CORBA::ULong length = @@ -112,7 +112,7 @@ TAO::Any_Special_Impl_T::extract (const CORBA::Any & any, if (length != bound) { - return 0; + return false; } TAO::Any_Impl *impl = any.impl (); @@ -127,11 +127,11 @@ TAO::Any_Special_Impl_T::extract (const CORBA::Any & any, if (narrow_impl == 0) { - return 0; + return false; } _tao_elem = (T *) narrow_impl->value_; - return 1; + return true; } TAO::Any_Special_Impl_T *replacement = 0; @@ -140,7 +140,7 @@ TAO::Any_Special_Impl_T::extract (const CORBA::Any & any, tc, 0, bound), - 0); + false); auto_ptr > replacement_safety ( replacement @@ -154,7 +154,7 @@ TAO::Any_Special_Impl_T::extract (const CORBA::Any & any, // shared by another Any. This copies the state, not the buffer. TAO_InputCDR for_reading (unk->_tao_get_cdr ()); - CORBA::Boolean good_decode = + CORBA::Boolean const good_decode = replacement->demarshal_value (for_reading); if (good_decode) @@ -162,7 +162,7 @@ TAO::Any_Special_Impl_T::extract (const CORBA::Any & any, _tao_elem = replacement->value_; const_cast (any).replace (replacement); replacement_safety.release (); - return 1; + return true; } // Duplicated by Any_Impl base class constructor. diff --git a/TAO/tao/AnyTypeCode/Any_SystemException.cpp b/TAO/tao/AnyTypeCode/Any_SystemException.cpp index 654ea1a376d..10b16c4f411 100644 --- a/TAO/tao/AnyTypeCode/Any_SystemException.cpp +++ b/TAO/tao/AnyTypeCode/Any_SystemException.cpp @@ -92,13 +92,13 @@ TAO::Any_SystemException::extract (const CORBA::Any & any, ACE_TRY_NEW_ENV { CORBA::TypeCode_ptr any_tc = any._tao_get_typecode (); - CORBA::Boolean _tao_equiv = any_tc->equivalent (tc - ACE_ENV_ARG_PARAMETER); + CORBA::Boolean const _tao_equiv = any_tc->equivalent (tc + ACE_ENV_ARG_PARAMETER); ACE_TRY_CHECK; - if (_tao_equiv == 0) + if (_tao_equiv == false) { - return 0; + return false; } TAO::Any_Impl *impl = any.impl (); @@ -110,11 +110,11 @@ TAO::Any_SystemException::extract (const CORBA::Any & any, if (narrow_impl == 0) { - return 0; + return false; } _tao_elem = narrow_impl->value_; - return 1; + return true; } CORBA::SystemException *empty_value = (*f) (); @@ -124,7 +124,7 @@ TAO::Any_SystemException::extract (const CORBA::Any & any, TAO::Any_SystemException (destructor, any_tc, empty_value), - 0); + false); auto_ptr replacement_safety (replacement); @@ -136,7 +136,7 @@ TAO::Any_SystemException::extract (const CORBA::Any & any, // shared by another Any. This copies the state, not the buffer. TAO_InputCDR for_reading (unk->_tao_get_cdr ()); - CORBA::Boolean good_decode = + CORBA::Boolean const good_decode = replacement->demarshal_value (for_reading); if (good_decode) @@ -144,7 +144,7 @@ TAO::Any_SystemException::extract (const CORBA::Any & any, _tao_elem = replacement->value_; const_cast (any).replace (replacement); replacement_safety.release (); - return 1; + return true; } } ACE_CATCHANY @@ -181,13 +181,13 @@ TAO::Any_SystemException::marshal_value (TAO_OutputCDR &cdr) this->value_->_tao_encode (cdr ACE_ENV_ARG_PARAMETER); ACE_TRY_CHECK; - return 1; + return true; } ACE_CATCHANY { } ACE_ENDTRY; - return 0; + return false; } CORBA::Boolean @@ -198,13 +198,13 @@ TAO::Any_SystemException::demarshal_value (TAO_InputCDR &cdr) this->value_->_tao_decode (cdr ACE_ENV_ARG_PARAMETER); ACE_TRY_CHECK; - return 1; + return true; } ACE_CATCHANY { } ACE_ENDTRY; - return 0; + return false; } TAO_END_VERSIONED_NAMESPACE_DECL diff --git a/TAO/tao/AnyTypeCode/Any_Unknown_IDL_Type.cpp b/TAO/tao/AnyTypeCode/Any_Unknown_IDL_Type.cpp index bd1751f3f76..980b311f802 100644 --- a/TAO/tao/AnyTypeCode/Any_Unknown_IDL_Type.cpp +++ b/TAO/tao/AnyTypeCode/Any_Unknown_IDL_Type.cpp @@ -67,16 +67,16 @@ TAO::Unknown_IDL_Type::marshal_value (TAO_OutputCDR &cdr) if (status != TAO::TRAVERSE_CONTINUE) { - return 0; + return false; } } ACE_CATCH (CORBA::Exception, ex) { - return 0; + return false; } ACE_ENDTRY; - return 1; + return true; } const void * diff --git a/TAO/tao/AnyTypeCode/Empty_Param_TypeCode.cpp b/TAO/tao/AnyTypeCode/Empty_Param_TypeCode.cpp index 2f81ff16811..df85c18930a 100644 --- a/TAO/tao/AnyTypeCode/Empty_Param_TypeCode.cpp +++ b/TAO/tao/AnyTypeCode/Empty_Param_TypeCode.cpp @@ -46,7 +46,7 @@ TAO::TypeCode::Empty_Param::equal_i (CORBA::TypeCode_ptr // Equality has already been established in the // CORBA::TypeCode base class. - return 1; + return true; } CORBA::Boolean @@ -62,12 +62,12 @@ TAO::TypeCode::Empty_Param::equivalent_i (CORBA::TypeCode_ptr tc CORBA::TCKind const tc_kind = TAO::unaliased_kind (tc ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); if (tc_kind != this->kind_) - return 0; + return false; - return 1; + return true; } CORBA::TypeCode_ptr diff --git a/TAO/tao/AnyTypeCode/Enum_TypeCode.cpp b/TAO/tao/AnyTypeCode/Enum_TypeCode.cpp index 607c0c3fe6c..b84a50f9b72 100644 --- a/TAO/tao/AnyTypeCode/Enum_TypeCode.cpp +++ b/TAO/tao/AnyTypeCode/Enum_TypeCode.cpp @@ -90,10 +90,10 @@ TAO::TypeCode::Enummember_count (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); if (tc_nenumerators != this->nenumerators_) - return 0; + return false; for (CORBA::ULong i = 0; i < this->nenumerators_; ++i) { @@ -103,13 +103,13 @@ TAO::TypeCode::Enum::get_string (lhs_enumerator); char const * const rhs_name = tc->member_name (i ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); if (ACE_OS::strcmp (lhs_name, rhs_name) != 0) - return 0; + return false; } - return 1; + return true; } template @@ -125,12 +125,12 @@ TAO::TypeCode::Enummember_count (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); if (tc_nenumerators != this->nenumerators_) - return 0; + return false; - return 1; + return true; } template diff --git a/TAO/tao/AnyTypeCode/Enum_TypeCode_Static.cpp b/TAO/tao/AnyTypeCode/Enum_TypeCode_Static.cpp index 4393fc10be6..64cd8f00d37 100644 --- a/TAO/tao/AnyTypeCode/Enum_TypeCode_Static.cpp +++ b/TAO/tao/AnyTypeCode/Enum_TypeCode_Static.cpp @@ -87,10 +87,10 @@ TAO::TypeCode::Enummember_count (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); if (tc_nenumerators != this->nenumerators_) - return 0; + return false; for (CORBA::ULong i = 0; i < this->nenumerators_; ++i) { @@ -100,13 +100,13 @@ TAO::TypeCode::Enum::get_string (lhs_enumerator); char const * const rhs_name = tc->member_name (i ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); if (ACE_OS::strcmp (lhs_name, rhs_name) != 0) - return 0; + return false; } - return 1; + return true; } CORBA::Boolean @@ -121,12 +121,12 @@ TAO::TypeCode::Enummember_count (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); if (tc_nenumerators != this->nenumerators_) - return 0; + return false; - return 1; + return true; } CORBA::TypeCode_ptr diff --git a/TAO/tao/AnyTypeCode/ExceptionA.cpp b/TAO/tao/AnyTypeCode/ExceptionA.cpp index 4419a1e080b..19fb7d2aa3f 100644 --- a/TAO/tao/AnyTypeCode/ExceptionA.cpp +++ b/TAO/tao/AnyTypeCode/ExceptionA.cpp @@ -44,14 +44,14 @@ namespace TAO ACE_ENV_ARG_PARAMETER); ACE_TRY_CHECK; - return 1; + return true; } ACE_CATCHANY { } ACE_ENDTRY; - return 0; + return false; } template<> @@ -64,14 +64,14 @@ namespace TAO ACE_ENV_ARG_PARAMETER); ACE_TRY_CHECK; - return 1; + return true; } ACE_CATCHANY { } ACE_ENDTRY; - return 0; + return false; } // This should never get called since we don't have extraction operators @@ -87,7 +87,7 @@ namespace TAO const CORBA::Exception *& ) { - return 0; + return false; } } diff --git a/TAO/tao/AnyTypeCode/TypeCode.cpp b/TAO/tao/AnyTypeCode/TypeCode.cpp index b00f394c1f0..6b13533dde8 100644 --- a/TAO/tao/AnyTypeCode/TypeCode.cpp +++ b/TAO/tao/AnyTypeCode/TypeCode.cpp @@ -333,7 +333,7 @@ CORBA::TypeCode::BadKind::_downcast (CORBA::Exception *ex) CORBA::Exception * CORBA::TypeCode::BadKind::_tao_duplicate (void) const { - CORBA::Exception *result; + CORBA::Exception *result = 0; ACE_NEW_RETURN (result, CORBA::TypeCode::BadKind (*this), 0); diff --git a/TAO/tao/AnyTypeCode/TypeCode_CDR_Extraction.cpp b/TAO/tao/AnyTypeCode/TypeCode_CDR_Extraction.cpp index 51063cf07c8..7f6492d8bf4 100644 --- a/TAO/tao/AnyTypeCode/TypeCode_CDR_Extraction.cpp +++ b/TAO/tao/AnyTypeCode/TypeCode_CDR_Extraction.cpp @@ -105,7 +105,7 @@ namespace TAO::TypeCodeFactory::TC_Info_List & infos); bool find_recursive_tc (char const * id, - CORBA::TypeCode_ptr & tc, + TAO::TypeCodeFactory::TC_Info_List & tcs, TAO::TypeCodeFactory::TC_Info_List & infos) { // See comments above for rationale behind using an array instead @@ -119,12 +119,18 @@ namespace if (ACE_OS::strcmp (info.id, id) == 0) { - tc = info.type; - return true; + // We have a mathing id, so store the typecode in the out array + // and then compare the others. + size_t const old_size = tcs.size (); + if (tcs.size (old_size + 1) == -1) // Incremental growth -- *sigh* + return false; + + TAO::TypeCodeFactory::TC_Info & new_info = tcs[old_size]; + new_info.type = info.type; } } - return false; + return (tcs.size () > 0) ; } } @@ -409,7 +415,8 @@ TAO::TypeCodeFactory::tc_struct_factory (CORBA::TCKind kind, // Check if struct TypeCode is recursive. - if (kind == CORBA::tk_struct && find_recursive_tc (id.in (), tc, infos)) + TAO::TypeCodeFactory::TC_Info_List recursive_tc; + if (kind == CORBA::tk_struct && find_recursive_tc (id.in (), recursive_tc, infos)) { // Set remaining parameters. @@ -418,14 +425,23 @@ TAO::TypeCodeFactory::tc_struct_factory (CORBA::TCKind kind, member_array_type> recursive_typecode_type; - recursive_typecode_type * const rtc = - dynamic_cast (tc); + size_t const len = recursive_tc.size (); + + for (size_t i = 0; i < len; ++i) + { + TAO::TypeCodeFactory::TC_Info & info = recursive_tc[i]; + + recursive_typecode_type * const rtc = + dynamic_cast (info.type); - ACE_ASSERT (rtc); + ACE_ASSERT (rtc); - rtc->struct_parameters (name.in (), - fields, - nfields); + rtc->struct_parameters (name.in (), + fields, + nfields); + } + + tc = recursive_tc[0].type; } else { @@ -496,7 +512,7 @@ TAO::TypeCodeFactory::tc_union_factory (CORBA::TCKind /* kind */, { elem_type & member = cases[i]; - TAO::TypeCode::Case * the_case; + TAO::TypeCode::Case * the_case = 0; // Ugly. *sigh* switch (discriminant_kind) @@ -647,8 +663,9 @@ TAO::TypeCodeFactory::tc_union_factory (CORBA::TCKind /* kind */, case_array_type, TAO::True_RefCount_Policy> typecode_type; - // Check if union TypeCode is recursive. - if (find_recursive_tc (id.in (), tc, infos)) + // Check if we have recursive members, this could be multiple + TAO::TypeCodeFactory::TC_Info_List recursive_tc; + if (find_recursive_tc (id.in (), recursive_tc, infos)) { // Set remaining parameters. @@ -657,16 +674,25 @@ TAO::TypeCodeFactory::tc_union_factory (CORBA::TCKind /* kind */, case_array_type> recursive_typecode_type; - recursive_typecode_type * const rtc = - dynamic_cast (tc); + size_t const len = recursive_tc.size (); + + for (size_t i = 0; i < len; ++i) + { + TAO::TypeCodeFactory::TC_Info & info = recursive_tc[i]; + + recursive_typecode_type * const rtc = + dynamic_cast (info.type); - ACE_ASSERT (rtc); + ACE_ASSERT (rtc); - rtc->union_parameters (name.in (), - discriminant_type, - cases, // Will be copied. - ncases, - default_index); + rtc->union_parameters (name.in (), + discriminant_type, + cases, // Will be copied. + ncases, + default_index); + } + + tc = recursive_tc[0].type; } else { @@ -993,7 +1019,8 @@ TAO::TypeCodeFactory::tc_value_factory (CORBA::TCKind kind, TAO::True_RefCount_Policy> typecode_type; // Check if valuetype/eventtype TypeCode is recursive. - if (find_recursive_tc (id.in (), tc, infos)) + TAO::TypeCodeFactory::TC_Info_List recursive_tc; + if (find_recursive_tc (id.in (), recursive_tc, infos)) { // Set remaining parameters. @@ -1002,16 +1029,24 @@ TAO::TypeCodeFactory::tc_value_factory (CORBA::TCKind kind, member_array_type> recursive_typecode_type; - recursive_typecode_type * const rtc = - dynamic_cast (tc); + size_t const len = recursive_tc.size (); + + for (size_t i = 0; i < len; ++i) + { + TAO::TypeCodeFactory::TC_Info & info = recursive_tc[i]; + + recursive_typecode_type * const rtc = + dynamic_cast (info.type); - ACE_ASSERT (rtc); + ACE_ASSERT (rtc); - rtc->valuetype_parameters (name.in (), - type_modifier, - concrete_base, - fields, // Will be copied. - nfields); + rtc->valuetype_parameters (name.in (), + type_modifier, + concrete_base, + fields, // Will be copied. + nfields); + } + tc = recursive_tc[0].type; } else { @@ -1223,94 +1258,132 @@ namespace // Don't bother demarshaling the rest of the parameters. They will // be handled by the top-level TypeCode demarshaling call. + bool new_tc = false; switch (kind) { case CORBA::tk_struct: { - typedef ACE_Array_Base< - TAO::TypeCode::Struct_Field< - CORBA::String_var, - CORBA::TypeCode_var> > member_array_type; - - typedef TAO::TypeCode::Struct< - CORBA::String_var, - CORBA::TypeCode_var, - member_array_type, - TAO::True_RefCount_Policy> typecode_type; - - typedef TAO::TypeCode::Recursive_Type - recursive_typecode_type; - - ACE_NEW_RETURN (tc, - recursive_typecode_type (kind, - id.in ()), - false); + // Check if we already have a tc for this type, if yes, use that + TAO::TypeCodeFactory::TC_Info_List recursive_tc; + if (find_recursive_tc (id.in (), recursive_tc, infos)) + { + tc = recursive_tc[0].type; + } + else + { + new_tc = true; + + typedef ACE_Array_Base< + TAO::TypeCode::Struct_Field< + CORBA::String_var, + CORBA::TypeCode_var> > member_array_type; + + typedef TAO::TypeCode::Struct< + CORBA::String_var, + CORBA::TypeCode_var, + member_array_type, + TAO::True_RefCount_Policy> typecode_type; + + typedef TAO::TypeCode::Recursive_Type + recursive_typecode_type; + + ACE_NEW_RETURN (tc, + recursive_typecode_type (kind, + id.in ()), + false); + } } break; case CORBA::tk_union: { - typedef union_case_array_type member_array_type; - - typedef TAO::TypeCode::Union< - CORBA::String_var, - CORBA::TypeCode_var, - member_array_type, - TAO::True_RefCount_Policy> typecode_type; - - typedef TAO::TypeCode::Recursive_Type - recursive_typecode_type; - - ACE_NEW_RETURN (tc, - recursive_typecode_type (kind, - id.in ()), - false); + // Check if we already have a tc for this type, if yes, use that + TAO::TypeCodeFactory::TC_Info_List recursive_tc; + if (find_recursive_tc (id.in (), recursive_tc, infos)) + { + tc = recursive_tc[0].type; + } + else + { + new_tc = true; + + typedef union_case_array_type member_array_type; + + typedef TAO::TypeCode::Union< + CORBA::String_var, + CORBA::TypeCode_var, + member_array_type, + TAO::True_RefCount_Policy> typecode_type; + + typedef TAO::TypeCode::Recursive_Type + recursive_typecode_type; + + ACE_NEW_RETURN (tc, + recursive_typecode_type (kind, + id.in ()), + false); + } } break; case CORBA::tk_value: case CORBA::tk_event: { - typedef ACE_Array_Base< - TAO::TypeCode::Value_Field< - CORBA::String_var, - CORBA::TypeCode_var> > member_array_type; - - typedef TAO::TypeCode::Value< - CORBA::String_var, - CORBA::TypeCode_var, - member_array_type, - TAO::True_RefCount_Policy> typecode_type; - - typedef TAO::TypeCode::Recursive_Type - recursive_typecode_type; - - ACE_NEW_RETURN (tc, - recursive_typecode_type (kind, - id.in ()), - false); + // Check if we already have a tc for this type, if yes, use that + TAO::TypeCodeFactory::TC_Info_List recursive_tc; + if (find_recursive_tc (id.in (), recursive_tc, infos)) + { + tc = recursive_tc[0].type; + } + else + { + new_tc = true; + + typedef ACE_Array_Base< + TAO::TypeCode::Value_Field< + CORBA::String_var, + CORBA::TypeCode_var> > member_array_type; + + typedef TAO::TypeCode::Value< + CORBA::String_var, + CORBA::TypeCode_var, + member_array_type, + TAO::True_RefCount_Policy> typecode_type; + + typedef TAO::TypeCode::Recursive_Type + recursive_typecode_type; + + ACE_NEW_RETURN (tc, + recursive_typecode_type (kind, + id.in ()), + false); + } } break; default: return false; // We should never get here. }; - size_t const old_size = infos.size (); - if (infos.size (old_size + 1) == -1) // Incremental growth -- *sigh* - return false; + // Only when we created a new tc add it to the list. + if (new_tc) + { + size_t const old_size = infos.size (); + if (infos.size (old_size + 1) == -1) // Incremental growth -- *sigh* + return false; - TAO::TypeCodeFactory::TC_Info & info = infos[old_size]; + TAO::TypeCodeFactory::TC_Info & info = infos[old_size]; - ACE_DECLARE_NEW_CORBA_ENV; - info.id = tc->id (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK_RETURN (false); // Should never throw! + ACE_DECLARE_NEW_CORBA_ENV; + info.id = tc->id (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK_RETURN (false); // Should never throw! - info.type = tc; + info.type = tc; + } return true; } diff --git a/TAO/tao/AnyTypeCode/TypeCode_Case_T.cpp b/TAO/tao/AnyTypeCode/TypeCode_Case_T.cpp index b86f24bd423..1059713ccff 100644 --- a/TAO/tao/AnyTypeCode/TypeCode_Case_T.cpp +++ b/TAO/tao/AnyTypeCode/TypeCode_Case_T.cpp @@ -144,7 +144,7 @@ TAO::TypeCode::Case_T::label (ACE_ENV_SINGLE_ARG_DECL) const { - CORBA::Any * value; + CORBA::Any * value = 0; ACE_NEW_THROW_EX (value, CORBA::Any, diff --git a/TAO/tao/AnyTypeCode/Union_TypeCode.cpp b/TAO/tao/AnyTypeCode/Union_TypeCode.cpp index c395f1eca23..9e15686eb18 100644 --- a/TAO/tao/AnyTypeCode/Union_TypeCode.cpp +++ b/TAO/tao/AnyTypeCode/Union_TypeCode.cpp @@ -58,11 +58,22 @@ TAO::TypeCode::Unionncases_; ++i) { + TAO_OutputCDR case_enc; + offset = ACE_align_binary (offset, + ACE_CDR::LONG_ALIGN); + case_type const & c = *this->cases_[i]; - if (!c.marshal (enc, offset + enc.total_length ())) + if (!c.marshal (case_enc, offset)) + return false; + + offset += case_enc.total_length (); + + if (!enc.write_octet_array_mb (case_enc.begin ())) return false; } @@ -116,28 +127,28 @@ TAO::TypeCode::Unionmember_count (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); CORBA::Long tc_def = tc->default_index (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); if (tc_count != this->ncases_ || tc_def != this->default_index_) - return 0; + return false; // Check the discriminator type. CORBA::TypeCode_var tc_discriminator = tc->discriminator_type (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); CORBA::Boolean const equal_discriminators = Traits::get_typecode (this->discriminant_type_)->equal ( tc_discriminator.in () ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); if (!equal_discriminators) - return 0; + return false; for (CORBA::ULong i = 0; i < this->ncases_; ++i) { @@ -156,13 +167,13 @@ TAO::TypeCode::Unionmember_count (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); CORBA::Long tc_def = tc->default_index (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); if (tc_count != this->ncases_ || tc_def != this->default_index_) - return 0; + return false; CORBA::TypeCode_var tc_discriminator = tc->discriminator_type (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); CORBA::Boolean const equiv_discriminators = Traits::get_typecode (this->discriminant_type_)->equivalent ( tc_discriminator.in () ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); if (!equiv_discriminators) - return 0; + return false; for (CORBA::ULong i = 0; i < this->ncases_; ++i) { @@ -221,13 +232,13 @@ TAO::TypeCode::Unionncases_; ++i) + for (CORBA::ULong i = 0; i < this->ncases_; ++i) { + TAO_OutputCDR case_enc; + offset = ACE_align_binary (offset, + ACE_CDR::LONG_ALIGN); case_type const & c = *this->cases_[i]; - if (!c.marshal (enc, offset + enc.total_length ())) + if (!c.marshal (case_enc, offset)) + return false; + + offset += case_enc.total_length (); + + if (!enc.write_octet_array_mb (case_enc.begin ())) return false; } @@ -107,28 +117,28 @@ TAO::TypeCode::Unionmember_count (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); CORBA::Long tc_def = tc->default_index (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); if (tc_count != this->ncases_ || tc_def != this->default_index_) - return 0; + return false; // Check the discriminator type. CORBA::TypeCode_var tc_discriminator = tc->discriminator_type (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); CORBA::Boolean const equal_discriminators = Traits::get_typecode (this->discriminant_type_)->equal ( tc_discriminator.in () ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); if (!equal_discriminators) - return 0; + return false; for (CORBA::ULong i = 0; i < this->ncases_; ++i) { @@ -147,13 +157,13 @@ TAO::TypeCode::Unionmember_count (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); CORBA::Long tc_def = tc->default_index (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); if (tc_count != this->ncases_ || tc_def != this->default_index_) - return 0; + return false; CORBA::TypeCode_var tc_discriminator = tc->discriminator_type (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); CORBA::Boolean const equiv_discriminators = Traits::get_typecode (this->discriminant_type_)->equivalent ( tc_discriminator.in () ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); if (!equiv_discriminators) - return 0; + return false; for (CORBA::ULong i = 0; i < this->ncases_; ++i) { @@ -209,13 +219,13 @@ TAO::TypeCode::Uniontype_modifier (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); if (tc_type_modifier != this->type_modifier_) - return 0; + return false; CORBA::TypeCode_var rhs_concrete_base_type = tc->concrete_base_type (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); CORBA::Boolean const equal_concrete_base_types = this->equal (rhs_concrete_base_type.in () ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); if (!equal_concrete_base_types) - return 0; + return false; CORBA::ULong const tc_nfields = tc->member_count (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); if (tc_nfields != this->nfields_) - return 0; + return false; for (CORBA::ULong i = 0; i < this->nfields_; ++i) { @@ -158,37 +158,37 @@ TAO::TypeCode::Valuemember_visibility (i ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); if (lhs_visibility != rhs_visibility) - return 0; + return false; char const * const lhs_name = Traits::get_string (lhs_field.name);; char const * const rhs_name = tc->member_name (i ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); if (ACE_OS::strcmp (lhs_name, rhs_name) != 0) - return 0; + return false; CORBA::TypeCode_ptr const lhs_tc = Traits::get_typecode (lhs_field.type); CORBA::TypeCode_var const rhs_tc = tc->member_type (i ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); CORBA::Boolean const equal_members = lhs_tc->equal (rhs_tc.in () ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); if (!equal_members) - return 0; + return false; } - return 1; + return true; } template type_modifier (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); if (tc_type_modifier != this->type_modifier_) - return 0; + return false; CORBA::TypeCode_var rhs_concrete_base_type = tc->concrete_base_type (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); CORBA::Boolean const equivalent_concrete_base_types = this->equivalent (rhs_concrete_base_type.in () ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); if (!equivalent_concrete_base_types) - return 0; + return false; // Perform a structural comparison, excluding the name() and // member_name() operations. CORBA::ULong const tc_nfields = tc->member_count (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); if (tc_nfields != this->nfields_) - return 0; + return false; for (CORBA::ULong i = 0; i < this->nfields_; ++i) { @@ -242,28 +242,28 @@ TAO::TypeCode::Valuemember_visibility (i ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); if (lhs_visibility != rhs_visibility) - return 0; + return false; CORBA::TypeCode_ptr const lhs_tc = Traits::get_typecode (lhs_field.type); CORBA::TypeCode_var const rhs_tc = tc->member_type (i ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); CORBA::Boolean const equiv_types = lhs_tc->equivalent (rhs_tc.in () ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); if (!equiv_types) - return 0; + return false; } - return 1; + return true; } template type_modifier (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); if (tc_type_modifier != this->type_modifier_) - return 0; + return false; CORBA::TypeCode_var rhs_concrete_base_type = tc->concrete_base_type (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); CORBA::Boolean const equal_concrete_base_types = this->equal (rhs_concrete_base_type.in () ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); if (!equal_concrete_base_types) - return 0; + return false; CORBA::ULong const tc_nfields = tc->member_count (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); if (tc_nfields != this->nfields_) - return 0; + return false; for (CORBA::ULong i = 0; i < this->nfields_; ++i) { @@ -149,37 +149,37 @@ TAO::TypeCode::Valuemember_visibility (i ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); if (lhs_visibility != rhs_visibility) - return 0; + return false; char const * const lhs_name = Traits::get_string (lhs_field.name);; char const * const rhs_name = tc->member_name (i ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); if (ACE_OS::strcmp (lhs_name, rhs_name) != 0) - return 0; + return false; CORBA::TypeCode_ptr const lhs_tc = Traits::get_typecode (lhs_field.type); CORBA::TypeCode_var const rhs_tc = tc->member_type (i ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); CORBA::Boolean const equal_members = lhs_tc->equal (rhs_tc.in () ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); if (!equal_members) - return 0; + return false; } - return 1; + return true; } CORBA::Boolean @@ -193,32 +193,32 @@ TAO::TypeCode::Valuetype_modifier (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); if (tc_type_modifier != this->type_modifier_) - return 0; + return false; CORBA::TypeCode_var rhs_concrete_base_type = tc->concrete_base_type (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); CORBA::Boolean const equivalent_concrete_base_types = this->equivalent (rhs_concrete_base_type.in () ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); if (!equivalent_concrete_base_types) - return 0; + return false; // Perform a structural comparison, excluding the name() and // member_name() operations. CORBA::ULong const tc_nfields = tc->member_count (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); if (tc_nfields != this->nfields_) - return 0; + return false; for (CORBA::ULong i = 0; i < this->nfields_; ++i) { @@ -231,28 +231,28 @@ TAO::TypeCode::Valuemember_visibility (i ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); if (lhs_visibility != rhs_visibility) - return 0; + return false; CORBA::TypeCode_ptr const lhs_tc = Traits::get_typecode (lhs_field.type); CORBA::TypeCode_var const rhs_tc = tc->member_type (i ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); CORBA::Boolean const equiv_types = lhs_tc->equivalent (rhs_tc.in () ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_CHECK_RETURN (false); if (!equiv_types) - return 0; + return false; } - return 1; + return true; } CORBA::TypeCode_ptr -- cgit v1.2.1