diff options
author | Ossama Othman <ossama-othman@users.noreply.github.com> | 2005-03-25 12:52:05 +0000 |
---|---|---|
committer | Ossama Othman <ossama-othman@users.noreply.github.com> | 2005-03-25 12:52:05 +0000 |
commit | da8d284ed547e2d8766859e89c1ba03ceb56443a (patch) | |
tree | 603beebc37c91baf9781fb847814a6e5657d5ca0 | |
parent | c917cf0c31a885c6da92106fb95d59819818b2da (diff) | |
download | ATCD-da8d284ed547e2d8766859e89c1ba03ceb56443a.tar.gz |
*** empty log message ***
-rw-r--r-- | TAO/tao/Alias_TypeCode.cpp | 10 | ||||
-rw-r--r-- | TAO/tao/Alias_TypeCode.h | 9 | ||||
-rw-r--r-- | TAO/tao/Alias_TypeCode.inl | 4 | ||||
-rw-r--r-- | TAO/tao/Enum_TypeCode.cpp | 17 | ||||
-rw-r--r-- | TAO/tao/Enum_TypeCode.h | 3 | ||||
-rw-r--r-- | TAO/tao/Objref_TypeCode.h | 1 | ||||
-rw-r--r-- | TAO/tao/Sequence_TypeCode.h | 5 | ||||
-rw-r--r-- | TAO/tao/TypeCode.cpp | 24 | ||||
-rw-r--r-- | TAO/tao/TypeCode.h | 2 | ||||
-rw-r--r-- | TAO/tao/TypeCodeFactory_Adapter.h | 23 | ||||
-rw-r--r-- | TAO/tao/TypeCode_Case.cpp | 1 | ||||
-rw-r--r-- | TAO/tao/TypeCode_Case.h | 7 | ||||
-rw-r--r-- | TAO/tao/TypeCode_Case.inl | 4 | ||||
-rw-r--r-- | TAO/tao/TypeCode_Default_Case.cpp | 12 | ||||
-rw-r--r-- | TAO/tao/TypeCode_Default_Case.h | 2 | ||||
-rw-r--r-- | TAO/tao/TypeCode_Default_Case.inl | 3 | ||||
-rw-r--r-- | TAO/tao/TypeCode_Enumerator.h | 4 | ||||
-rw-r--r-- | TAO/tao/TypeCode_Non_Default_Case.cpp | 2 | ||||
-rw-r--r-- | TAO/tao/TypeCode_Non_Default_Case.h | 2 | ||||
-rw-r--r-- | TAO/tao/TypeCode_Non_Default_Case.inl | 3 | ||||
-rw-r--r-- | TAO/tao/TypeCode_Struct_Field.h | 2 | ||||
-rw-r--r-- | TAO/tao/Union_TypeCode.cpp | 37 | ||||
-rw-r--r-- | TAO/tao/Union_TypeCode.h | 21 | ||||
-rw-r--r-- | TAO/tao/Union_TypeCode.inl | 37 |
24 files changed, 152 insertions, 83 deletions
diff --git a/TAO/tao/Alias_TypeCode.cpp b/TAO/tao/Alias_TypeCode.cpp index 9e5ce9ad484..89ccc9a47da 100644 --- a/TAO/tao/Alias_TypeCode.cpp +++ b/TAO/tao/Alias_TypeCode.cpp @@ -9,6 +9,10 @@ # include "tao/Alias_TypeCode.inl" #endif /* !__ACE_INLINE__ */ +#include "tao/TypeCodeFactory_Adapter.h" +#include "tao/ORB_Core.h" +#include "ace/Dynamic_Service.h" + template <typename StringType, class RefCountPolicy> TAO::TypeCode::Alias<StringType, RefCountPolicy>::~Alias (void) @@ -20,7 +24,7 @@ TAO::TypeCode::Alias<StringType, RefCountPolicy>::~Alias (void) template <typename StringType, class RefCountPolicy> bool TAO::TypeCode::Alias<StringType, RefCountPolicy>::tao_marshal ( - TAO_OutputCDR &) const + TAO_OutputCDR & cdr) const { // A tk_alias TypeCode has a "complex" parameter list type (see // Table 15-2 in Section 15.3.5.1 "TypeCode" in the CDR section of @@ -122,7 +126,7 @@ CORBA::TypeCode_ptr TAO::TypeCode::Alias<StringType, RefCountPolicy>::get_compact_typecode_i ( ACE_ENV_SINGLE_ARG_DECL) const { - TAO_TypeCodeFactory_Adapter * adapter = + TAO_TypeCodeFactory_Adapter * const adapter = ACE_Dynamic_Service<TAO_TypeCodeFactory_Adapter>::instance ( TAO_ORB_Core::typecodefactory_adapter_name () ); @@ -139,7 +143,7 @@ TAO::TypeCode::Alias<StringType, RefCountPolicy>::get_compact_typecode_i ( ACE_CHECK_RETURN (CORBA::TypeCode::_nil ()); return adapter->create_alias_tc (this->attributes_.id (), - "" /* empty name */ + "", /* empty name */ compact_content_type.in () ACE_ENV_ARG_PARAMETER); } diff --git a/TAO/tao/Alias_TypeCode.h b/TAO/tao/Alias_TypeCode.h index c87afb00f09..4d4357541b0 100644 --- a/TAO/tao/Alias_TypeCode.h +++ b/TAO/tao/Alias_TypeCode.h @@ -23,6 +23,9 @@ # pragma once #endif /* ACE_LACKS_PRAGMA_ONCE */ +#include "tao/TypeCode_Base_Attributes.h" + + namespace TAO { namespace TypeCode @@ -47,7 +50,7 @@ namespace TAO /// Constructor. Alias (char const * id, char const * name, - CORBA::TypeCode_ptr * tc); + CORBA::TypeCode_ptr const * tc); /// Destructor. ~Alias (void); @@ -85,7 +88,7 @@ namespace TAO ACE_ENV_SINGLE_ARG_DECL) const; virtual char const * id_i (ACE_ENV_SINGLE_ARG_DECL) const; virtual char const * name_i (ACE_ENV_SINGLE_ARG_DECL) const; - virtual TypeCode_ptr content_type_i (ACE_ENV_SINGLE_ARG_DECL) const; + virtual CORBA::TypeCode_ptr content_type_i (ACE_ENV_SINGLE_ARG_DECL) const; private: @@ -105,7 +108,7 @@ namespace TAO * @note This @c TypeCode is released upon destruction of this * @c TypeCode::Alias. */ - CORBA::TypeCode_ptr * content_type_; + CORBA::TypeCode_ptr const * content_type_; }; diff --git a/TAO/tao/Alias_TypeCode.inl b/TAO/tao/Alias_TypeCode.inl index e955b596fd7..0b6805d57a5 100644 --- a/TAO/tao/Alias_TypeCode.inl +++ b/TAO/tao/Alias_TypeCode.inl @@ -3,12 +3,12 @@ // $Id$ -template <class RefCountPolicy> +template <typename StringType, class RefCountPolicy> ACE_INLINE TAO::TypeCode::Alias<StringType, RefCountPolicy>::Alias ( char const * id, char const * name, - CORBA::TypeCode_ptr * tc) + CORBA::TypeCode_ptr const * tc) : RefCountPolicy (), attributes_ (id, name), content_type_ (tc) diff --git a/TAO/tao/Enum_TypeCode.cpp b/TAO/tao/Enum_TypeCode.cpp index 976e39a28dd..6ddd437c689 100644 --- a/TAO/tao/Enum_TypeCode.cpp +++ b/TAO/tao/Enum_TypeCode.cpp @@ -4,7 +4,7 @@ #define TAO_ENUM_TYPECODE_CPP #include "tao/Enum_TypeCode.h" -#include "tao/TypeCode_Enumerators.h" +#include "tao/TypeCode_Enumerator.h" #ifndef __ACE_INLINE__ # include "tao/Enum_TypeCode.inl" @@ -210,17 +210,18 @@ TAO::TypeCode::Enum<StringType, this->kind_i (ACE_ENV_SINGLE_ARG_PARAMETER); ACE_CHECK_RETURN (CORBA::TypeCode::_nil ()); - tc = adapter->_tao_create_enum_tc (this_kind, - this->base_attributes_.id (), - "" /* empty name */, - tc_enumerators, - this->nenumerators_ - ACE_ENV_ARG_PARAMETER); + CORBA::TypeCode_var tc = + adapter->_tao_create_enum_tc (this_kind, + this->base_attributes_.id (), + "" /* empty name */, + tc_enumerators, + this->nenumerators_ + ACE_ENV_ARG_PARAMETER); ACE_CHECK_RETURN (CORBA::TypeCode::_nil ()); (void) safe_enumerators.release (); - return tc; + return tc._retn (); } template <typename StringType, class EnumeratorArrayType, class RefCountPolicy> diff --git a/TAO/tao/Enum_TypeCode.h b/TAO/tao/Enum_TypeCode.h index 753d1d8aa91..402b5c67b56 100644 --- a/TAO/tao/Enum_TypeCode.h +++ b/TAO/tao/Enum_TypeCode.h @@ -30,6 +30,7 @@ namespace TAO { namespace TypeCode { + template<typename StringType> class Enumerator; /** * @class Enum @@ -114,7 +115,7 @@ namespace TAO /// Base attributes containing repository ID and name of /// structure type. - Base_Attributes base_attributes_; + Base_Attributes<StringType> base_attributes_; /// The number of enumerators in the OMG IDL enumeration. CORBA::ULong const nenumerators_; diff --git a/TAO/tao/Objref_TypeCode.h b/TAO/tao/Objref_TypeCode.h index cd8629b2fb7..e0129b23f93 100644 --- a/TAO/tao/Objref_TypeCode.h +++ b/TAO/tao/Objref_TypeCode.h @@ -33,7 +33,6 @@ #include "tao/TypeCode_Base_Attributes.h" - namespace TAO { namespace TypeCode diff --git a/TAO/tao/Sequence_TypeCode.h b/TAO/tao/Sequence_TypeCode.h index b1c2efebbdc..5aecaf1e06e 100644 --- a/TAO/tao/Sequence_TypeCode.h +++ b/TAO/tao/Sequence_TypeCode.h @@ -38,8 +38,9 @@ namespace TAO * @c sequence and array types. */ template <class RefCountPolicy> - class Sequence : public CORBA::TypeCode - : private RefCountPolicy + class Sequence + : public CORBA::TypeCode + , private RefCountPolicy { public: diff --git a/TAO/tao/TypeCode.cpp b/TAO/tao/TypeCode.cpp index 9e175252565..92e83d5c2bf 100644 --- a/TAO/tao/TypeCode.cpp +++ b/TAO/tao/TypeCode.cpp @@ -194,6 +194,30 @@ TAO::operator<< (TAO_OutputCDR & cdr, return (cdr << kind) && tc->tao_marshal (cdr); } +bool +TAO::operator>> (TAO_InputCDR & cdr, + CORBA::TypeCode *& tc); + +{ + ACE_DECLARE_NEW_CORBA_ENV; + + TAO_TypeCodeFactory_Adapter * const adapter = + ACE_Dynamic_Service<TAO_TypeCodeFactory_Adapter>::instance ( + TAO_ORB_Core::typecodefactory_adapter_name () + ); + + if (adapter == 0) + { + ACE_THROW_RETURN (CORBA::INTERNAL (), + false); + } + + return adapter->_tao_make_typecode (cdr, tc); + +} + + + CORBA::TypeCode_ptr TAO::unaliased_typecode (CORBA::TypeCode_ptr tc ACE_ENV_ARG_DECL) diff --git a/TAO/tao/TypeCode.h b/TAO/tao/TypeCode.h index 807738aec30..68eb2f24c88 100644 --- a/TAO/tao/TypeCode.h +++ b/TAO/tao/TypeCode.h @@ -483,7 +483,7 @@ namespace TAO { extern TAO_Export bool operator<< (TAO_OutputCDR & cdr, CORBA::TypeCode const * x); - extern TAO_Export bool operator>> (TAO_InputCDR& cdr, + extern TAO_Export bool operator>> (TAO_InputCDR & cdr, CORBA::TypeCode *&x); /// Return the unaliased content @c TypeCode of the given diff --git a/TAO/tao/TypeCodeFactory_Adapter.h b/TAO/tao/TypeCodeFactory_Adapter.h index 820293c8553..8dea5e4c5c4 100644 --- a/TAO/tao/TypeCodeFactory_Adapter.h +++ b/TAO/tao/TypeCodeFactory_Adapter.h @@ -36,6 +36,8 @@ namespace TAO { namespace TypeCode { + template<typename STRING_TYPE> class Case; + template<typename STRING_TYPE> class Enumerator; template<typename STRING_TYPE> class Struct_Field; template<typename STRING_TYPE> class Value_Field; } @@ -211,6 +213,17 @@ public: // Factory methods that has no corresponding TypeCodeFactory IDL, // i.e. it is TAO-specific. + virtual bool _tao_make_typecode (TAO_InputCDR & cdr, + CORBA::TypeCode *& tc); + + virtual CORBA::TypeCode_ptr _tao_create_enum_tc ( + CORBA::TCKind, + char const * id, + char const * name, + TAO::TypeCode::Enumerator<char const *> const *, + CORBA::ULong ncases + ACE_ENV_ARG_DECL) = 0; + virtual CORBA::TypeCode_ptr _tao_create_struct_except_tc ( CORBA::TCKind, char const * id, @@ -219,6 +232,16 @@ public: CORBA::ULong nfields ACE_ENV_ARG_DECL) = 0; + virtual CORBA::TypeCode_ptr _tao_create_union_tc ( + char const * id, + char const * name, + CORBA::TypeCode_ptr * discriminant_type, + TAO::TypeCode::Case<char const *> const *, + CORBA::ULong ncases, + CORBA::Long default_index, + char const * default_case_name, + CORBA::TypeCode_ptr * default_case_type + ACE_ENV_ARG_DECL) = 0; virtual CORBA::TypeCode_ptr _tao_create_value_event_tc ( CORBA::TCKind, diff --git a/TAO/tao/TypeCode_Case.cpp b/TAO/tao/TypeCode_Case.cpp index 5c83263c258..b257c910aa3 100644 --- a/TAO/tao/TypeCode_Case.cpp +++ b/TAO/tao/TypeCode_Case.cpp @@ -11,7 +11,6 @@ template <typename STRING_TYPE> -char const * TAO::TypeCode::Case<STRING_TYPE>::~Case (void) { if (this->type_) diff --git a/TAO/tao/TypeCode_Case.h b/TAO/tao/TypeCode_Case.h index 7b5042b6a14..52a1a35af5b 100644 --- a/TAO/tao/TypeCode_Case.h +++ b/TAO/tao/TypeCode_Case.h @@ -58,7 +58,7 @@ namespace TAO /// Constructor. Case (char const * name, - CORBA::TypeCode_ptr * tc); + CORBA::TypeCode_ptr const * tc); /// Destructor. virtual ~Case (void); @@ -91,7 +91,8 @@ namespace TAO /// Check for equivalence of the @c case attributes contained by /// this class and the corresponding member attributes at index /// "@a index" in the given @c TypeCode @a tc. - bool equivalent (CORBA::TypeCode_ptr tc + bool equivalent (CORBA::ULong index, + CORBA::TypeCode_ptr tc ACE_ENV_ARG_DECL) const; protected: @@ -134,7 +135,7 @@ namespace TAO * @note This @c TypeCode is released upon destruction of this * @c Case. */ - CORBA::TypeCode_ptr * const type_; + CORBA::TypeCode_ptr const * const type_; }; diff --git a/TAO/tao/TypeCode_Case.inl b/TAO/tao/TypeCode_Case.inl index b5e23148d6b..b97d1e718be 100644 --- a/TAO/tao/TypeCode_Case.inl +++ b/TAO/tao/TypeCode_Case.inl @@ -6,10 +6,10 @@ template <typename STRING_TYPE> -ACE_INLINE char const * +ACE_INLINE TAO::TypeCode::Case<STRING_TYPE>::Case ( char const * member_name, - CORBA::TypeCode_ptr * member_type) + CORBA::TypeCode_ptr const * member_type) : name_ (member_name) , type_ (member_type) { diff --git a/TAO/tao/TypeCode_Default_Case.cpp b/TAO/tao/TypeCode_Default_Case.cpp index 8b5b3e450e4..8a7449b51b2 100644 --- a/TAO/tao/TypeCode_Default_Case.cpp +++ b/TAO/tao/TypeCode_Default_Case.cpp @@ -35,13 +35,11 @@ TAO::TypeCode::Default_Case<STRING_TYPE>::marshal_label ( return (cdr << TAO::TypeCode::zero_octet); } -template <typename DISCRIMINATOR_TYPE, typename STRING_TYPE> +template <typename STRING_TYPE> bool -TAO::TypeCode::Default_Case<DISCRIMINATOR_TYPE, - STRING_TYPE>::equal_label ( - CORBA::ULong index - CORBA::TypeCode_ptr tc - ACE_ENV_ARG_DECL) const +TAO::TypeCode::Default_Case<STRING_TYPE>::equal_label (CORBA::ULong index, + CORBA::TypeCode_ptr tc + ACE_ENV_ARG_DECL) const { CORBA::Any_var const any = tc->member_label (index ACE_ENV_ARG_PARAMETER); @@ -52,7 +50,7 @@ TAO::TypeCode::Default_Case<DISCRIMINATOR_TYPE, static CORBA::Octet const this_label = 0; CORBA::Octet tc_label; - if (any.in () >>= CORBA::Any::to_octet (tc_label) + if ((any.in () >>= CORBA::Any::to_octet (tc_label)) && this_label == tc_label) { return true; diff --git a/TAO/tao/TypeCode_Default_Case.h b/TAO/tao/TypeCode_Default_Case.h index 4072da0706f..1b9528fcc62 100644 --- a/TAO/tao/TypeCode_Default_Case.h +++ b/TAO/tao/TypeCode_Default_Case.h @@ -45,7 +45,7 @@ namespace TAO /// Constructor. Default_Case (char const * member_name, - CORBA::TypeCode_ptr * member_type); + CORBA::TypeCode_ptr const * member_type); /** * @name @c TAO::TypeCode::Case Methods diff --git a/TAO/tao/TypeCode_Default_Case.inl b/TAO/tao/TypeCode_Default_Case.inl index 6be34598a97..8b4df509191 100644 --- a/TAO/tao/TypeCode_Default_Case.inl +++ b/TAO/tao/TypeCode_Default_Case.inl @@ -3,10 +3,9 @@ // $Id$ template <typename STRING_TYPE> -ACE_INLINE char const * TAO::TypeCode::Default_Case<STRING_TYPE>::Default_Case ( char const * member_name, - CORBA::TypeCode_ptr * member_type) + CORBA::TypeCode_ptr const * member_type) : Case<STRING_TYPE> (member_name, member_type) { } diff --git a/TAO/tao/TypeCode_Enumerator.h b/TAO/tao/TypeCode_Enumerator.h index 900a622314e..9e75532ecfc 100644 --- a/TAO/tao/TypeCode_Enumerator.h +++ b/TAO/tao/TypeCode_Enumerator.h @@ -87,10 +87,6 @@ namespace TAO } // End namespace TAO -#ifdef __ACE_INLINE__ -# include "tao/TypeCode_Enumerator.inl" -#endif /* __ACE_INLINE__ */ - // If we didn't have to worry about better conversion sequence // warnings, and drop the Enumerator<>::get_name() method, we could // drop the below #include directives and remove the files contained diff --git a/TAO/tao/TypeCode_Non_Default_Case.cpp b/TAO/tao/TypeCode_Non_Default_Case.cpp index ba451c3ad97..8b04c406048 100644 --- a/TAO/tao/TypeCode_Non_Default_Case.cpp +++ b/TAO/tao/TypeCode_Non_Default_Case.cpp @@ -94,7 +94,7 @@ template <typename DISCRIMINATOR_TYPE, typename STRING_TYPE> bool TAO::TypeCode::Non_Default_Case<DISCRIMINATOR_TYPE, STRING_TYPE>::equal_label ( - CORBA::ULong index + CORBA::ULong index, CORBA::TypeCode_ptr tc ACE_ENV_ARG_DECL) const { diff --git a/TAO/tao/TypeCode_Non_Default_Case.h b/TAO/tao/TypeCode_Non_Default_Case.h index 1488fdd61d0..f37dbaeff86 100644 --- a/TAO/tao/TypeCode_Non_Default_Case.h +++ b/TAO/tao/TypeCode_Non_Default_Case.h @@ -90,7 +90,7 @@ namespace TAO /// Constructor. Non_Default_Case (DISCRIMINATOR_TYPE member_label, char const * member_name, - CORBA::TypeCode_ptr * member_type); + CORBA::TypeCode_ptr const * member_type); /** * @name @c TAO::TypeCode::Case Methods diff --git a/TAO/tao/TypeCode_Non_Default_Case.inl b/TAO/tao/TypeCode_Non_Default_Case.inl index 7a4dd0ab343..5f47d0fddcc 100644 --- a/TAO/tao/TypeCode_Non_Default_Case.inl +++ b/TAO/tao/TypeCode_Non_Default_Case.inl @@ -3,12 +3,11 @@ // $Id$ template <typename DISCRIMINATOR_TYPE, typename STRING_TYPE> -ACE_INLINE char const * TAO::TypeCode::Non_Default_Case<DISCRIMINATOR_TYPE, STRING_TYPE>::Non_Default_Case ( DISCRIMINATOR_TYPE member_label, char const * member_name, - CORBA::TypeCode_ptr * member_type) + CORBA::TypeCode_ptr const * member_type) : Case<STRING_TYPE> (member_name, member_type) , label_ (member_label) { diff --git a/TAO/tao/TypeCode_Struct_Field.h b/TAO/tao/TypeCode_Struct_Field.h index 402ded3640b..2e6a5e157e7 100644 --- a/TAO/tao/TypeCode_Struct_Field.h +++ b/TAO/tao/TypeCode_Struct_Field.h @@ -100,7 +100,7 @@ namespace TAO * @note This @c TypeCode is released upon destruction of this * @c Struct_Field. */ - CORBA::TypeCode_ptr * type; + CORBA::TypeCode_ptr const * type; }; diff --git a/TAO/tao/Union_TypeCode.cpp b/TAO/tao/Union_TypeCode.cpp index 53bf163312d..d8e546af3e0 100644 --- a/TAO/tao/Union_TypeCode.cpp +++ b/TAO/tao/Union_TypeCode.cpp @@ -43,7 +43,7 @@ TAO::TypeCode::Union<StringType, for (unsigned int i = 0; i < count; ++i) { - case_type const & c = this->case (i); + case_type const & c = this->the_case (i); if (!c.marshal (cdr)) return false; @@ -111,7 +111,7 @@ TAO::TypeCode::Union<StringType, for (CORBA::ULong i = 0; i < this_count; ++i) { - case_type const & lhs_case = this->case (i); + case_type const & lhs_case = this->the_case (i); bool const equal_case = lhs_case.equal (i, @@ -192,7 +192,7 @@ TAO::TypeCode::Union<StringType, for (CORBA::ULong i = 0; i < this_count; ++i) { - case_type const & lhs_case = this->case (i); + case_type const & lhs_case = this->the_case (i); bool const equivalent_case = lhs_case.equivalent (i, @@ -251,7 +251,7 @@ TAO::TypeCode::Union<StringType, // the compact TypeCode. tc_cases[i].name = empty_name; tc_cases[i].type = - &(this->case (i).type ()->get_compact_typecode ( + &(this->the_case (i).type ()->get_compact_typecode ( ACE_ENV_ARG_PARAMETER)); ACE_CHECK_RETURN (CORBA::TypeCode::_nil ()); } @@ -272,20 +272,21 @@ TAO::TypeCode::Union<StringType, this->kind_i (ACE_ENV_SINGLE_ARG_PARAMETER); ACE_CHECK_RETURN (CORBA::TypeCode::_nil ()); - tc = adapter->_tao_create_union_tc (this->base_attributes_.id (), - "", /* empty name */ - this->discriminant_type_, - tc_cases, - this->ncases_, - this->default_index_, - "", - CORBA::TypeCode_ptr * default_member_type - ACE_ENV_ARG_PARAMETER); + CORBA::TypeCode_var tc = + adapter->_tao_create_union_tc (this->base_attributes_.id (), + "", /* empty name */ + this->discriminant_type_, + tc_cases, + this->ncases_, + this->default_index_, + "", + this->default_case_.type () + ACE_ENV_ARG_PARAMETER); ACE_CHECK_RETURN (CORBA::TypeCode::_nil ()); (void) safe_cases.release (); - return tc; + return tc._retn (); } template <typename StringType, class CaseArrayType, class RefCountPolicy> @@ -331,7 +332,7 @@ TAO::TypeCode::Union<StringType, if (index >= this->case_count ()) ACE_THROW_RETURN (CORBA::TypeCode::Bounds (), 0); - return this->case (index).name (); + return this->the_case (index).name (); } template <typename StringType, class CaseArrayType, class RefCountPolicy> @@ -346,21 +347,21 @@ TAO::TypeCode::Union<StringType, ACE_THROW_RETURN (CORBA::TypeCode::Bounds (), CORBA::TypeCode::_nil ()); - return CORBA::TypeCode::_duplicate (this->case (index).type ()); + return CORBA::TypeCode::_duplicate (this->the_case (index).type ()); } template <typename StringType, class CaseArrayType, class RefCountPolicy> CORBA::Any * TAO::TypeCode::Union<StringType, CaseArrayType, - RefCountPolicy>::member_label_i (ULong index + RefCountPolicy>::member_label_i (CORBA::ULong index ACE_ENV_ARG_DECL) const { if (index >= this->case_count ()) ACE_THROW_RETURN (CORBA::TypeCode::Bounds (), 0); - return this->case (index).label (ACE_ENV_ARG_PARAMETER); + return this->the_case (index).label (ACE_ENV_ARG_PARAMETER); } template <typename StringType, class CaseArrayType, class RefCountPolicy> diff --git a/TAO/tao/Union_TypeCode.h b/TAO/tao/Union_TypeCode.h index 98df9331715..50d369e5739 100644 --- a/TAO/tao/Union_TypeCode.h +++ b/TAO/tao/Union_TypeCode.h @@ -24,7 +24,7 @@ #endif /* ACE_LACKS_PRAGMA_ONCE */ #include "tao/TypeCode_Base_Attributes.h" - +#include "tao/TypeCode_Default_Case.h" namespace TAO { @@ -52,10 +52,12 @@ namespace TAO /// Constructor. Union (char const * id, char const * name, - CORBA::TypeCode_ptr * discriminant_type, + CORBA::TypeCode_ptr const * discriminant_type, case_type const * cases, CORBA::ULong ncases, - CORBA::Long default_index); + CORBA::Long default_index, + char const * default_member_name, + CORBA::TypeCode_ptr const * default_member_type); /** * @name TAO-specific @c CORBA::TypeCode Methods @@ -95,7 +97,7 @@ namespace TAO ACE_ENV_ARG_DECL) const; virtual CORBA::TypeCode_ptr member_type_i (CORBA::ULong index ACE_ENV_ARG_DECL) const; - virtual CORBA::Any * member_label_i (ULong index + virtual CORBA::Any * member_label_i (CORBA::ULong index ACE_ENV_ARG_DECL) const; virtual CORBA::TypeCode_ptr discriminator_type_i ( ACE_ENV_SINGLE_ARG_DECL) const; @@ -105,7 +107,7 @@ namespace TAO private: /// Get pointer to the underlying @c Case array. - case_type const * cases (void) const; +// case_type const * cases (void) const; /// Return the number of cases in the IDL @c union, including /// the @c default case. @@ -126,7 +128,7 @@ namespace TAO * attempt to perform special handling for the @c default * case by shifting the index value by one, for example. */ - case_type const & case (CORBA::ULong index) const; + case_type const & the_case (CORBA::ULong index) const; private: @@ -149,6 +151,13 @@ namespace TAO /// Type of IDL @c union discriminant. CORBA::TypeCode_ptr * const discriminant_type_; + /// Index of the default union case. + /** + * This value will be -1 if no default case is found in the + * union. + */ + CORBA::Long const default_index_; + /// The number of cases in the OMG IDL union, excluding the /// @c default case. CORBA::ULong const ncases_; diff --git a/TAO/tao/Union_TypeCode.inl b/TAO/tao/Union_TypeCode.inl index f0dbe93daab..3f431d53a5f 100644 --- a/TAO/tao/Union_TypeCode.inl +++ b/TAO/tao/Union_TypeCode.inl @@ -2,19 +2,23 @@ // // $Id$ +#include "ace/Auto_Ptr.h" + + template <typename StringType, class CaseArrayType, class RefCountPolicy> ACE_INLINE TAO::TypeCode::Union<StringType, CaseArrayType, RefCountPolicy>::Union ( char const * id, char const * name, - CORBA::TypeCode_ptr * discriminant_type, - Case const * cases, + CORBA::TypeCode_ptr const * discriminant_type, + case_type const * cases, CORBA::ULong ncases, CORBA::Long default_index, char const * default_member_name, - CORBA::TypeCode_ptr * default_member_type) + CORBA::TypeCode_ptr const * default_member_type) : base_attributes_ (id, name) - , default_index_ (default_index), + , discriminant_type_ (discriminant_type) + , default_index_ (default_index) , ncases_ (ncases) , cases_ (cases) , default_case_ (default_member_name, @@ -25,15 +29,19 @@ TAO::TypeCode::Union<StringType, CaseArrayType, RefCountPolicy>::Union ( template <typename StringType, typename CaseArrayType, class RefCountPolicy> ACE_INLINE CORBA::ULong TAO::TypeCode::Union<StringType, - CaseArrayType>::case_count (void) const + CaseArrayType, + RefCountPolicy>::case_count (void) const { return (this->default_index_ < 0 ? this->ncases_ : this->ncases_ + 1); } template <typename StringType, typename CaseArrayType, class RefCountPolicy> -ACE_INLINE TAO::TypeCode::Union::case_type const & +ACE_INLINE TAO::TypeCode::Union<StringType, + CaseArrayType, + RefCountPolicy>::case_type const & TAO::TypeCode::Union<StringType, - CaseArrayType>::case (CORBA::ULong index) const + CaseArrayType, + RefCountPolicy>::the_case (CORBA::ULong index) const { if (default_index_ >= 0) { @@ -57,9 +65,12 @@ TAO::TypeCode::Union<StringType, // Member specializations // ------------------------------------------------------------- -ACE_INLINE TAO::TypeCode::Union::Case const * -TAO::TypeCode::Union<CORBA::String_var, - ACE_Auto_Ptr_Array<Case const> >::cases (void) const -{ - return this->cases_.get (); -} +// ACE_INLINE TAO::TypeCode::Union<CORBA::String_var, +// ACE_Auto_Ptr_Array<Case const>, +// TAO::True_RefCount_Policy>::case_type const * +// TAO::TypeCode::Union<CORBA::String_var, +// ACE_Auto_Ptr_Array<Case const>, +// TAO::True_RefCount_Policy>::cases (void) const +// { +// return this->cases_.get (); +// } |