summaryrefslogtreecommitdiff
path: root/TAO/tests/Any/Recursive/Test.idl
blob: a633c1d83b8a0afcbf9dfeb45b961ee8fe76161b (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
//
// $Id$
//

#include "tao/OctetSeq.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;
  };

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

  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 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;
  };

  /// 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 ();
  };

};