union
case/member.
More...
#include <TypeCode_Case_Base_T.h>
Inheritance diagram for TAO::TypeCode::Case< StringType, TypeCodeType >:
Public Member Functions | |
Case (char const *name, TypeCodeType tc) | |
Constructor. | |
Case (void) | |
Constructor. | |
virtual | ~Case (void) |
Destructor. | |
virtual Case * | clone (void) const =0 |
Cloning/copying operation. | |
virtual CORBA::Any * | label (void) const =0 |
char const * | name (void) const |
Get the name of the union case/member. | |
void | name (char const *the_name) |
Set the name of the union case/member. | |
CORBA::TypeCode_ptr | type (void) const |
Get the CORBA::TypeCode of the union case/member. | |
void | type (CORBA::TypeCode_ptr tc) |
Set the CORBA::TypeCode of the union case/member. | |
bool | marshal (TAO_OutputCDR &cdr, CORBA::ULong offset) const |
bool | equal (CORBA::ULong index, CORBA::TypeCode_ptr tc) const |
bool | equivalent (CORBA::ULong index, CORBA::TypeCode_ptr tc) const |
Protected Member Functions | |
virtual bool | marshal_label (TAO_OutputCDR &cdr) const =0 |
virtual bool | equal_label (CORBA::ULong index, CORBA::TypeCode_ptr tc) const =0 |
Verify equality of member labels. | |
Private Attributes | |
StringType | name_ |
The name of the case. | |
TypeCodeType | type_ |
Pointer to the CORBA::TypeCode of the case. |
union
case/member.
This class hides the actual IDL union
member label value from the TAO::TypeCode::Union
class by relying on a CORBA::Any return value that corresponds to the CORBA::TypeCode::member_label()
return type. It also allows the TAO::TypeCode::Union
class to marshal the member label values into a CDR stream without knowledge of the underlying member label values.
Definition at line 56 of file TypeCode_Case_Base_T.h.
TAO_BEGIN_VERSIONED_NAMESPACE_DECL ACE_INLINE TAO::TypeCode::Case< StringType, TypeCodeType >::Case | ( | char const * | name, | |
TypeCodeType | tc | |||
) |
Constructor.
Constructor used when creating static union
TypeCodes
.
Definition at line 12 of file TypeCode_Case_Base_T.inl.
ACE_INLINE TAO::TypeCode::Case< StringType, TypeCodeType >::Case | ( | void | ) |
Constructor.
Constructor used when creating dynamic union
TypeCodes
.
Definition at line 22 of file TypeCode_Case_Base_T.inl.
00023 : name_ () 00024 , type_ () 00025 { 00026 // Only used when StringType and TypeCodeType are CORBA::String_var 00027 // and CORBA::TypeCode_var, respectively. 00028 }
TAO_BEGIN_VERSIONED_NAMESPACE_DECL TAO::TypeCode::Case< StringType, TypeCodeType >::~Case | ( | void | ) | [virtual] |
virtual Case* TAO::TypeCode::Case< StringType, TypeCodeType >::clone | ( | void | ) | const [pure virtual] |
Cloning/copying operation.
Implemented in TAO::TypeCode::Case_Enum_T< StringType, TypeCodeType >, and TAO::TypeCode::Case_T< DiscriminatorType, StringType, TypeCodeType >.
Referenced by ACE::VP_traits< TAO::TypeCode::Case_Dynamic >::clone().
bool TAO::TypeCode::Case< StringType, TypeCodeType >::equal | ( | CORBA::ULong | index, | |
CORBA::TypeCode_ptr | tc | |||
) | const |
Check for equality of the case
attributes contained by this class and the corresponding member attributes at index "index" in the given TypeCode
tc.
Definition at line 22 of file TypeCode_Case_Base_T.cpp.
References CORBA::TypeCode::equal(), TAO::TypeCode::Case< StringType, TypeCodeType >::equal_label(), TAO_Pseudo_Var_T< T >::in(), CORBA::TypeCode::member_name(), CORBA::TypeCode::member_type(), TAO::TypeCode::Case< StringType, TypeCodeType >::name(), ACE_OS::strcmp(), and TAO::TypeCode::Case< StringType, TypeCodeType >::type().
Referenced by TAO::TypeCode::Union< StringType, TypeCodeType, CaseArrayType, RefCountPolicy >::equal_i().
00025 { 00026 // Check case names. 00027 char const * const lhs_name = this->name (); 00028 char const * const rhs_name = tc->member_name (index 00029 ); 00030 00031 if (ACE_OS::strcmp (lhs_name, rhs_name) != 0) 00032 return false; 00033 00034 // Check case TypeCodes. 00035 CORBA::TypeCode_ptr const lhs_tc = this->type (); 00036 CORBA::TypeCode_var const rhs_tc = 00037 tc->member_type (index 00038 ); 00039 00040 CORBA::Boolean const equal_members = 00041 lhs_tc->equal (rhs_tc.in () 00042 ); 00043 00044 if (!equal_members) 00045 return false; 00046 00047 // Check case label. 00048 return this->equal_label (index, 00049 tc 00050 ); 00051 }
virtual bool TAO::TypeCode::Case< StringType, TypeCodeType >::equal_label | ( | CORBA::ULong | index, | |
CORBA::TypeCode_ptr | tc | |||
) | const [protected, pure virtual] |
Verify equality of member labels.
Performing member label equality comparisons in the Case
subclass allows us to avoid performing interpretive extraction of the value from the Any
returned from the "right hand side" operand TypeCode
since the Case
subclass already knows what type and value should be extracted from the Any
.
index | Member index of given TypeCode tc being tested. | |
tc | The TypeCode whose member "@a index" label is being tested. |
Implemented in TAO::TypeCode::Case_Enum_T< StringType, TypeCodeType >, and TAO::TypeCode::Case_T< DiscriminatorType, StringType, TypeCodeType >.
Referenced by TAO::TypeCode::Case< StringType, TypeCodeType >::equal(), and TAO::TypeCode::Case< StringType, TypeCodeType >::equivalent().
bool TAO::TypeCode::Case< StringType, TypeCodeType >::equivalent | ( | CORBA::ULong | index, | |
CORBA::TypeCode_ptr | tc | |||
) | const |
Check for equivalence of the case
attributes contained by this class and the corresponding member attributes at index "@a index" in the given TypeCode
tc.
Definition at line 55 of file TypeCode_Case_Base_T.cpp.
References TAO::TypeCode::Case< StringType, TypeCodeType >::equal_label(), CORBA::TypeCode::equivalent(), TAO_Pseudo_Var_T< T >::in(), CORBA::TypeCode::member_type(), and TAO::TypeCode::Case< StringType, TypeCodeType >::type().
Referenced by TAO::TypeCode::Union< StringType, TypeCodeType, CaseArrayType, RefCountPolicy >::equivalent_i().
00059 { 00060 // Member names are ignore when determining equivalence. 00061 00062 // Check case TypeCodes. 00063 CORBA::TypeCode_ptr const lhs_tc = this->type (); 00064 CORBA::TypeCode_var const rhs_tc = 00065 tc->member_type (index 00066 ); 00067 00068 CORBA::Boolean const equivalent_members = 00069 lhs_tc->equivalent (rhs_tc.in () 00070 ); 00071 00072 if (!equivalent_members) 00073 return 0; 00074 00075 // Check case label. 00076 // The label must be equal when determining equivalence, too. 00077 return this->equal_label (index, 00078 tc 00079 ); 00080 }
virtual CORBA::Any* TAO::TypeCode::Case< StringType, TypeCodeType >::label | ( | void | ) | const [pure virtual] |
Return the IDL union
case label value embedded within a CORBA::Any
.
Implemented in TAO::TypeCode::Case_Enum_T< StringType, TypeCodeType >, and TAO::TypeCode::Case_T< DiscriminatorType, StringType, TypeCodeType >.
ACE_INLINE bool TAO::TypeCode::Case< StringType, TypeCodeType >::marshal | ( | TAO_OutputCDR & | cdr, | |
CORBA::ULong | offset | |||
) | const |
Marshal this IDL union
member into the given output CDR stream.
Definition at line 32 of file TypeCode_Case_Base_T.inl.
References TAO::TypeCode::Case< StringType, TypeCodeType >::marshal_label(), and ACE_OutputCDR::total_length().
00035 { 00036 return 00037 this->marshal_label (cdr) 00038 && (cdr << TAO_OutputCDR::from_string ( 00039 Traits<StringType>::get_string (this->name_), 0)) 00040 && TAO::TypeCode::marshal (cdr, 00041 Traits<StringType>::get_typecode (this->type_), 00042 offset + cdr.total_length ()); 00043 }
virtual bool TAO::TypeCode::Case< StringType, TypeCodeType >::marshal_label | ( | TAO_OutputCDR & | cdr | ) | const [protected, pure virtual] |
Marshal the IDL union
case
label value into the given output CDR stream.
Implemented in TAO::TypeCode::Case_Enum_T< StringType, TypeCodeType >, and TAO::TypeCode::Case_T< DiscriminatorType, StringType, TypeCodeType >.
Referenced by TAO::TypeCode::Case< StringType, TypeCodeType >::marshal().
ACE_INLINE void TAO::TypeCode::Case< StringType, TypeCodeType >::name | ( | char const * | the_name | ) |
Set the name of the union
case/member.
Definition at line 55 of file TypeCode_Case_Base_T.inl.
References TAO::TypeCode::Case< StringType, TypeCodeType >::name_.
00057 { 00058 this->name_ = the_name; 00059 }
ACE_INLINE char const * TAO::TypeCode::Case< StringType, TypeCodeType >::name | ( | void | ) | const |
Get the name of the union
case/member.
Definition at line 47 of file TypeCode_Case_Base_T.inl.
Referenced by TAO::TypeCode::Case< StringType, TypeCodeType >::equal().
ACE_INLINE void TAO::TypeCode::Case< StringType, TypeCodeType >::type | ( | CORBA::TypeCode_ptr | tc | ) |
Set the CORBA::TypeCode
of the union
case/member.
CORBA::TypeCode::_duplicate()
is called on the TypeCode
tc. Definition at line 71 of file TypeCode_Case_Base_T.inl.
References CORBA::TypeCode::_duplicate(), and TAO::TypeCode::Case< StringType, TypeCodeType >::type_.
00072 { 00073 // This assignment works since it is only used when TypeCodeType is 00074 // "CORBA::TypeCode_var", not in the "CORBA::TypeCode_ptr const *" 00075 // case. 00076 this->type_ = CORBA::TypeCode::_duplicate (tc); 00077 }
ACE_INLINE CORBA::TypeCode_ptr TAO::TypeCode::Case< StringType, TypeCodeType >::type | ( | void | ) | const |
Get the CORBA::TypeCode
of the union
case/member.
Definition at line 63 of file TypeCode_Case_Base_T.inl.
Referenced by TAO::TypeCode::Case< StringType, TypeCodeType >::equal(), and TAO::TypeCode::Case< StringType, TypeCodeType >::equivalent().
StringType TAO::TypeCode::Case< StringType, TypeCodeType >::name_ [private] |
The name of the case.
Definition at line 142 of file TypeCode_Case_Base_T.h.
Referenced by TAO::TypeCode::Case< StringType, TypeCodeType >::name().
TypeCodeType TAO::TypeCode::Case< StringType, TypeCodeType >::type_ [private] |
Pointer to the CORBA::TypeCode
of the case.
A pointer to the CORBA::TypeCode_ptr
rather than the CORBA::TypeCode_ptr
itself is stored since that address is well-defined. We may not know the value of the CORBA::TypeCode_ptr
when creating this Case
statically at compile-time, hence the indirection.
Definition at line 155 of file TypeCode_Case_Base_T.h.
Referenced by TAO::TypeCode::Case< StringType, TypeCodeType >::type().