summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOssama Othman <ossama-othman@users.noreply.github.com>2005-03-25 12:52:05 +0000
committerOssama Othman <ossama-othman@users.noreply.github.com>2005-03-25 12:52:05 +0000
commitda8d284ed547e2d8766859e89c1ba03ceb56443a (patch)
tree603beebc37c91baf9781fb847814a6e5657d5ca0
parentc917cf0c31a885c6da92106fb95d59819818b2da (diff)
downloadATCD-da8d284ed547e2d8766859e89c1ba03ceb56443a.tar.gz
*** empty log message ***
-rw-r--r--TAO/tao/Alias_TypeCode.cpp10
-rw-r--r--TAO/tao/Alias_TypeCode.h9
-rw-r--r--TAO/tao/Alias_TypeCode.inl4
-rw-r--r--TAO/tao/Enum_TypeCode.cpp17
-rw-r--r--TAO/tao/Enum_TypeCode.h3
-rw-r--r--TAO/tao/Objref_TypeCode.h1
-rw-r--r--TAO/tao/Sequence_TypeCode.h5
-rw-r--r--TAO/tao/TypeCode.cpp24
-rw-r--r--TAO/tao/TypeCode.h2
-rw-r--r--TAO/tao/TypeCodeFactory_Adapter.h23
-rw-r--r--TAO/tao/TypeCode_Case.cpp1
-rw-r--r--TAO/tao/TypeCode_Case.h7
-rw-r--r--TAO/tao/TypeCode_Case.inl4
-rw-r--r--TAO/tao/TypeCode_Default_Case.cpp12
-rw-r--r--TAO/tao/TypeCode_Default_Case.h2
-rw-r--r--TAO/tao/TypeCode_Default_Case.inl3
-rw-r--r--TAO/tao/TypeCode_Enumerator.h4
-rw-r--r--TAO/tao/TypeCode_Non_Default_Case.cpp2
-rw-r--r--TAO/tao/TypeCode_Non_Default_Case.h2
-rw-r--r--TAO/tao/TypeCode_Non_Default_Case.inl3
-rw-r--r--TAO/tao/TypeCode_Struct_Field.h2
-rw-r--r--TAO/tao/Union_TypeCode.cpp37
-rw-r--r--TAO/tao/Union_TypeCode.h21
-rw-r--r--TAO/tao/Union_TypeCode.inl37
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 ();
+// }