summaryrefslogtreecommitdiff
path: root/TAO/tao/TypeCodeFactory/Recursive_TypeCode.h
blob: 0f92a9bdc8b0e7681991dc3672c111a19bf3c0cb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
// -*- C++ -*-

//=============================================================================
/**
 *  @file    Recursive_TypeCode.h
 *
 *  $Id$
 *
 *  Header file for a intermediate recursive CORBA::TypeCode.
 *
 *  @author Ossama Othman
 */
//=============================================================================

#ifndef TAO_RECURSIVE_TYPECODE_H
#define TAO_RECURSIVE_TYPECODE_H

#include /**/ "ace/pre.h"

#include "tao/AnyTypeCode/TypeCode.h"
#include "tao/AnyTypeCode/True_RefCount_Policy.h"

TAO_BEGIN_VERSIONED_NAMESPACE_DECL

namespace TAO
{
  namespace TypeCodeFactory
  {
    /**
     * @class Recursive_TypeCode
     *
     * @brief Recursive @c TypeCode placeholder.
     *
     * This class implements a placeholder for recursive TypeCodes.
     * It is meant solely for use as an intermediate TypeCode, and
     * merely forwards all operations to the actual recursive TypeCode
     * that is set by the TypeCodeFactory.
     *
     * @note This class serves a purpose different than the one served
     *       by the @c TAO::TypeCode::Recursive class.
     */
    class Recursive_TypeCode
      : public CORBA::TypeCode,
        private TAO::True_RefCount_Policy
    {
    public:

      /// Constructor.
      Recursive_TypeCode (char const * id);

      /// Set the actual recursive TypeCode to which all TypeCode
      /// operations will be forwarded.
      void the_typecode (CORBA::TypeCode_ptr tc);

      /**
       * @name TAO-specific @c CORBA::TypeCode Methods
       *
       * Methods required by TAO's implementation of the
       * @c CORBA::TypeCode class.
       *
       * @see @c CORBA::TypeCode
       */
      //@{
      virtual bool tao_marshal_kind (TAO_OutputCDR & cdr) const;
      virtual bool tao_marshal (TAO_OutputCDR & cdr,
                                CORBA::ULong offset) const;
      virtual void tao_duplicate (void);
      virtual void tao_release (void);
      //@}

    protected:

      /**
       * @name TAO @c CORBA::TypeCode Template Methods
       *
       * Recursive type-capable (i.e. @c struct, @c union,
       * @c valuetype and @c eventtype) @c CORBA::TypeCode -specific
       * template methods
       *
       * @see @c CORBA::TypeCode
       */
      //@{
      virtual CORBA::Boolean equal_i (CORBA::TypeCode_ptr tc
                                      ACE_ENV_ARG_DECL) const;
      virtual CORBA::Boolean equivalent_i (CORBA::TypeCode_ptr tc
                                           ACE_ENV_ARG_DECL) const;
      virtual CORBA::TypeCode_ptr get_compact_typecode_i (
        ACE_ENV_SINGLE_ARG_DECL) const;
      virtual char const * id_i (ACE_ENV_SINGLE_ARG_DECL) const;
      virtual char const * name_i (ACE_ENV_SINGLE_ARG_DECL) const;
      virtual CORBA::ULong member_count_i (ACE_ENV_SINGLE_ARG_DECL) const;
      virtual char const * member_name_i (CORBA::ULong index
                                          ACE_ENV_ARG_DECL) const;
      virtual CORBA::TypeCode_ptr member_type_i (CORBA::ULong index
                                                 ACE_ENV_ARG_DECL) const;
      virtual CORBA::Any * member_label_i (CORBA::ULong index
                                           ACE_ENV_ARG_DECL) const;
      virtual CORBA::TypeCode_ptr discriminator_type_i (
        ACE_ENV_SINGLE_ARG_DECL) const;
      virtual CORBA::Long default_index_i (ACE_ENV_SINGLE_ARG_DECL) const;
      virtual CORBA::Visibility member_visibility_i (CORBA::ULong index
                                                     ACE_ENV_ARG_DECL) const;
      virtual CORBA::ValueModifier type_modifier_i (
        ACE_ENV_SINGLE_ARG_DECL) const;
      virtual CORBA::TypeCode_ptr concrete_base_type_i (
        ACE_ENV_SINGLE_ARG_DECL) const;

      //@}

    private:

      /// Repository ID.
      CORBA::String_var id_;

      /// The actual recursive TypeCode.
      CORBA::TypeCode_var the_typecode_;

    };

  }  // End namespace TypeCodeFactory
}  // End namespace TAO

TAO_END_VERSIONED_NAMESPACE_DECL

#ifdef __ACE_INLINE__
# include "tao/TypeCodeFactory/Recursive_TypeCode.inl"
#endif  /* __ACE_INLINE__ */

#include /**/ "ace/post.h"

#endif  /* TAO_RECURSIVE_TYPECODE_H */