1//
2// Copyright (c) ZeroC, Inc. All rights reserved.
3//
4
5#pragma once
6
7[["cpp:include:list", "suppress-warning:deprecated"]]
8
9["objc:prefix:TestOptional"]
10module Test
11{
12
13class OneOptional
14{
15    optional(1) int a;
16}
17
18enum MyEnum
19{
20    MyEnumMember
21}
22
23struct SmallStruct
24{
25    byte m;
26}
27
28struct FixedStruct
29{
30    int m;
31}
32
33struct VarStruct
34{
35    string m;
36}
37
38["cpp:class"] struct ClassVarStruct
39{
40    int a;
41}
42
43sequence<byte> ByteSeq;
44sequence<bool> BoolSeq;
45sequence<short> ShortSeq;
46sequence<int> IntSeq;
47sequence<long> LongSeq;
48sequence<float> FloatSeq;
49sequence<double> DoubleSeq;
50sequence<string> StringSeq;
51sequence<MyEnum> MyEnumSeq;
52sequence<SmallStruct> SmallStructSeq;
53["cpp:type:std::list< ::Test::SmallStruct>"] sequence<SmallStruct> SmallStructList;
54sequence<FixedStruct> FixedStructSeq;
55["cpp:type:std::list< ::Test::FixedStruct>"] sequence<FixedStruct> FixedStructList;
56sequence<VarStruct> VarStructSeq;
57sequence<OneOptional> OneOptionalSeq;
58sequence<OneOptional*> OneOptionalPrxSeq;
59
60sequence<byte> Serializable;
61
62dictionary<int, int> IntIntDict;
63dictionary<string, int> StringIntDict;
64dictionary<int, MyEnum> IntEnumDict;
65dictionary<int, FixedStruct> IntFixedStructDict;
66dictionary<int, VarStruct> IntVarStructDict;
67dictionary<int, OneOptional> IntOneOptionalDict;
68dictionary<int, OneOptional*> IntOneOptionalPrxDict;
69
70class MultiOptional
71{
72    optional(1) byte a;
73    optional(2) bool  b;
74    optional(3) short c;
75    optional(4) int d;
76    optional(5) long e;
77    optional(6) float f;
78    optional(7) double g;
79    optional(8) string h;
80    optional(9) MyEnum i;
81    optional(10) MultiOptional* j;
82    optional(11) MultiOptional k;
83    optional(12) ByteSeq bs;
84    optional(13) StringSeq ss;
85    optional(14) IntIntDict iid;
86    optional(15) StringIntDict sid;
87    optional(16) FixedStruct fs;
88    optional(17) VarStruct vs;
89
90    optional(18) ShortSeq shs;
91    optional(19) MyEnumSeq es;
92    optional(20) FixedStructSeq fss;
93    optional(21) VarStructSeq vss;
94    optional(22) OneOptionalSeq oos;
95    optional(23) OneOptionalPrxSeq oops;
96
97    optional(24) IntEnumDict ied;
98    optional(25) IntFixedStructDict ifsd;
99    optional(26) IntVarStructDict ivsd;
100    optional(27) IntOneOptionalDict iood;
101    optional(28) IntOneOptionalPrxDict ioopd;
102
103    optional(29) BoolSeq bos;
104
105    optional(30) Serializable ser;
106}
107
108class A
109{
110    int requiredA = 0;
111    optional(500) int mc;
112    optional(50) int mb;
113    optional(1) int ma;
114}
115
116["preserve-slice"]
117class B extends A
118{
119    int requiredB = 0;
120    optional(10) int md;
121}
122
123class C extends B
124{
125    string ss;
126    optional(890) string ms;
127}
128
129class WD
130{
131    optional(1) int a = 5;
132    optional(2) string s = "test";
133}
134
135exception OptionalException
136{
137    bool req = false;
138    optional(1) int a = 5;
139    optional(2) string b;
140    optional(50) OneOptional o;
141}
142
143exception DerivedException extends OptionalException
144{
145    optional(600) string ss = "test";
146    optional(601) OneOptional o2;
147}
148
149exception RequiredException extends OptionalException
150{
151    string ss = "test";
152    OneOptional o2;
153}
154
155class OptionalWithCustom
156{
157    optional(1) SmallStructList l;
158    ["protected"] optional(2) SmallStructList lp;
159    optional(3) ClassVarStruct s;
160}
161
162class E
163{
164    A ae;
165}
166
167class F extends E
168{
169    optional(1) A af;
170}
171
172class G1
173{
174    string a;
175}
176
177class G2
178{
179    long a;
180}
181
182class G
183{
184    optional(1) G1 gg1Opt;
185    G2 gg2;
186    optional(0) G2 gg2Opt;
187    G1 gg1;
188}
189
190class Recursive;
191sequence<Recursive> RecursiveSeq;
192
193class Recursive
194{
195    optional(0) RecursiveSeq value;
196}
197
198interface Initial
199{
200    void shutdown();
201
202    Object pingPong(Object o);
203
204    void opOptionalException(optional(1) int a, optional(2) string b, optional(3) OneOptional o)
205        throws OptionalException;
206
207    void opDerivedException(optional(1) int a, optional(2) string b, optional(3) OneOptional o)
208        throws OptionalException;
209
210    void opRequiredException(optional(1) int a, optional(2) string b, optional(3) OneOptional o)
211        throws OptionalException;
212
213    optional(1) byte opByte(optional(2) byte p1, out optional(3) byte p3);
214
215    optional(1) bool opBool(optional(2) bool p1, out optional(3) bool p3);
216
217    optional(1) short opShort(optional(2) short p1, out optional(3) short p3);
218
219    optional(1) int opInt(optional(2) int p1, out optional(3) int p3);
220
221    optional(3) long opLong(optional(1) long p1, out optional(2) long p3);
222
223    optional(1) float opFloat(optional(2) float p1, out optional(3) float p3);
224
225    optional(1) double opDouble(optional(2) double p1, out optional(3) double p3);
226
227    optional(1) string opString(optional(2) string p1, out optional(3) string p3);
228
229    optional(1) MyEnum opMyEnum(optional(2) MyEnum p1, out optional(3) MyEnum p3);
230
231    optional(1) SmallStruct opSmallStruct(optional(2) SmallStruct p1, out optional(3) SmallStruct p3);
232
233    optional(1) FixedStruct opFixedStruct(optional(2) FixedStruct p1, out optional(3) FixedStruct p3);
234
235    optional(1) VarStruct opVarStruct(optional(2) VarStruct p1, out optional(3) VarStruct p3);
236
237    optional(1) OneOptional opOneOptional(optional(2) OneOptional p1, out optional(3) OneOptional p3);
238
239    optional(1) OneOptional* opOneOptionalProxy(optional(2) OneOptional* p1, out optional(3) OneOptional* p3);
240
241    // Custom mapping operations
242    ["cpp:array"] optional(1) ByteSeq opByteSeq(["cpp:array"] optional(2) ByteSeq p1,
243                                                out ["cpp:array"] optional(3) ByteSeq p3);
244
245    ["cpp:array"] optional(1) BoolSeq opBoolSeq(["cpp:array"] optional(2) BoolSeq p1,
246                                                out ["cpp:array"] optional(3) BoolSeq p3);
247
248    ["cpp:array"] optional(1) ShortSeq opShortSeq(["cpp:array"] optional(2) ShortSeq p1,
249                                                  out ["cpp:array"] optional(3) ShortSeq p3);
250
251    ["cpp:range:array"] optional(1) IntSeq opIntSeq(["cpp:range:array"] optional(2) IntSeq p1,
252                                                    out ["cpp:range:array"] optional(3) IntSeq p3);
253
254    ["cpp:range:array"] optional(1) LongSeq opLongSeq(["cpp:range:array"] optional(2) LongSeq p1,
255                                                      out ["cpp:range:array"] optional(3) LongSeq p3);
256
257    ["cpp:range:array"] optional(1) FloatSeq opFloatSeq(["cpp:range:array"] optional(2) FloatSeq p1,
258                                                        out ["cpp:range:array"] optional(3) FloatSeq p3);
259
260    ["cpp:range:array"] optional(1) DoubleSeq opDoubleSeq(["cpp:range:array"] optional(2) DoubleSeq p1,
261                                                          out ["cpp:range:array"] optional(3) DoubleSeq p3);
262
263    ["cpp:range"] optional(1) StringSeq opStringSeq(["cpp:range"] optional(2) StringSeq p1,
264                                                    out ["cpp:range"] optional(3) StringSeq p3);
265
266    ["cpp:array"] optional(1) SmallStructSeq opSmallStructSeq(["cpp:array"] optional(2) SmallStructSeq p1,
267                                                              out ["cpp:array"] optional(3) SmallStructSeq p3);
268
269    ["cpp:array"] optional(1) SmallStructList opSmallStructList(["cpp:array"] optional(2) SmallStructList p1,
270                                                                out ["cpp:array"] optional(3) SmallStructList p3);
271
272    ["cpp:array"] optional(1) FixedStructSeq opFixedStructSeq(["cpp:array"] optional(2) FixedStructSeq p1,
273                                                              out ["cpp:array"] optional(3) FixedStructSeq p3);
274
275    ["cpp:array"] optional(1) FixedStructList opFixedStructList(["cpp:array"] optional(2) FixedStructList p1,
276                                                                out ["cpp:array"] optional(3) FixedStructList p3);
277
278    ["cpp:range"] optional(1) VarStructSeq opVarStructSeq(["cpp:range"] optional(2) VarStructSeq p1,
279                                                          out ["cpp:range"] optional(3) VarStructSeq p3);
280
281    optional(1) Serializable opSerializable(optional(2) Serializable p1, out optional(3) Serializable p3);
282
283    optional(1) IntIntDict opIntIntDict(optional(2) IntIntDict p1, out optional(3) IntIntDict p3);
284
285    optional(1) StringIntDict opStringIntDict(optional(2) StringIntDict p1, out optional(3) StringIntDict p3);
286
287    optional(1) IntOneOptionalDict opIntOneOptionalDict(optional(2) IntOneOptionalDict p1, out optional(3) IntOneOptionalDict p3);
288
289    void opClassAndUnknownOptional(A p);
290
291    void sendOptionalClass(bool req, optional(1) OneOptional o);
292
293    void returnOptionalClass(bool req, out optional(1) OneOptional o);
294
295    G opG(G g);
296
297    void opVoid();
298
299    ["marshaled-result"] optional(1) SmallStruct opMStruct1();
300    ["marshaled-result"] optional(1) SmallStruct opMStruct2(optional(2) SmallStruct p1,
301                                                            out optional(3)SmallStruct p2);
302
303    ["marshaled-result"] optional(1) StringSeq opMSeq1();
304    ["marshaled-result"] optional(1) StringSeq opMSeq2(optional(2) StringSeq p1,
305                                                       out optional(3) StringSeq p2);
306
307    ["marshaled-result"] optional(1) StringIntDict opMDict1();
308    ["marshaled-result"] optional(1) StringIntDict opMDict2(optional(2) StringIntDict p1,
309                                                            out optional(3) StringIntDict p2);
310
311    ["marshaled-result"] optional(1) G opMG1();
312    ["marshaled-result"] optional(1) G opMG2(optional(2) G p1, out optional(3) G p2);
313
314    bool supportsRequiredParams();
315
316    bool supportsJavaSerializable();
317
318    bool supportsCsharpSerializable();
319
320    bool supportsCppStringView();
321
322    bool supportsNullOptional();
323}
324
325}
326