TAO_AnyTypeCode  2.0.8
Public Member Functions | Private Attributes
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 (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.

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 >
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 >
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 
) 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:
indexMember index of given TypeCode tc being tested.
tcThe 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 ( void  ) 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:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Friends Defines