Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

# TAO::TypeCode::Case_T< DiscriminatorType, StringType, TypeCodeType > Class Template Reference

Representation of an OMG IDL defined `union` `case`. More...

`#include <TypeCode_Case_T.h>`

Inheritance diagram for TAO::TypeCode::Case_T< DiscriminatorType, StringType, TypeCodeType >:

[legend]
Collaboration diagram for TAO::TypeCode::Case_T< DiscriminatorType, StringType, TypeCodeType >:

[legend]
List of all members.

## 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 `TAO::TypeCode::Case` abstract base class. See also: `TAO::TypeCode::Case`
Case< StringType, TypeCodeType > * | clone (void) const
| Cloning/copying operation.
virtual CORBA::Any * | label (ACE_ENV_SINGLE_ARG_DECL) const
virtual bool | marshal_label (TAO_OutputCDR &cdr) const
virtual bool | equal_label (CORBA::ULong index, CORBA::TypeCode_ptr tc ACE_ENV_ARG_DECL) const
| Verify equality of member labels.
## Private Attributes
DiscriminatorType const | label_
| IDL `union` case/member label value.

## Detailed Description

### template<typename DiscriminatorType, typename StringType, typename TypeCodeType>
class TAO::TypeCode::Case_T< DiscriminatorType, StringType, TypeCodeType >

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.

## Constructor & Destructor Documentation

template<typename DiscriminatorType, typename StringType, typename TypeCodeType>
ACE_INLINE TAO::TypeCode::Case_T< DiscriminatorType, StringType, TypeCodeType >::Case_T | ( | DiscriminatorType | member_label,
|  | char const * | member_name,
|  | TypeCodeType | member_type
| ) |

| Constructor.

template<typename DiscriminatorType, typename StringType, typename TypeCodeType>
ACE_INLINE TAO::TypeCode::Case_T< DiscriminatorType, StringType, TypeCodeType >::Case_T | ( | DiscriminatorType | member_label | ) |

| Constructor. Constructor only used in the dynamically constructed `union` `TypeCode` case.

## Member Function Documentation

template<typename DiscriminatorType, typename StringType, typename TypeCodeType>
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 >.

template<typename DiscriminatorType, typename StringType, typename TypeCodeType>
bool TAO::TypeCode::Case_T< DiscriminatorType, StringType, TypeCodeType >::equal_label | ( | CORBA::ULong | index,
|  | CORBA::TypeCode_ptr tc | ACE_ENV_ARG_DECL
| ) | 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`. Parameters:
  | 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 >.

template<typename DiscriminatorType, typename StringType, typename TypeCodeType>
CORBA::Any * TAO::TypeCode::Case_T< DiscriminatorType, StringType, TypeCodeType >::label | ( | ACE_ENV_SINGLE_ARG_DECL |  | ) | const`[virtual]`

| Return the IDL `union` case label value embedded within a `CORBA::Any`. Implements TAO::TypeCode::Case< StringType, TypeCodeType >.

template<typename DiscriminatorType, typename StringType, typename 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 >.

## Member Data Documentation

template<typename DiscriminatorType, typename StringType, typename TypeCodeType>
DiscriminatorType const TAO::TypeCode::Case_T< DiscriminatorType, StringType, TypeCodeType >::label_`[private]`

| IDL `union` case/member label value.

The documentation for this class was generated from the following files:

- TypeCode_Case_T.h
- TypeCode_Case_T.cpp
- TypeCode_Case_T.inl