TAO_AnyTypeCode
2.0.8
|
Representation of an OMG IDL defined union
case
.
More...
#include <TypeCode_Case_T.h>
Public Member Functions | |
Case_T (DiscriminatorType member_label, char const *member_name, TypeCodeType member_type) | |
Constructor. | |
Case_T (DiscriminatorType member_label) | |
Constructor. | |
@c TAO::TypeCode::Case Methods | |
Methods required by the
| |
Case< StringType, TypeCodeType > * | clone (void) const |
Cloning/copying operation. | |
virtual CORBA::Any * | label (void) const |
virtual bool | marshal_label (TAO_OutputCDR &cdr) const |
virtual bool | equal_label (CORBA::ULong index, CORBA::TypeCode_ptr tc) const |
Verify equality of member labels. | |
Private Attributes | |
DiscriminatorType const | label_ |
IDL union case/member label value. |
Representation of an OMG IDL defined union
case
.
A Case_T
contains the corresponding case label value, name and pointer to the CORBA::TypeCode
for a given OMG IDL union
case
. For example, the cases in following OMG IDL union:
union Foo switch (short) { case 0: case 1: short a; case 2: long b; default: octet c; };
would be represented using the following statically instantiated TAO::TypeCode::Case_T
array:
typedef TAO::TypeCode::Case_T<CORBA::Short, char const *> Foo_Case; Foo_Case _tao_cases_Foo[] = { Foo_Case (0, "a", &CORBA::_tc_short), Foo_Case (1, "a", &CORBA::_tc_short), Foo_Case (2, "b", &CORBA::_tc_long), Foo_Case (0, "c", &CORBA::_tc_octet) };
The default
index is passed directly to the TAO::TypeCode::Union
constructor.
The template parameter DISCRIMINATOR_TYPE is the corresponding C++ type for the IDL defined union
discriminator type. For example, a union
with an IDL short
discriminator will have a corresponding CORBA::Short
C++ type. This template parameter is necessary to allow the actual case
label value to be stored as its actual type, which is particularly important when marshaling that value into a CDR stream.
The template parameter StringType is either char
const
*
or CORBA::String_var
. The latter is only used when creating CORBA::tk_union
TypeCode
dynamically, such as through the TypeCodeFactory.
TAO::TypeCode::Case_T< DiscriminatorType, StringType, TypeCodeType >::Case_T | ( | DiscriminatorType | member_label, |
char const * | member_name, | ||
TypeCodeType | member_type | ||
) |
Constructor.
TAO::TypeCode::Case_T< DiscriminatorType, StringType, TypeCodeType >::Case_T | ( | DiscriminatorType | member_label | ) |
Constructor.
Constructor only used in the dynamically constructed union
TypeCode
case.
TAO::TypeCode::Case< StringType, TypeCodeType > * TAO::TypeCode::Case_T< DiscriminatorType, StringType, TypeCodeType >::clone | ( | void | ) | const [virtual] |
Cloning/copying operation.
Implements TAO::TypeCode::Case< StringType, TypeCodeType >.
bool TAO::TypeCode::Case_T< DiscriminatorType, StringType, TypeCodeType >::equal_label | ( | CORBA::ULong | index, |
CORBA::TypeCode_ptr | tc | ||
) | const [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. |
Implements TAO::TypeCode::Case< StringType, TypeCodeType >.
CORBA::Any * TAO::TypeCode::Case_T< DiscriminatorType, StringType, TypeCodeType >::label | ( | void | ) | const [virtual] |
Return the IDL union
case label value embedded within a CORBA::Any
.
Implements TAO::TypeCode::Case< StringType, TypeCodeType >.
bool TAO::TypeCode::Case_T< DiscriminatorType, StringType, TypeCodeType >::marshal_label | ( | TAO_OutputCDR & | cdr | ) | const [virtual] |
Marshal the IDL union
case
label value into the given output CDR stream.
Implements TAO::TypeCode::Case< StringType, TypeCodeType >.
DiscriminatorType const TAO::TypeCode::Case_T< DiscriminatorType, StringType, TypeCodeType >::label_ [private] |
IDL union
case/member label value.