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 >:

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

Collaboration graph
[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::Anylabel (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:
Generated on Thu Jun 9 00:19:29 2005 for TAO by  doxygen 1.3.9.1