summaryrefslogtreecommitdiff
path: root/trunk/TAO/tests/Any/Recursive/Test.idl
blob: a6270377d3c3da4b1583eed7a66fdd8303705223 (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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
//
// $Id$
//

#include "tao/OctetSeq.pidl"
#include "tao/StringSeq.pidl"

/// Put the interfaces in a module, to avoid global namespace pollution
module Test
{
  exception Recursive_Type_In_Any_Test_Failed {};
  exception Demarshaling_From_Any_Failed {};

  struct RecursiveStruct;
  typedef sequence<RecursiveStruct> RecursiveStructSeq;

  struct RecursiveStruct
  {
    RecursiveStructSeq recursive_structs;
    long i;
    RecursiveStructSeq recursive_structs_second;
  };

  struct NestedRecursiveStruct;
  typedef sequence<NestedRecursiveStruct> NestedRecursiveStructSeq;

  struct NestedRecursiveStruct
  {
    struct InnerStruct
    {
      NestedRecursiveStructSeq recursive_structs;
    }    ins;
    long i;
  };

  struct NestedRecursiveStruct5;
  typedef sequence<NestedRecursiveStruct5> NestedRecursiveStructSeq5;
  struct NestedRecursiveStruct5
  {
    long i;
    union MyUnion5 switch (short)
    {
      case 0:
        struct InnerStruct5
        {
          union Intern5 switch (short)
          {
            case 0:
              NestedRecursiveStructSeq5 recursive_structs5;
          } intbb5;
        } ins65;
      default:
        long i;
    } in5;
  };

  // --------------------------

  union RecursiveUnion;
  typedef sequence<RecursiveUnion> RecursiveUnionSeq;

  union RecursiveUnion switch (short)
  {
  case 0:
    RecursiveUnionSeq recursive_unions;
  case 1:
    short a;
  case 2:
    RecursiveUnionSeq recursive_unions_second;
  default:
    long i;
  };

  union RecursiveUnion2;
  typedef sequence<RecursiveUnion2> RecursiveUnionSeq2;

  union RecursiveUnion2 switch (short)
  {
  case 0:
    struct Innerstruct3a
    {
      RecursiveUnionSeq2 recursive_unions;
    } insb;
  case 1:
    short a;
  case 2:
    struct Innerstruct3b
    {
      RecursiveUnionSeq2 recursive_unions_second;
    } insa;
  default:
    long i;
  };

  union RecursiveUnionNoDefault;
  typedef sequence<RecursiveUnionNoDefault> RecursiveUnionSeqNoDefault;

  union RecursiveUnionNoDefault switch (short)
  {
  case 0:
    RecursiveUnionSeqNoDefault recursive_unions;
  case 1:
    short a;
  case 2:
    RecursiveUnionSeqNoDefault recursive_unions_second;
  };

  // --------------------------

  // --------------------------

  enum VSort {
    UNKNOWN_TYPE,
    RECURSIVE_TYPE,
    LONG_STYPE,
    BOOL_STYPE
  };

  union VSortRecursiveUnion;
  typedef sequence<VSortRecursiveUnion> VSortRecursiveUnionSeq;
  union VSortRecursiveUnion switch (VSort)
  {
  case RECURSIVE_TYPE:
    VSortRecursiveUnionSeq recursive_unions;
  case LONG_STYPE:
    long i;
  };

  // --------------------------

  union EnumUnion switch (VSort)
  {
  case BOOL_STYPE:
    boolean a;
  case LONG_STYPE:
    long i;
  };

  // --------------------------

  valuetype IndirectlyRecursiveValuetype;
  typedef sequence<IndirectlyRecursiveValuetype>
    IndirectlyRecursiveValuetypeSeq;

  valuetype IndirectlyRecursiveValuetype
  {
    public IndirectlyRecursiveValuetypeSeq recursive_valuetypes;
  };

  // --------------------------

  valuetype DirectlyRecursiveValuetype
  {
    public DirectlyRecursiveValuetype recursive_valuetype;
    public DirectlyRecursiveValuetype recursive_valuetype_second;
  };

  // --------------------------

  enum PositionEnum { unknownpos };

  struct Position {
    PositionEnum type;
  };
  typedef CORBA::OctetSeq OctetSeq;

  enum ValueSort {
    POSITION_TYPE,
    OCTET_SEQ_TYPE
  };

  union NonRecursiveUnionWithEnum switch (ValueSort) {
  case POSITION_TYPE:
    Position position_val;
  case OCTET_SEQ_TYPE:
    OctetSeq octet_seq_val;
  };

  enum ValueSort3 {
    DOUBLE_TYPE,
    SYMBOL_TYPE,
    SYMBOL_SEQ_TYPE
  };

  typedef sequence<string> StringSeq;

  struct Symbol3;
  typedef sequence<Symbol3> SymbolSeq3;

  struct Symbol3 {
    StringSeq scope;
    string name;
    SymbolSeq3 args;
  };

  union NonRecursiveUnionWithStringStruct3 switch (ValueSort3) {
  case DOUBLE_TYPE:
    double double_val;
  case SYMBOL_TYPE:
    Symbol3 symbol_val;
  case SYMBOL_SEQ_TYPE:
    SymbolSeq3 symbol_seq_val;
  };

  // --------------------------

  enum ValueSort2 {
    SYMBOL_TYPE2
  };

  struct Symbol2 {
    string name;
  };

  union NonRecursiveUnionWithStringStruct switch (ValueSort2) {
  case SYMBOL_TYPE2:
    Symbol2 symbol_val;
  };

  /// Simple test interface.
  interface Hello
  {
    /// Return the any provided as the "in" argument.
    any get_any (in any the_any);

    /// Shutdown the server ORB.
    oneway void shutdown ();
  };

  valuetype Recursive2;
  typedef sequence<Recursive2> Recursive2Seq2;

  valuetype Recursive2
  {
    public struct Innerstruct3a
    {
      Recursive2Seq2 recursive_unions;
    } insa;
    public short a;
    public struct Innerstruct3b
    {
      Recursive2Seq2 recursive_second;
    } insb;
  };

  valuetype Recursive3;
  typedef sequence<Recursive3> RecursiveSeq3;

  valuetype Recursive3
  {
    public RecursiveSeq3 seq1;
    public short a;
    public RecursiveSeq3 seq2;
  };
};