summaryrefslogtreecommitdiff
path: root/TAO/tao/IFR_Client/IFR_Base.pidl
blob: e1948a7a13967e5e3a7985ee531c11b58f2b5373 (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
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
//
// $Id$
//
// ================================================================
//
// = LIBRARY
//   TAO_IFR_Client
//
// = FILENAME
//   IFR_Base.pidl
//
// = DESCRIPTION
//   This file was used to generate the code in IFR_BaseC.{h,i,cpp}.
//   The original file Interface.idl was split into four pieces, to
//   keep the generated files to a manageable size and reduce build
//   time. This IDL file contains the abstract base interfaces of
//   the IFR as well as many of the non-interface data types used
//   by all other IFR interfaces.
//
//   1. Patch this pidl file with
//
//      patch < diffs/IFR_Base.pidl.diff
//
//   This will remove the CORBA module, rename most types foo
//   declared in it as CORBA_foo, unalias the simple typedefs
//   which don't have a CORBA_ analog in corbafwd.h.
//
//   2. Generate the code. The command used to generate code from this
//   IDL file is:
//
//     tao_idl -o orig -Ge 1 -I.. \
//          -Wb,export_macro=TAO_IFR_Client_Export \
//          -Wb,export_include=ifr_client_export.h \
//          -Wb,pre_include="ace/pre.h" \
//          -Wb,post_include="ace/post.h" \
//          IFR_Base.pidl
//
//   3. Copy the generated files to the current directory.
//
//   4. Patch the generated files, using
//
//      patch < diffs/IFR_BaseC.h.diff
//      patch < diffs/IFR_BaseC.i.diff
//      patch < diffs/IFR_BaseC.cpp.diff
//
//   If this fails for some reason, the files must be patched
//   by hand, and the diff files regenerated with
//
//      diff -wbu orig/IFR_BaseC.h IFR_BaseC.h > diffs/IFR_BaseC.h.diff
//      diff -wbu orig/IFR_BaseC.i IFR_BaseC.i > diffs/IFR_BaseC.i.diff
//      diff -wbu orig/IFR_BaseC.cpp IFR_BaseC.cpp > diffs/IFR_BaseC.cpp.diff
//
//   5. Restore IFR_Base.pidl.
//
//   To regenerate the skeleton files IFR_BaseS.{h,i,cpp} and
//   IFR_BaseS_T.{h,i.cpp} in ACE_ROOT/TAO/orbsvcs/IFR_Service, use the
//   command
//
//     tao_idl -o ../../orbsvcs/IFR_Service/orig -Ge 1 \
//          -Wb,pre_include="ace/pre.h" \
//          -Wb,post_include="ace/post.h" \
//          IFR_Base.pidl
//
// ================================================================

#ifndef _IFR_BASE_IDL_
#define _IFR_BASE_IDL_

#pragma prefix "omg.org"

module CORBA
{
  typedef string Identifier;
  typedef string ScopedName;
  typedef string RepositoryId;

  enum DefinitionKind
  {
    dk_none,
    dk_all,
    dk_Attribute,
    dk_Constant,
    dk_Exception,
    dk_Interface,
    dk_Module,
    dk_Operation,
    dk_Typedef,
    dk_Alias,
    dk_Struct,
    dk_Union,
    dk_Enum,
    dk_Primitive,
    dk_String,
    dk_Sequence,
    dk_Array,
    dk_Repository,
    dk_Wstring,
    dk_Fixed,
    dk_Value,
    dk_ValueBox,
    dk_ValueMember,
    dk_Native,
    dk_AbstractInterface,
    dk_LocalInterface
  };

  interface IRObject
  {
    // read interface
    readonly attribute DefinitionKind def_kind;
    // write interface
    void destroy ();
  };

  typedef string VersionSpec;

  interface Contained;
  interface Repository;
  interface Container;

  interface Contained : IRObject
  {
    // read/write interface
    attribute RepositoryId id;
    attribute Identifier name;
    attribute VersionSpec version;

    // read interface
    readonly attribute Container defined_in;
    readonly attribute ScopedName absolute_name;
    readonly attribute Repository containing_repository;

    struct Description
    {
      DefinitionKind kind;
      any value;
    };

    Description describe ();

    // write interface
    void move (
        in Container new_container,
        in Identifier new_name,
        in VersionSpec new_version
      );
  };

  typedef sequence <Contained> ContainedSeq;

  interface ModuleDef;
  interface ConstantDef;
  interface IDLType;
  interface StructDef;
  interface UnionDef;
  interface EnumDef;
  interface AliasDef;
  interface InterfaceDef;
  typedef sequence<InterfaceDef> InterfaceDefSeq;
  interface ExceptionDef;
  interface NativeDef;
  interface ValueDef;
  typedef sequence<ValueDef> ValueDefSeq;
  interface ValueBoxDef;
  interface AbstractInterfaceDef;
  typedef sequence<AbstractInterfaceDef> AbstractInterfaceDefSeq;
  interface LocalInterfaceDef;
  typedef sequence<LocalInterfaceDef> LocalInterfaceDefSeq;

  struct StructMember
  {
    Identifier name;
    TypeCode type;
    IDLType type_def;
  };

  typedef sequence <StructMember> StructMemberSeq;

  struct Initializer
  {
    StructMemberSeq members;
    Identifier name;
  };

  typedef sequence <Initializer> InitializerSeq;

  struct UnionMember
  {
    Identifier name;
    any label;
    TypeCode type;
    IDLType type_def;
  };

  typedef sequence <UnionMember> UnionMemberSeq;
  typedef sequence <Identifier> EnumMemberSeq;

  interface Container : IRObject
  {
    // read interface
    Contained lookup (
        in ScopedName search_name
      );
    ContainedSeq contents (
        in DefinitionKind limit_type,
        in boolean exclude_inherited
      );
    ContainedSeq lookup_name (
        in Identifier search_name,
        in long levels_to_search,
        in DefinitionKind limit_type,
        in boolean exclude_inherited
      );
    struct Description
    {
      Contained contained_object;
      DefinitionKind kind;
      any value;
    };

    typedef sequence<Description> DescriptionSeq;

    DescriptionSeq describe_contents (
        in DefinitionKind limit_type,
        in boolean exclude_inherited,
        in long max_returned_objs
      );
    // write interface
    ModuleDef create_module (
        in RepositoryId id,
        in Identifier name,
        in VersionSpec version
      );
    ConstantDef create_constant (
        in RepositoryId id,
        in Identifier name,
        in VersionSpec version,
        in IDLType type,
        in any value
      );
    StructDef create_struct (
        in RepositoryId id,
        in Identifier name,
        in VersionSpec version,
        in StructMemberSeq members
      );
    UnionDef create_union (
        in RepositoryId id,
        in Identifier name,
        in VersionSpec version,
        in IDLType discriminator_type,
        in UnionMemberSeq members
      );
    EnumDef create_enum (
        in RepositoryId id,
        in Identifier name,
        in VersionSpec version,
        in EnumMemberSeq members
      );
    AliasDef create_alias (
        in RepositoryId id,
        in Identifier name,
        in VersionSpec version,
        in IDLType original_type
      );
    InterfaceDef create_interface (
        in RepositoryId id,
        in Identifier name,
        in VersionSpec version,
        in InterfaceDefSeq base_interfaces
      );
    ValueDef create_value(
        in RepositoryId id,
        in Identifier name,
        in VersionSpec version,
        in boolean is_custom,
        in boolean is_abstract,
        in ValueDef base_value,
        in boolean is_truncatable,
        in ValueDefSeq abstract_base_values,
        in InterfaceDefSeq supported_interfaces,
        in InitializerSeq initializers
      );
    ValueBoxDef create_value_box(
        in RepositoryId id,
        in Identifier name,
        in VersionSpec version,
        in IDLType original_type_def
      );
    ExceptionDef create_exception(
        in RepositoryId id,
        in Identifier name,
        in VersionSpec version,
        in StructMemberSeq members
      );
    NativeDef create_native(
        in RepositoryId id,
        in Identifier name,
        in VersionSpec version
      );
    AbstractInterfaceDef create_abstract_interface (
        in RepositoryId id,
        in Identifier name,
        in VersionSpec version,
        in AbstractInterfaceDefSeq base_interfaces
      );
    LocalInterfaceDef create_local_interface (
        in RepositoryId id,
        in Identifier name,
        in VersionSpec version,
        in InterfaceDefSeq base_interfaces
      );
  };

  interface IDLType : IRObject
  {
    readonly attribute TypeCode type;
  };

  interface TypedefDef : Contained, IDLType
  {
  };

  struct TypeDescription
  {
    Identifier name;
    RepositoryId id;
    RepositoryId defined_in;
    VersionSpec version;
    TypeCode type;
  };
};

#pragma prefix ""

#endif /* _IFR_BASE_IDL_ */