Tue, 16 Jan 2018 22:52:07 -0800
Merge
1 /*
2 * Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
26 // IDL
27 // File: DynamicAny.idl
29 #ifndef _DYNAMIC_ANY_IDL_
30 #define _DYNAMIC_ANY_IDL_
32 #pragma prefix "omg.org"
33 #include <orb.idl>
35 /**
36 * An any can be passed to a program that doesn't have any static information for the
37 type of the any (code generated for the type by an IDL compiler has not been
38 compiled with the object implementation). As a result, the object receiving the any
39 does not have a portable method of using it.
40 <P>DynAnys enable traversal of the data value associated with an any at
41 runtime and extraction of the primitive constituents of the data value. This is especially
42 helpful for writing powerful generic servers (bridges, event channels supporting
43 filtering).
44 <P>Similarly, this facility enables the construction of an any at runtime, without having
45 static knowledge of its type. This is especially helpful for writing generic clients
46 (bridges, browsers, debuggers, user interface tools).
47 */
48 module DynamicAny {
49 /**
50 * Any values can be dynamically interpreted (traversed) and constructed through DynAny objects.
51 * A DynAny object is associated with a data value which corresponds to a copy of the value
52 * inserted into an any.
53 * <P>A DynAny object may be viewed as an ordered collection of component DynAnys.
54 * For DynAnys representing a basic type, such as long, or a type without components,
55 * such as an empty exception, the ordered collection of components is empty.
56 * Each DynAny object maintains the notion of a current position into its collection
57 * of component DynAnys. The current position is identified by an index value that runs
58 * from 0 to n-1, where n is the number of components.
59 * The special index value -1 indicates a current position that points nowhere.
60 * For values that cannot have a current position (such as an empty exception),
61 * the index value is fixed at -1.
62 * If a DynAny is initialized with a value that has components, the index is initialized to 0.
63 * After creation of an uninitialized DynAny (that is, a DynAny that has no value but a TypeCode
64 * that permits components), the current position depends on the type of value represented by
65 * the DynAny. (The current position is set to 0 or -1, depending on whether the new DynAny
66 * gets default values for its components.)
67 * <P>The iteration operations rewind, seek, and next can be used to change the current position
68 * and the current_component operation returns the component at the current position.
69 * The component_count operation returns the number of components of a DynAny.
70 * Collectively, these operations enable iteration over the components of a DynAny, for example,
71 * to (recursively) examine its contents.
72 * <P>A constructed DynAny object is a DynAny object associated with a constructed type.
73 * There is a different interface, inheriting from the DynAny interface, associated with
74 * each kind of constructed type in IDL (fixed, enum, struct, sequence, union, array,
75 * exception, and value type).
76 * <P>A constructed DynAny object exports operations that enable the creation of new DynAny objects,
77 * each of them associated with a component of the constructed data value.
78 * As an example, a DynStruct is associated with a struct value. This means that the DynStruct
79 * may be seen as owning an ordered collection of components, one for each structure member.
80 * The DynStruct object exports operations that enable the creation of new DynAny objects,
81 * each of them associated with a member of the struct.
82 * <P>If a DynAny object has been obtained from another (constructed) DynAny object,
83 * such as a DynAny representing a structure member that was created from a DynStruct,
84 * the member DynAny is logically contained in the DynStruct.
85 * Calling an insert or get operation leaves the current position unchanged.
86 * Destroying a top-level DynAny object (one that was not obtained as a component of another DynAny)
87 * also destroys any component DynAny objects obtained from it.
88 * Destroying a non-top level DynAny object does nothing.
89 * Invoking operations on a destroyed top-level DynAny or any of its descendants raises OBJECT_NOT_EXIST.
90 * If the programmer wants to destroy a DynAny object but still wants to manipulate some component
91 * of the data value associated with it, then he or she should first create a DynAny for the component
92 * and, after that, make a copy of the created DynAny object.
93 * <P>The behavior of DynAny objects has been defined in order to enable efficient implementations
94 * in terms of allocated memory space and speed of access. DynAny objects are intended to be used
95 * for traversing values extracted from anys or constructing values of anys at runtime.
96 * Their use for other purposes is not recommended.
97 * <P>Insert and get operations are necessary to handle basic DynAny objects
98 * but are also helpful to handle constructed DynAny objects.
99 * Inserting a basic data type value into a constructed DynAny object
100 * implies initializing the current component of the constructed data value
101 * associated with the DynAny object. For example, invoking insert_boolean on a
102 * DynStruct implies inserting a boolean data value at the current position
103 * of the associated struct data value.
104 * A type is consistent for inserting or extracting a value if its TypeCode is equivalent to
105 * the TypeCode contained in the DynAny or, if the DynAny has components, is equivalent to the TypeCode
106 * of the DynAny at the current position.
107 * <P>DynAny and DynAnyFactory objects are intended to be local to the process in which they are
108 * created and used. This means that references to DynAny and DynAnyFactory objects cannot be exported
109 * to other processes, or externalized with ORB.object_to_string().
110 * If any attempt is made to do so, the offending operation will raise a MARSHAL system exception.
111 * Since their interfaces are specified in IDL, DynAny objects export operations defined in the standard
112 * org.omg.CORBA.Object interface. However, any attempt to invoke operations exported through the Object
113 * interface may raise the standard NO_IMPLEMENT exception.
114 * An attempt to use a DynAny object with the DII may raise the NO_IMPLEMENT exception.
115 */
116 interface DynAny {
117 #pragma sun_localservant DynAny ""
118 exception InvalidValue {};
119 exception TypeMismatch {};
121 /**
122 * Returns the TypeCode associated with this DynAny object.
123 * A DynAny object is created with a TypeCode value assigned to it.
124 * This TypeCode value determines the type of the value handled through the DynAny object.
125 * Note that the TypeCode associated with a DynAny object is initialized at the time the
126 * DynAny is created and cannot be changed during lifetime of the DynAny object.
127 *
128 * @return The TypeCode associated with this DynAny object
129 */
130 CORBA::TypeCode type();
132 /**
133 * Initializes the value associated with a DynAny object with the value
134 * associated with another DynAny object.
135 * The current position of the target DynAny is set to zero for values that have components
136 * and to -1 for values that do not have components.
137 *
138 * @param dyn_any
139 * @exception TypeMismatch if the type of the passed DynAny is not equivalent to the type of target DynAny
140 */
141 void assign(in DynAny dyn_any)
142 raises(TypeMismatch);
144 /**
145 * Initializes the value associated with a DynAny object with the value contained in an any.
146 * The current position of the target DynAny is set to zero for values that have components
147 * and to -1 for values that do not have components.
148 *
149 * @exception TypeMismatch if the type of the passed Any is not equivalent to the type of target DynAny
150 * @exception InvalidValue if the passed Any does not contain a legal value (such as a null string)
151 */
152 void from_any(in any value)
153 raises(TypeMismatch, InvalidValue);
155 /**
156 * Creates an any value from a DynAny object.
157 * A copy of the TypeCode associated with the DynAny object is assigned to the resulting any.
158 * The value associated with the DynAny object is copied into the any.
159 *
160 * @return a new Any object with the same value and TypeCode
161 */
162 any to_any();
164 /**
165 * Compares two DynAny values for equality.
166 * Two DynAny values are equal if their TypeCodes are equivalent and, recursively, all component DynAnys
167 * have equal values.
168 * The current position of the two DynAnys being compared has no effect on the result of equal.
169 *
170 * @return true of the DynAnys are equal, false otherwise
171 */
172 boolean equal(in DynAny dyn_any);
174 /**
175 * Destroys a DynAny object.
176 * This operation frees any resources used to represent the data value associated with a DynAny object.
177 * It must be invoked on references obtained from one of the creation operations on the ORB interface
178 * or on a reference returned by DynAny.copy() to avoid resource leaks.
179 * Invoking destroy on component DynAny objects (for example, on objects returned by the
180 * current_component operation) does nothing.
181 * Destruction of a DynAny object implies destruction of all DynAny objects obtained from it.
182 * That is, references to components of a destroyed DynAny become invalid.
183 * Invocations on such references raise OBJECT_NOT_EXIST.
184 * It is possible to manipulate a component of a DynAny beyond the life time of the DynAny
185 * from which the component was obtained by making a copy of the component with the copy operation
186 * before destroying the DynAny from which the component was obtained.
187 */
188 void destroy();
190 /**
191 * Creates a new DynAny object whose value is a deep copy of the DynAny on which it is invoked.
192 * The operation is polymorphic, that is, invoking it on one of the types derived from DynAny,
193 * such as DynStruct, creates the derived type but returns its reference as the DynAny base type.
194 *
195 * @return a deep copy of the DynAny object
196 */
197 DynAny copy();
199 /**
200 * Inserts a boolean value into the DynAny.
201 *
202 * @exception InvalidValue if this DynAny has components but has a current position of -1
203 * @exception TypeMismatch if called on a DynAny whose current component itself has components
204 */
205 void insert_boolean(in boolean value)
206 raises(TypeMismatch, InvalidValue);
208 /**
209 * Inserts a byte value into the DynAny. The IDL octet data type is mapped to the Java byte data type.
210 *
211 * @exception InvalidValue if this DynAny has components but has a current position of -1
212 * @exception TypeMismatch if called on a DynAny whose current component itself has components
213 */
214 void insert_octet(in octet value)
215 raises(TypeMismatch, InvalidValue);
217 /**
218 * Inserts a char value into the DynAny.
219 *
220 * @exception InvalidValue if this DynAny has components but has a current position of -1
221 * @exception TypeMismatch if called on a DynAny whose current component itself has components
222 */
223 void insert_char(in char value)
224 raises(TypeMismatch, InvalidValue);
226 /**
227 * Inserts a short value into the DynAny.
228 *
229 * @exception InvalidValue if this DynAny has components but has a current position of -1
230 * @exception TypeMismatch if called on a DynAny whose current component itself has components
231 */
232 void insert_short(in short value)
233 raises(TypeMismatch, InvalidValue);
235 /**
236 * Inserts a short value into the DynAny. The IDL ushort data type is mapped to the Java short data type.
237 *
238 * @exception InvalidValue if this DynAny has components but has a current position of -1
239 * @exception TypeMismatch if called on a DynAny whose current component itself has components
240 */
241 void insert_ushort(in unsigned short value)
242 raises(TypeMismatch, InvalidValue);
244 /**
245 * Inserts an integer value into the DynAny. The IDL long data type is mapped to the Java int data type.
246 *
247 * @exception InvalidValue if this DynAny has components but has a current position of -1
248 * @exception TypeMismatch if called on a DynAny whose current component itself has components
249 */
250 void insert_long(in long value)
251 raises(TypeMismatch, InvalidValue);
253 /**
254 * Inserts an integer value into the DynAny. The IDL ulong data type is mapped to the Java int data type.
255 *
256 * @exception InvalidValue if this DynAny has components but has a current position of -1
257 * @exception TypeMismatch if called on a DynAny whose current component itself has components
258 */
259 void insert_ulong(in unsigned long value)
260 raises(TypeMismatch, InvalidValue);
262 /**
263 * Inserts a float value into the DynAny.
264 *
265 * @exception InvalidValue if this DynAny has components but has a current position of -1
266 * @exception TypeMismatch if called on a DynAny whose current component itself has components
267 */
268 void insert_float(in float value)
269 raises(TypeMismatch, InvalidValue);
271 /**
272 * Inserts a double value into the DynAny.
273 *
274 * @exception InvalidValue if this DynAny has components but has a current position of -1
275 * @exception TypeMismatch if called on a DynAny whose current component itself has components
276 */
277 void insert_double(in double value)
278 raises(TypeMismatch, InvalidValue);
280 /**
281 * Inserts a string value into the DynAny.
282 * Both bounded and unbounded strings are inserted using this method.
283 *
284 * @exception InvalidValue if this DynAny has components but has a current position of -1
285 * @exception InvalidValue if the string inserted is longer than the bound of a bounded string
286 * @exception TypeMismatch if called on a DynAny whose current component itself has components
287 */
288 void insert_string(in string value)
289 raises(TypeMismatch, InvalidValue);
291 /**
292 * Inserts a reference to a CORBA object into the DynAny.
293 *
294 * @exception InvalidValue if this DynAny has components but has a current position of -1
295 * @exception TypeMismatch if called on a DynAny whose current component itself has components
296 */
297 void insert_reference(in Object value)
298 raises(TypeMismatch, InvalidValue);
300 /**
301 * Inserts a TypeCode object into the DynAny.
302 *
303 * @exception InvalidValue if this DynAny has components but has a current position of -1
304 * @exception TypeMismatch if called on a DynAny whose current component itself has components
305 */
306 void insert_typecode(in CORBA::TypeCode value)
307 raises(TypeMismatch, InvalidValue);
309 /**
310 * Inserts a long value into the DynAny. The IDL long long data type is mapped to the Java long data type.
311 *
312 * @exception InvalidValue if this DynAny has components but has a current position of -1
313 * @exception TypeMismatch if called on a DynAny whose current component itself has components
314 */
315 void insert_longlong(in long long value)
316 raises(TypeMismatch, InvalidValue);
318 /**
319 * Inserts a long value into the DynAny.
320 * The IDL unsigned long long data type is mapped to the Java long data type.
321 *
322 * @exception InvalidValue if this DynAny has components but has a current position of -1
323 * @exception TypeMismatch if called on a DynAny whose current component itself has components
324 */
325 void insert_ulonglong(in unsigned long long value)
326 raises(TypeMismatch, InvalidValue);
328 // void insert_longdouble(in long double value)
329 // raises(TypeMismatch, InvalidValue);
331 /**
332 * Inserts a char value into the DynAny. The IDL wchar data type is mapped to the Java char data type.
333 *
334 * @exception InvalidValue if this DynAny has components but has a current position of -1
335 * @exception TypeMismatch if called on a DynAny whose current component itself has components
336 */
337 void insert_wchar(in wchar value)
338 raises(TypeMismatch, InvalidValue);
340 /**
341 * Inserts a string value into the DynAny.
342 * Both bounded and unbounded strings are inserted using this method.
343 *
344 * @exception InvalidValue if this DynAny has components but has a current position of -1
345 * @exception InvalidValue if the string inserted is longer than the bound of a bounded string
346 */
347 void insert_wstring(in wstring value)
348 raises(TypeMismatch, InvalidValue);
350 /**
351 * Inserts an Any value into the Any represented by this DynAny.
352 *
353 * @exception InvalidValue if this DynAny has components but has a current position of -1
354 * @exception TypeMismatch if called on a DynAny whose current component itself has components
355 */
356 void insert_any(in any value)
357 raises(TypeMismatch, InvalidValue);
359 /**
360 * Inserts the Any value contained in the parameter DynAny into the Any represented by this DynAny.
361 *
362 * @exception InvalidValue if this DynAny has components but has a current position of -1
363 * @exception TypeMismatch if called on a DynAny whose current component itself has components
364 */
365 void insert_dyn_any(in DynAny value)
366 raises(TypeMismatch, InvalidValue);
368 /**
369 * Inserts a reference to a Serializable object into this DynAny.
370 * The IDL ValueBase type is mapped to the Java Serializable type.
371 *
372 * @exception InvalidValue if this DynAny has components but has a current position of -1
373 * @exception TypeMismatch if called on a DynAny whose current component itself has components
374 */
375 void insert_val(in ValueBase value)
376 raises(TypeMismatch, InvalidValue);
378 /**
379 * Extracts the boolean value from this DynAny.
380 *
381 * @exception TypeMismatch if the accessed component in the DynAny is of a type
382 * that is not equivalent to the requested type.
383 * @exception TypeMismatch if called on a DynAny whose current component itself has components
384 * @exception InvalidValue if this DynAny has components but has a current position of -1
385 */
386 boolean get_boolean()
387 raises(TypeMismatch, InvalidValue);
389 /**
390 * Extracts the byte value from this DynAny. The IDL octet data type is mapped to the Java byte data type.
391 *
392 * @exception TypeMismatch if the accessed component in the DynAny is of a type
393 * that is not equivalent to the requested type.
394 * @exception TypeMismatch if called on a DynAny whose current component itself has components
395 * @exception InvalidValue if this DynAny has components but has a current position of -1
396 */
397 octet get_octet()
398 raises(TypeMismatch, InvalidValue);
400 /**
401 * Extracts the char value from this DynAny.
402 *
403 * @exception TypeMismatch if the accessed component in the DynAny is of a type
404 * that is not equivalent to the requested type.
405 * @exception TypeMismatch if called on a DynAny whose current component itself has components
406 * @exception InvalidValue if this DynAny has components but has a current position of -1
407 */
408 char get_char()
409 raises(TypeMismatch, InvalidValue);
411 /**
412 * Extracts the short value from this DynAny.
413 *
414 * @exception TypeMismatch if the accessed component in the DynAny is of a type
415 * that is not equivalent to the requested type.
416 * @exception TypeMismatch if called on a DynAny whose current component itself has components
417 * @exception InvalidValue if this DynAny has components but has a current position of -1
418 */
419 short get_short()
420 raises(TypeMismatch, InvalidValue);
422 /**
423 * Extracts the short value from this DynAny. The IDL ushort data type is mapped to the Java short data type.
424 *
425 * @exception TypeMismatch if the accessed component in the DynAny is of a type
426 * that is not equivalent to the requested type.
427 * @exception TypeMismatch if called on a DynAny whose current component itself has components
428 * @exception InvalidValue if this DynAny has components but has a current position of -1
429 */
430 unsigned short get_ushort()
431 raises(TypeMismatch, InvalidValue);
433 /**
434 * Extracts the integer value from this DynAny. The IDL long data type is mapped to the Java int data type.
435 *
436 * @exception TypeMismatch if the accessed component in the DynAny is of a type
437 * that is not equivalent to the requested type.
438 * @exception TypeMismatch if called on a DynAny whose current component itself has components
439 * @exception InvalidValue if this DynAny has components but has a current position of -1
440 */
441 long get_long()
442 raises(TypeMismatch, InvalidValue);
444 /**
445 * Extracts the integer value from this DynAny. The IDL ulong data type is mapped to the Java int data type.
446 *
447 * @exception TypeMismatch if the accessed component in the DynAny is of a type
448 * that is not equivalent to the requested type.
449 * @exception TypeMismatch if called on a DynAny whose current component itself has components
450 * @exception InvalidValue if this DynAny has components but has a current position of -1
451 */
452 unsigned long get_ulong()
453 raises(TypeMismatch, InvalidValue);
455 /**
456 * Extracts the float value from this DynAny.
457 *
458 * @exception TypeMismatch if the accessed component in the DynAny is of a type
459 * that is not equivalent to the requested type.
460 * @exception TypeMismatch if called on a DynAny whose current component itself has components
461 * @exception InvalidValue if this DynAny has components but has a current position of -1
462 */
463 float get_float()
464 raises(TypeMismatch, InvalidValue);
466 /**
467 * Extracts the double value from this DynAny.
468 *
469 * @exception TypeMismatch if the accessed component in the DynAny is of a type
470 * that is not equivalent to the requested type.
471 * @exception TypeMismatch if called on a DynAny whose current component itself has components
472 * @exception InvalidValue if this DynAny has components but has a current position of -1
473 */
474 double get_double()
475 raises(TypeMismatch, InvalidValue);
477 /**
478 * Extracts the string value from this DynAny.
479 * Both bounded and unbounded strings are extracted using this method.
480 *
481 * @exception TypeMismatch if the accessed component in the DynAny is of a type
482 * that is not equivalent to the requested type.
483 * @exception TypeMismatch if called on a DynAny whose current component itself has components
484 * @exception InvalidValue if this DynAny has components but has a current position of -1
485 */
486 string get_string()
487 raises(TypeMismatch, InvalidValue);
489 /**
490 * Extracts the reference to a CORBA Object from this DynAny.
491 *
492 * @exception TypeMismatch if the accessed component in the DynAny is of a type
493 * that is not equivalent to the requested type.
494 * @exception TypeMismatch if called on a DynAny whose current component itself has components
495 * @exception InvalidValue if this DynAny has components but has a current position of -1
496 */
497 Object get_reference()
498 raises(TypeMismatch, InvalidValue);
500 /**
501 * Extracts the TypeCode object from this DynAny.
502 *
503 * @exception TypeMismatch if the accessed component in the DynAny is of a type
504 * that is not equivalent to the requested type.
505 * @exception TypeMismatch if called on a DynAny whose current component itself has components
506 * @exception InvalidValue if this DynAny has components but has a current position of -1
507 */
508 CORBA::TypeCode get_typecode()
509 raises(TypeMismatch, InvalidValue);
511 /**
512 * Extracts the long value from this DynAny. The IDL long long data type is mapped to the Java long data type.
513 *
514 * @exception TypeMismatch if the accessed component in the DynAny is of a type
515 * that is not equivalent to the requested type.
516 * @exception TypeMismatch if called on a DynAny whose current component itself has components
517 * @exception InvalidValue if this DynAny has components but has a current position of -1
518 */
519 long long get_longlong()
520 raises(TypeMismatch, InvalidValue);
522 /**
523 * Extracts the long value from this DynAny.
524 * The IDL unsigned long long data type is mapped to the Java long data type.
525 *
526 * @exception TypeMismatch if the accessed component in the DynAny is of a type
527 * that is not equivalent to the requested type.
528 * @exception TypeMismatch if called on a DynAny whose current component itself has components
529 * @exception InvalidValue if this DynAny has components but has a current position of -1
530 */
531 unsigned long long get_ulonglong()
532 raises(TypeMismatch, InvalidValue);
533 // long double get_longdouble()
534 // raises(TypeMismatch, InvalidValue);
536 /**
537 * Extracts the long value from this DynAny. The IDL wchar data type is mapped to the Java char data type.
538 *
539 * @exception TypeMismatch if the accessed component in the DynAny is of a type
540 * that is not equivalent to the requested type.
541 * @exception TypeMismatch if called on a DynAny whose current component itself has components
542 * @exception InvalidValue if this DynAny has components but has a current position of -1
543 */
544 wchar get_wchar()
545 raises(TypeMismatch, InvalidValue);
547 /**
548 * Extracts the string value from this DynAny.
549 * Both bounded and unbounded strings are extracted using this method.
550 *
551 * @exception TypeMismatch if the accessed component in the DynAny is of a type
552 * that is not equivalent to the requested type.
553 * @exception TypeMismatch if called on a DynAny whose current component itself has components
554 */
555 wstring get_wstring()
556 raises(TypeMismatch, InvalidValue);
558 /**
559 * Extracts an Any value contained in the Any represented by this DynAny.
560 *
561 * @exception TypeMismatch if the accessed component in the DynAny is of a type
562 * that is not equivalent to the requested type.
563 * @exception TypeMismatch if called on a DynAny whose current component itself has components
564 * @exception InvalidValue if this DynAny has components but has a current position of -1
565 */
566 any get_any()
567 raises(TypeMismatch, InvalidValue);
569 /**
570 * Extracts the Any value contained in the Any represented by this DynAny and returns it wrapped
571 * into a new DynAny.
572 *
573 * @exception TypeMismatch if the accessed component in the DynAny is of a type
574 * that is not equivalent to the requested type.
575 * @exception TypeMismatch if called on a DynAny whose current component itself has components
576 * @exception InvalidValue if this DynAny has components but has a current position of -1
577 */
578 DynAny get_dyn_any()
579 raises(TypeMismatch, InvalidValue);
581 /**
582 * Extracts a Serializable object from this DynAny.
583 * The IDL ValueBase type is mapped to the Java Serializable type.
584 *
585 * @exception TypeMismatch if the accessed component in the DynAny is of a type
586 * that is not equivalent to the requested type.
587 * @exception TypeMismatch if called on a DynAny whose current component itself has components
588 * @exception InvalidValue if this DynAny has components but has a current position of -1
589 */
590 ValueBase get_val()
591 raises(TypeMismatch, InvalidValue);
593 /**
594 * Sets the current position to index. The current position is indexed 0 to n-1, that is,
595 * index zero corresponds to the first component. The operation returns true if the resulting
596 * current position indicates a component of the DynAny and false if index indicates
597 * a position that does not correspond to a component.
598 * Calling seek with a negative index is legal. It sets the current position to -1 to indicate
599 * no component and returns false. Passing a non-negative index value for a DynAny that does not
600 * have a component at the corresponding position sets the current position to -1 and returns false.
601 */
602 boolean seek(in long index);
604 /**
605 * Is equivalent to seek(0).
606 */
607 void rewind();
609 /**
610 * Advances the current position to the next component.
611 * The operation returns true while the resulting current position indicates a component, false otherwise.
612 * A false return value leaves the current position at -1.
613 * Invoking next on a DynAny without components leaves the current position at -1 and returns false.
614 */
615 boolean next();
617 /**
618 * Returns the number of components of a DynAny.
619 * For a DynAny without components, it returns zero.
620 * The operation only counts the components at the top level.
621 * For example, if component_count is invoked on a DynStruct with a single member,
622 * the return value is 1, irrespective of the type of the member.
623 * <UL>
624 * <LI>For sequences, the operation returns the current number of elements.
625 * <LI>For structures, exceptions, and value types, the operation returns the number of members.
626 * <LI>For arrays, the operation returns the number of elements.
627 * <LI>For unions, the operation returns 2 if the discriminator indicates that a named member is active,
628 * otherwise, it returns 1.
629 * <LI>For DynFixed and DynEnum, the operation returns zero.
630 * </UL>
631 */
632 unsigned long component_count();
634 /**
635 * Returns the DynAny for the component at the current position.
636 * It does not advance the current position, so repeated calls to current_component
637 * without an intervening call to rewind, next, or seek return the same component.
638 * The returned DynAny object reference can be used to get/set the value of the current component.
639 * If the current component represents a complex type, the returned reference can be narrowed
640 * based on the TypeCode to get the interface corresponding to the to the complex type.
641 * Calling current_component on a DynAny that cannot have components,
642 * such as a DynEnum or an empty exception, raises TypeMismatch.
643 * Calling current_component on a DynAny whose current position is -1 returns a nil reference.
644 * The iteration operations, together with current_component, can be used
645 * to dynamically compose an any value. After creating a dynamic any, such as a DynStruct,
646 * current_component and next can be used to initialize all the components of the value.
647 * Once the dynamic value is completely initialized, to_any creates the corresponding any value.
648 *
649 * @exception TypeMismatch If called on a DynAny that cannot have components,
650 * such as a DynEnum or an empty exception
651 */
652 DynAny current_component()
653 raises(TypeMismatch);
654 };
656 /**
657 * DynFixed objects support the manipulation of IDL fixed values.
658 * Because IDL does not have a generic type that can represent fixed types with arbitrary
659 * number of digits and arbitrary scale, the operations use the IDL string type.
660 */
661 interface DynFixed : DynAny {
662 #pragma sun_localservant DynFixed ""
664 /**
665 * Returns the value of a DynFixed.
666 */
667 string get_value();
669 /**
670 * Sets the value of the DynFixed.
671 * The val string must contain a fixed string constant in the same format as used for IDL fixed-point literals.
672 * However, the trailing d or D is optional. The return value is true if val can be represented as the DynFixed
673 * without loss of precision. If val has more fractional digits than can be represented in the DynFixed,
674 * fractional digits are truncated and the return value is false.
675 *
676 * @exception TypeMismatch If val does not contain a valid fixed-point literal or contains extraneous
677 * characters other than leading or trailing white space
678 * @exception InvalidValue If val contains a value whose scale exceeds that of the DynFixed
679 * or is not initialized
680 */
681 boolean set_value(in string val)
682 raises(TypeMismatch, InvalidValue);
683 };
685 /**
686 * DynEnum objects support the manipulation of IDL enumerated values.
687 * The current position of a DynEnum is always -1.
688 */
689 interface DynEnum : DynAny {
690 #pragma sun_localservant DynEnum ""
692 /**
693 * Returns the value of the DynEnum as an IDL identifier.
694 */
695 string get_as_string();
697 /**
698 * Sets the value of the DynEnum to the enumerated value whose IDL identifier is passed in the value parameter.
699 *
700 * @exception InvalidValue If value contains a string that is not a valid IDL identifier
701 * for the corresponding enumerated type
702 */
703 void set_as_string(in string value)
704 raises(InvalidValue);
706 /**
707 * Returns the value of the DynEnum as the enumerated value's ordinal value.
708 * Enumerators have ordinal values 0 to n-1, as they appear from left to right
709 * in the corresponding IDL definition.
710 */
711 unsigned long get_as_ulong();
713 /**
714 * Sets the value of the DynEnum as the enumerated value's ordinal value.
715 *
716 * @exception InvalidValue If value contains a value that is outside the range of ordinal values
717 * for the corresponding enumerated type
718 */
719 void set_as_ulong(in unsigned long value)
720 raises(InvalidValue);
721 };
723 typedef string FieldName;
725 /**
726 * NameValuePairs associate a name with an Any object.
727 */
728 struct NameValuePair {
729 /**
730 * The name associated with the Any.
731 */
732 FieldName id;
733 /**
734 * The Any value associated with the name.
735 */
736 any value;
737 };
738 typedef sequence<NameValuePair> NameValuePairSeq;
740 /**
741 * NameDynAnyPairs associate a name with an DynAny object.
742 */
743 struct NameDynAnyPair {
744 /**
745 * The name associated with the DynAny.
746 */
747 FieldName id;
748 /**
749 * The DynAny value associated with the name.
750 */
751 DynAny value;
752 };
753 typedef sequence<NameDynAnyPair> NameDynAnyPairSeq;
755 /**
756 * DynStruct objects support the manipulation of IDL struct and exception values.
757 * Members of the exceptions are handled in the same way as members of a struct.
758 */
759 interface DynStruct : DynAny {
760 #pragma sun_localservant DynStruct ""
762 /**
763 * Returns the name of the member at the current position.
764 * This operation may return an empty string since the TypeCode of the value being
765 * manipulated may not contain the names of members.
766 *
767 * @exception TypeMismatch if the DynStruct represents an empty exception.
768 * @exception InvalidValue if the current position does not indicate a member
769 */
770 FieldName current_member_name()
771 raises(TypeMismatch, InvalidValue);
773 /**
774 * Returns the TCKind associated with the member at the current position.
775 *
776 * @exception TypeMismatch if the DynStruct represents an empty exception.
777 * @exception InvalidValue if the current position does not indicate a member
778 */
779 CORBA::TCKind current_member_kind()
780 raises(TypeMismatch, InvalidValue);
782 /**
783 * Returns a sequence of NameValuePairs describing the name and the value of each member
784 * in the struct associated with a DynStruct object.
785 * The sequence contains members in the same order as the declaration order of members
786 * as indicated by the DynStruct's TypeCode. The current position is not affected.
787 * The member names in the returned sequence will be empty strings if the DynStruct's TypeCode
788 * does not contain member names.
789 */
790 NameValuePairSeq get_members();
792 /**
793 * Initializes the struct data value associated with a DynStruct object from a sequence of NameValuePairs.
794 * The operation sets the current position to zero if the passed sequences has non-zero length. Otherwise,
795 * if an empty sequence is passed, the current position is set to -1.
796 * <P>Members must appear in the NameValuePairs in the order in which they appear in the IDL specification
797 * of the struct as indicated by the DynStruct's TypeCode or they must be empty strings.
798 * The operation makes no attempt to assign member values based on member names.
799 *
800 * @exception TypeMismatch if the member names supplied in the passed sequence do not match the
801 * corresponding member name in the DynStruct's TypeCode and they are not empty strings
802 * @exception InvalidValue if the passed sequence has a number of elements that disagrees
803 * with the number of members as indicated by the DynStruct's TypeCode
804 */
805 void set_members(in NameValuePairSeq value)
806 raises(TypeMismatch, InvalidValue);
808 /**
809 * Returns a sequence of NameDynAnyPairs describing the name and the value of each member
810 * in the struct associated with a DynStruct object.
811 * The sequence contains members in the same order as the declaration order of members
812 * as indicated by the DynStruct's TypeCode. The current position is not affected.
813 * The member names in the returned sequence will be empty strings if the DynStruct's TypeCode
814 * does not contain member names.
815 */
816 NameDynAnyPairSeq get_members_as_dyn_any();
818 /**
819 * Initializes the struct data value associated with a DynStruct object from a sequence of NameDynAnyPairs.
820 * The operation sets the current position to zero if the passed sequences has non-zero length. Otherwise,
821 * if an empty sequence is passed, the current position is set to -1.
822 * <P>Members must appear in the NameDynAnyPairs in the order in which they appear in the IDL specification
823 * of the struct as indicated by the DynStruct's TypeCode or they must be empty strings.
824 * The operation makes no attempt to assign member values based on member names.
825 *
826 * @exception TypeMismatch if the member names supplied in the passed sequence do not match the
827 * corresponding member name in the DynStruct's TypeCode and they are not empty strings
828 * @exception InvalidValue if the passed sequence has a number of elements that disagrees
829 * with the number of members as indicated by the DynStruct's TypeCode
830 */
831 void set_members_as_dyn_any(in NameDynAnyPairSeq value)
832 raises(TypeMismatch, InvalidValue);
833 };
835 /**
836 * DynUnion objects support the manipulation of IDL unions.
837 * A union can have only two valid current positions:
838 * <UL>
839 * <LI>zero, which denotes the discriminator
840 * <LI>one, which denotes the active member
841 * </UL>
842 * The component_count value for a union depends on the current discriminator:
843 * it is 2 for a union whose discriminator indicates a named member, and 1 otherwise.
844 */
845 interface DynUnion : DynAny {
846 #pragma sun_localservant DynUnion ""
848 /**
849 * Returns the current discriminator value.
850 */
851 DynAny get_discriminator();
853 /**
854 * Sets the discriminator of the DynUnion to the specified value.
855 * Setting the discriminator to a value that is consistent with the currently active union member
856 * does not affect the currently active member. Setting the discriminator to a value that is inconsistent
857 * with the currently active member deactivates the member and activates the member that is consistent
858 * with the new discriminator value (if there is a member for that value) by initializing the member
859 * to its default value.
860 * Setting the discriminator of a union sets the current position to 0 if the discriminator value
861 * indicates a non-existent union member (has_no_active_member returns true in this case).
862 * Otherwise, if the discriminator value indicates a named union member, the current position is set to 1
863 * (has_no_active_member returns false and component_count returns 2 in this case).
864 *
865 * @exception TypeMismatch if the TypeCode of the parameter is not equivalent to the TypeCode
866 * of the union's discriminator
867 */
868 void set_discriminator(in DynAny d)
869 raises(TypeMismatch);
871 /**
872 * Sets the discriminator to a value that is consistent with the value of the default case of a union.
873 * It sets the current position to zero and causes component_count to return 2.
874 *
875 * @exception TypeMismatch if the union does not have an explicit default case
876 */
877 void set_to_default_member()
878 raises(TypeMismatch);
880 /**
881 * Sets the discriminator to a value that does not correspond to any of the unions case labels.
882 * It sets the current position to zero and causes component_count to return 1.
883 *
884 * @exception TypeMismatch if the union has an explicit default case or if it uses the entire range
885 * of discriminator values for explicit case labels
886 */
887 void set_to_no_active_member()
888 raises(TypeMismatch);
890 /**
891 * Returns true if the union has no active member, that is, the unions value consists solely
892 * of its discriminator because the discriminator has a value that is not listed as an explicit case label.
893 * Calling this operation on a union that has a default case returns false.
894 * Calling this operation on a union that uses the entire range of discriminator values
895 * for explicit case labels returns false.
896 */
897 boolean has_no_active_member();
899 /**
900 * Returns the TCKind value of the discriminators TypeCode.
901 */
902 CORBA::TCKind discriminator_kind();
904 /**
905 * Returns the TCKind value of the currently active members TypeCode.
906 *
907 * @exception InvalidValue if the union does not have a currently active member
908 */
909 CORBA::TCKind member_kind()
910 raises(InvalidValue);
912 /**
913 * Returns the currently active member. Note that the returned reference remains valid only
914 * for as long as the currently active member does not change. Using the returned reference
915 * beyond the life time of the currently active member raises OBJECT_NOT_EXIST.
916 *
917 * @exception InvalidValue if the union has no active member
918 */
919 DynAny member()
920 raises(InvalidValue);
922 /**
923 * Returns the name of the currently active member. If the unions TypeCode does not contain
924 * a member name for the currently active member, the operation returns an empty string.
925 *
926 * @exception InvalidValue if the union has no active member
927 */
928 FieldName member_name()
929 raises(InvalidValue);
930 };
932 typedef sequence<any> AnySeq;
933 typedef sequence<DynAny> DynAnySeq;
935 /**
936 * DynSequence objects support the manipulation of IDL sequences.
937 */
938 interface DynSequence : DynAny {
939 #pragma sun_localservant DynSequence ""
941 /**
942 * Returns the current length of the sequence.
943 */
944 unsigned long get_length();
946 /**
947 * Sets the length of the sequence.
948 * Increasing the length of a sequence adds new elements at the tail without affecting the values
949 * of already existing elements. Newly added elements are default-initialized.
950 * Increasing the length of a sequence sets the current position to the first newly-added element
951 * if the previous current position was -1. Otherwise, if the previous current position was not -1,
952 * the current position is not affected.
953 * Decreasing the length of a sequence removes elements from the tail without affecting the value
954 * of those elements that remain. The new current position after decreasing the length of a sequence
955 * is determined as follows:
956 * <UL>
957 * <LI>If the length of the sequence is set to zero, the current position is set to -1.
958 * <LI>If the current position is -1 before decreasing the length, it remains at -1.
959 * <LI>If the current position indicates a valid element and that element is not removed when the length
960 * is decreased, the current position remains unaffected.
961 * <LI>If the current position indicates a valid element and that element is removed,
962 * the current position is set to -1.
963 * </UL>
964 *
965 * @exception InvalidValue if this is a bounded sequence and len is larger than the bound
966 */
967 void set_length(in unsigned long len)
968 raises(InvalidValue);
970 /**
971 * Returns the elements of the sequence.
972 */
973 AnySeq get_elements();
975 /**
976 * Sets the elements of a sequence.
977 * The length of the DynSequence is set to the length of value. The current position is set to zero
978 * if value has non-zero length and to -1 if value is a zero-length sequence.
979 *
980 * @exception TypeMismatch if value contains one or more elements whose TypeCode is not equivalent
981 * to the element TypeCode of the DynSequence
982 * @exception InvalidValue if the length of value exceeds the bound of a bounded sequence
983 */
984 void set_elements(in AnySeq value)
985 raises(TypeMismatch, InvalidValue);
987 /**
988 * Returns the DynAnys representing the elements of the sequence.
989 */
990 DynAnySeq get_elements_as_dyn_any();
992 /**
993 * Sets the elements of a sequence using DynAnys.
994 * The length of the DynSequence is set to the length of value. The current position is set to zero
995 * if value has non-zero length and to -1 if value is a zero-length sequence.
996 *
997 * @exception TypeMismatch if value contains one or more elements whose TypeCode is not equivalent
998 * to the element TypeCode of the DynSequence
999 * @exception InvalidValue if the length of value exceeds the bound of a bounded sequence
1000 */
1001 void set_elements_as_dyn_any(in DynAnySeq value)
1002 raises(TypeMismatch, InvalidValue);
1003 };
1005 /**
1006 * DynArray objects support the manipulation of IDL arrays.
1007 * Note that the dimension of the array is contained in the TypeCode which is accessible
1008 * through the type attribute. It can also be obtained by calling the component_count operation.
1009 */
1010 interface DynArray : DynAny {
1011 #pragma sun_localservant DynArray ""
1013 /**
1014 * Returns the elements of the DynArray.
1015 */
1016 AnySeq get_elements();
1018 /**
1019 * Sets the DynArray to contain the passed elements.
1020 *
1021 * @exception TypeMismatch if one or more elements have a type that is inconsistent with the DynArrays TypeCode
1022 * @exception InvalidValue if the sequence does not contain the same number of elements as the array dimension
1023 */
1024 void set_elements(in AnySeq value)
1025 raises(TypeMismatch, InvalidValue);
1027 /**
1028 * Returns the elements of the DynArray as DynAnys.
1029 */
1030 DynAnySeq get_elements_as_dyn_any();
1032 /**
1033 * Sets the DynArray to contain the passed elements.
1034 *
1035 * @exception TypeMismatch if one or more elements have a type that is inconsistent with the DynArrays TypeCode
1036 * @exception InvalidValue if the sequence does not contain the same number of elements as the array dimension
1037 */
1038 void set_elements_as_dyn_any(in DynAnySeq value)
1039 raises(TypeMismatch, InvalidValue);
1040 };
1042 /**
1043 * DynValueCommon provides operations supported by both the DynValue and DynValueBox interfaces.
1044 */
1045 interface DynValueCommon : DynAny {
1046 /**
1047 * Returns true if the DynValueCommon represents a null value type.
1048 */
1049 boolean is_null();
1051 /**
1052 * Changes the representation of a DynValueCommon to a null value type.
1053 */
1054 void set_to_null();
1056 /**
1057 * Replaces a null value type with a newly constructed value. Its components are initialized
1058 * to default values as in DynAnyFactory.create_dyn_any_from_type_code.
1059 * If the DynValueCommon represents a non-null value type, then this operation has no effect.
1060 */
1061 void set_to_value();
1062 };
1064 /**
1065 * DynValue objects support the manipulation of IDL non-boxed value types.
1066 * The DynValue interface can represent both null and non-null value types.
1067 * For a DynValue representing a non-null value type, the DynValue's components comprise
1068 * the public and private members of the value type, including those inherited from concrete base value types,
1069 * in the order of definition. A DynValue representing a null value type has no components
1070 * and a current position of -1.
1071 * <P>Warning: Indiscriminantly changing the contents of private value type members can cause the value type
1072 * implementation to break by violating internal constraints. Access to private members is provided to support
1073 * such activities as ORB bridging and debugging and should not be used to arbitrarily violate
1074 * the encapsulation of the value type.
1075 */
1076 interface DynValue : DynValueCommon {
1077 #pragma sun_localservant DynValue ""
1079 /**
1080 * Returns the name of the member at the current position.
1081 * This operation may return an empty string since the TypeCode of the value being
1082 * manipulated may not contain the names of members.
1083 *
1084 * @exception TypeMismatch if the DynValue represents a null value type.
1085 * @exception InvalidValue if the current position does not indicate a member
1086 */
1087 FieldName current_member_name()
1088 raises(TypeMismatch, InvalidValue);
1090 /**
1091 * Returns the TCKind associated with the member at the current position.
1092 *
1093 * @exception TypeMismatch if the DynValue represents a null value type.
1094 * @exception InvalidValue if the current position does not indicate a member
1095 */
1096 CORBA::TCKind current_member_kind()
1097 raises(TypeMismatch, InvalidValue);
1099 /**
1100 * Returns a sequence of NameValuePairs describing the name and the value of each member
1101 * in the value type.
1102 * The sequence contains members in the same order as the declaration order of members
1103 * as indicated by the DynValue's TypeCode. The current position is not affected.
1104 * The member names in the returned sequence will be empty strings if the DynValue's TypeCode
1105 * does not contain member names.
1106 *
1107 * @exception InvalidValue if this object represents a null value type
1108 */
1109 NameValuePairSeq get_members()
1110 raises(InvalidValue);
1112 /**
1113 * Initializes the value type's members from a sequence of NameValuePairs.
1114 * The operation sets the current position to zero if the passed sequences has non-zero length. Otherwise,
1115 * if an empty sequence is passed, the current position is set to -1.
1116 * A null value type can be initialized to a non-null value type using this method.
1117 * <P>Members must appear in the NameValuePairs in the order in which they appear in the IDL specification
1118 * of the value type as indicated by the DynValue's TypeCode or they must be empty strings.
1119 * The operation makes no attempt to assign member values based on member names.
1120 *
1121 * @exception TypeMismatch if the member names supplied in the passed sequence do not match the
1122 * corresponding member name in the DynValue's TypeCode and they are not empty strings
1123 * @exception InvalidValue if the passed sequence has a number of elements that disagrees
1124 * with the number of members as indicated by the DynValue's TypeCode
1125 */
1126 void set_members(in NameValuePairSeq value)
1127 raises(TypeMismatch, InvalidValue);
1129 /**
1130 * Returns a sequence of NameDynAnyPairs describing the name and the value of each member
1131 * in the value type.
1132 * The sequence contains members in the same order as the declaration order of members
1133 * as indicated by the DynValue's TypeCode. The current position is not affected.
1134 * The member names in the returned sequence will be empty strings if the DynValue's TypeCode
1135 * does not contain member names.
1136 *
1137 * @exception InvalidValue if this object represents a null value type
1138 */
1139 NameDynAnyPairSeq get_members_as_dyn_any()
1140 raises(InvalidValue);
1142 /**
1143 * Initializes the value type's members from a sequence of NameDynAnyPairs.
1144 * The operation sets the current position to zero if the passed sequences has non-zero length. Otherwise,
1145 * if an empty sequence is passed, the current position is set to -1.
1146 * A null value type can be initialized to a non-null value type using this method.
1147 * <P>Members must appear in the NameDynAnyPairs in the order in which they appear in the IDL specification
1148 * of the value type as indicated by the DynValue's TypeCode or they must be empty strings.
1149 * The operation makes no attempt to assign member values based on member names.
1150 *
1151 * @exception TypeMismatch if the member names supplied in the passed sequence do not match the
1152 * corresponding member name in the DynValue's TypeCode and they are not empty strings
1153 * @exception InvalidValue if the passed sequence has a number of elements that disagrees
1154 * with the number of members as indicated by the DynValue's TypeCode
1155 */
1156 void set_members_as_dyn_any(in NameDynAnyPairSeq value)
1157 raises(TypeMismatch, InvalidValue);
1158 };
1160 /**
1161 * DynValueBox objects support the manipulation of IDL boxed value types.
1162 * The DynValueBox interface can represent both null and non-null value types.
1163 * For a DynValueBox representing a non-null value type, the DynValueBox has a single component
1164 * of the boxed type. A DynValueBox representing a null value type has no components
1165 * and a current position of -1.
1166 */
1167 interface DynValueBox : DynValueCommon {
1169 /**
1170 * Returns the boxed value as an Any.
1171 *
1172 * @exception InvalidValue if this object represents a null value box type
1173 */
1174 any get_boxed_value()
1175 raises(InvalidValue);
1177 /**
1178 * Replaces the boxed value with the specified value.
1179 * If the DynBoxedValue represents a null valuetype, it is converted to a non-null value.
1180 *
1181 * @exception TypeMismatch if this object represents a non-null value box type and the type
1182 * of the parameter is not matching the current boxed value type.
1183 */
1184 void set_boxed_value(in any boxed)
1185 raises(TypeMismatch);
1187 /**
1188 * Returns the boxed value as a DynAny.
1189 *
1190 * @exception InvalidValue if this object represents a null value box type
1191 */
1192 DynAny get_boxed_value_as_dyn_any()
1193 raises(InvalidValue);
1195 /**
1196 * Replaces the boxed value with the value contained in the parameter.
1197 * If the DynBoxedValue represents a null valuetype, it is converted to a non-null value.
1198 *
1199 * @exception TypeMismatch if this object represents a non-null value box type and the type
1200 * of the parameter is not matching the current boxed value type.
1201 */
1202 void set_boxed_value_as_dyn_any(in DynAny boxed)
1203 raises(TypeMismatch);
1204 };
1206 /**
1207 * DynAny objects can be created by invoking operations on the DynAnyFactory object.
1208 * Generally there are only two ways to create a DynAny object:
1209 * <UL>
1210 * <LI>invoking an operation on an existing DynAny object
1211 * <LI>invoking an operation on a DynAnyFactory object
1212 * </UL>
1213 * A constructed DynAny object supports operations that enable the creation of new DynAny
1214 * objects encapsulating access to the value of some constituent.
1215 * DynAny objects also support the copy operation for creating new DynAny objects.
1216 * A reference to the DynAnyFactory object is obtained by calling ORB.resolve_initial_references()
1217 * with the identifier parameter set to the string constant "DynAnyFactory".
1218 * <P>Dynamic interpretation of an any usually involves creating a DynAny object using create_dyn_any()
1219 * as the first step. Depending on the type of the any, the resulting DynAny object reference can be narrowed
1220 * to a DynFixed, DynStruct, DynSequence, DynArray, DynUnion, DynEnum, or DynValue object reference.
1221 * <P>Dynamic creation of an any involves creating a DynAny object using create_dyn_any_from_type_code(),
1222 * passing the TypeCode associated with the value to be created. The returned reference is narrowed to one of
1223 * the complex types, such as DynStruct, if appropriate. Then, the value can be initialized by means of
1224 * invoking operations on the resulting object. Finally, the to_any operation can be invoked
1225 * to create an any value from the constructed DynAny.
1226 */
1227 interface DynAnyFactory {
1228 #pragma sun_localservant DynAnyFactory ""
1229 exception InconsistentTypeCode {};
1231 /**
1232 * Creates a new DynAny object from an any value.
1233 * A copy of the TypeCode associated with the any value is assigned to the resulting DynAny object.
1234 * The value associated with the DynAny object is a copy of the value in the original any.
1235 * The current position of the created DynAny is set to zero if the passed value has components,
1236 * to -1 otherwise
1237 *
1238 * @exception InconsistentTypeCode if value has a TypeCode with a TCKind of tk_Principal,
1239 * tk_native, or tk_abstract_interface
1240 */
1241 DynAny create_dyn_any(in any value)
1242 raises(InconsistentTypeCode);
1244 /**
1245 * Creates a DynAny from a TypeCode. Depending on the TypeCode, the created object may be of type DynAny,
1246 * or one of its derived types, such as DynStruct. The returned reference can be narrowed to the derived type.
1247 * In all cases, a DynAny constructed from a TypeCode has an initial default value.
1248 * The default values of basic types are:
1249 * <UL>
1250 * <LI>false for boolean
1251 * <LI>zero for numeric types
1252 * <LI>zero for types octet, char, and wchar
1253 * <LI>the empty string for string and wstring
1254 * <LI>null for object references
1255 * <LI>a type code with a TCKind value of tk_null for type codes
1256 * <LI>for any values, an any containing a type code with a TCKind value of tk_null type and no value
1257 * </UL>
1258 * For complex types, creation of the corresponding DynAny assigns a default value as follows:
1259 * <UL>
1260 * <LI>For DynSequence it sets the current position to -1 and creates an empty sequence.
1261 * <LI>For DynEnum it sets the current position to -1 and sets the value of the enumerator
1262 * to the first enumerator value indicated by the TypeCode.
1263 * <LI>For DynFixed it sets the current position to -1 and sets the value zero.
1264 * <LI>For DynStruct it sets the current position to -1 for empty exceptions
1265 * and to zero for all other TypeCodes. The members (if any) are (recursively) initialized
1266 * to their default values.
1267 * <LI>For DynArray sets the current position to zero and (recursively) initializes elements
1268 * to their default value.
1269 * <LI>For DynUnion sets the current position to zero. The discriminator value is set
1270 * to a value consistent with the first named member of the union. That member is activated and (recursively)
1271 * initialized to its default value.
1272 * <LI>For DynValue and DynValueBox it initializes to a null value.
1273 * </UL>
1274 */
1275 DynAny create_dyn_any_from_type_code(in CORBA::TypeCode type)
1276 raises(InconsistentTypeCode);
1277 };
1278 }; // module DynamicAny
1280 #endif // _DYNAMIC_ANY_IDL_