summaryrefslogtreecommitdiff
path: root/TAO/TAO_IDL/be_include/be_sequence.h
blob: ce5cb519f89139505f6b1d77e387b1e201a21978 (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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
// ============================================================================
//
// = LIBRARY
//    TAO IDL
//
// = FILENAME
//    be_sequence.h
//
// = DESCRIPTION
//    Extension of class AST_Sequence that provides additional means for C++
//    mapping.
//
// = AUTHOR
//    Copyright 1994-1995 by Sun Microsystems, Inc.
//    and
//    Aniruddha Gokhale
//
// ============================================================================

#if !defined (BE_SEQUENCE_H)
#define BE_SEQUENCE_H

/*
 * BE_Sequence
 */

class be_typedef;

// A sequence in OMG IDL does not define a scoping construct just as a struct
// or union or an interface do. However, in the C++ mapping, a sequence becomes
// a class. If the base type of a sequence is another anonymous sequence, then
// the base type is defined in the scope of this sequence. Hence we define
// be_sequence to possess the additional characteristics of a scope
class be_sequence : public virtual AST_Sequence,
                    public virtual be_scope,
                    public virtual be_type
{
public:
  enum MANAGED_TYPE
  {
    MNG_UNKNOWN ,
    MNG_NONE,
    MNG_STRING,
    MNG_OBJREF
  };

  // =Operations

  be_sequence (void);
  // default constructor

  be_sequence (AST_Expression *v, AST_Type *bt);
  // constructor

  virtual int create_name (be_typedef *node=0);
  // create a name for ourselves. If we are typedefed, then we get the name of
  // the typedef node, else we generate a name for ourselves

  virtual int gen_client_header (void);
  // Generates the client-side header information for the sequence

  virtual int gen_client_stubs (void);
  // Generates the client-side stubs for the sequence

  virtual int gen_server_header (void);
  // Generates the server-side header information for the sequence

  virtual int gen_server_skeletons (void);
  // Generates the server-side skeletons for the sequence

  virtual int gen_client_inline (void);
  // Generates the client-side inline for the sequence

  virtual int gen_server_inline (void);
  // Generates the server-side inlines for the sequence

  virtual int gen_var_defn (void);
  // generate the _var class definition

  virtual int gen_var_impl (void);
  // generate the implementation for the _var class

  virtual int gen_out_defn (void);
  // generate the _out class definition

  virtual int gen_out_impl (void);
  // generate the _out implementation

  virtual int gen_managed_type_ch (void);
  // generate code for managed types in header

  virtual int gen_managed_type_ci (void);
  // generate code for managed types in inlined file

  virtual int gen_managed_type_cs (void);
  // generate code for managed types in impl file

  virtual int gen_typecode (void);
  // generate the typecode

  virtual int gen_encapsulation (void);
  // encapsulation for parameters

  virtual long tc_size (void);
  // return typecode size

  virtual long tc_encap_len (void);
  // return length of encapsulation

  virtual MANAGED_TYPE managed_type (void);
  // return the managed type

  virtual idl_bool unbounded (void) const;
  // is this sequence bounded or not

  // =Scope management functions
  be_sequence *fe_add_sequence (be_sequence *);

  virtual be_decl *decl (void);
  // overridden method on the be_scope class

  virtual int write_as_return (TAO_OutStream *stream,
			       be_type *type);
  // write the mapping as a return value on the stream.

  // Visiting
  virtual int accept (be_visitor *visitor);

  // Narrowing
  DEF_NARROW_METHODS3 (be_sequence, AST_Sequence, be_scope, be_type);
  DEF_NARROW_FROM_DECL (be_sequence);

protected:
  virtual char *gen_name (void);
  // helper to create_name

private:
  idl_bool unbounded_;
  // whether we are bounded or unbounded

  MANAGED_TYPE mt_;
  // our managed type
};

#endif