widl: Simplify correlation descriptor code.
[wine] / dlls / rpcrt4 / tests / server.idl
1 /*
2  * A simple interface to test the RPC server.
3  *
4  * Copyright (C) Google 2007 (Dan Hipschman)
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19  */
20
21 #include "server_defines.h"
22
23 typedef struct tag_vector
24 {
25   int x;
26   int y;
27   int z;
28 } vector_t;
29
30 [
31   uuid(00000000-4114-0704-2301-000000000000),
32   implicit_handle(handle_t IServer_IfHandle)
33 ]
34 interface IServer
35 {
36   typedef struct
37   {
38     int *pi;
39     int **ppi;
40     int ***pppi;
41   } pints_t;
42
43   typedef struct
44   {
45     char *pc;
46     short *ps;
47     long *pl;
48     float *pf;
49     double *pd;
50   } ptypes_t;
51
52   typedef struct
53   {
54     vector_t *pu;
55     vector_t **pv;
56   } pvectors_t;
57
58   typedef struct
59   {
60     [switch_is(s)] union
61     {
62       [case(SUN_I)] int i;
63       [case(SUN_F1, SUN_F2)] float f;
64       [case(SUN_PI)] int *pi;
65     } u;
66
67     int s;
68   } sun_t;
69
70   int int_return(void);
71   int square(int x);
72   int sum(int x, int y);
73   void square_out(int x, [out] int *y);
74   void square_ref([in, out] int *x);
75   int str_length([string] const char *s);
76   int dot_self(vector_t *v);
77   double square_half(double x, [out] double *y);
78   float square_half_float(float x, [out] float *y);
79   long square_half_long(long x, [out] long *y);
80   int sum_fixed_array(int a[5]);
81   int pints_sum(pints_t *pints);
82   double ptypes_sum(ptypes_t *ptypes);
83   int dot_pvectors(pvectors_t *pvectors);
84
85   /* don't use this anywhere except in sp_t */
86   typedef struct
87   {
88     int x;
89   } sp_inner_t;
90
91   typedef struct
92   {
93     int x;
94     sp_inner_t *s;
95   } sp_t;
96
97   int sum_sp(sp_t *sp);
98   double square_sun(sun_t *su);
99
100   typedef struct test_list
101   {
102     int t;
103     [switch_is(t)] union
104     {
105       [case(TL_NULL)] int x;  /* end of list */
106       [case(TL_LIST)] struct test_list *tail;
107     } u;
108   } test_list_t;
109
110   int test_list_length(test_list_t *ls);
111   int sum_fixed_int_3d(int m[2][3][4]);
112   int sum_conf_array([size_is(n)] int x[], int n);
113   int sum_var_array([length_is(n)] int x[20], int n);
114   int dot_two_vectors(vector_t vs[2]);
115
116   typedef struct
117   {
118     int n;
119     [size_is(n)] int ca[];
120   } cs_t;
121
122   typedef struct
123   {
124     int *pn;
125     [size_is(*pn)] int *ca1;
126     [size_is(n * 2)] int *ca2;
127     int n;
128   } cps_t;
129
130   int sum_cs(cs_t *cs);
131   int sum_cps(cps_t *cps);
132
133   void stop(void);
134 }