aoqi@0: /* aoqi@0: * Copyright (c) 1997, 2009, Oracle and/or its affiliates. All rights reserved. aoqi@0: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. aoqi@0: * aoqi@0: * This code is free software; you can redistribute it and/or modify it aoqi@0: * under the terms of the GNU General Public License version 2 only, as aoqi@0: * published by the Free Software Foundation. Oracle designates this aoqi@0: * particular file as subject to the "Classpath" exception as provided aoqi@0: * by Oracle in the LICENSE file that accompanied this code. aoqi@0: * aoqi@0: * This code is distributed in the hope that it will be useful, but WITHOUT aoqi@0: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or aoqi@0: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License aoqi@0: * version 2 for more details (a copy is included in the LICENSE file that aoqi@0: * accompanied this code). aoqi@0: * aoqi@0: * You should have received a copy of the GNU General Public License version aoqi@0: * 2 along with this work; if not, write to the Free Software Foundation, aoqi@0: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. aoqi@0: * aoqi@0: * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA aoqi@0: * or visit www.oracle.com if you need additional information or have any aoqi@0: * questions. aoqi@0: */ aoqi@0: aoqi@0: /* aoqi@0: * This file contains OMG IDL from CORBA V2.0, July 1995. aoqi@0: * It also contains the TypeCode creation APIs in CORBA::ORB aoqi@0: **/ aoqi@0: aoqi@0: #pragma prefix "omg.org" aoqi@0: //#pragma javaPackage org.omg aoqi@0: aoqi@0: module CORBA { aoqi@0: typedef string Identifier; aoqi@0: typedef string ScopedName; aoqi@0: typedef string RepositoryId; aoqi@0: aoqi@0: enum DefinitionKind { aoqi@0: dk_none, dk_all, aoqi@0: dk_Attribute, dk_Constant, dk_Exception, dk_Interface, aoqi@0: dk_Module, dk_Operation, dk_Typedef, aoqi@0: dk_Alias, dk_Struct, dk_Union, dk_Enum, aoqi@0: dk_Primitive, dk_String, dk_Sequence, dk_Array, aoqi@0: dk_Repository, aoqi@0: dk_Wstring, dk_Fixed, aoqi@0: dk_Value, dk_ValueBox, dk_ValueMember, // orbos 98-01-18: Objects By Value aoqi@0: dk_Native aoqi@0: }; aoqi@0: aoqi@0: aoqi@0: interface IRObject aoqi@0: /** aoqi@0: An IRObject IDL interface represents the most generic interface aoqi@0: from which all other Interface Repository interfaces are derived, aoqi@0: even the Repository itself. aoqi@0: */ aoqi@0: { aoqi@0: // read interface aoqi@0: readonly attribute DefinitionKind def_kind; aoqi@0: aoqi@0: // write interface aoqi@0: void destroy (); aoqi@0: }; aoqi@0: aoqi@0: aoqi@0: aoqi@0: typedef string VersionSpec; aoqi@0: aoqi@0: interface Contained; aoqi@0: interface Repository; aoqi@0: interface Container; aoqi@0: aoqi@0: interface Contained : IRObject aoqi@0: /** aoqi@0: The Contained Interface is inherited by all Interface Repository aoqi@0: interfaces that are contained by other objects. aoqi@0: */ aoqi@0: { aoqi@0: // read/write interface aoqi@0: aoqi@0: attribute RepositoryId id; aoqi@0: attribute Identifier name; aoqi@0: attribute VersionSpec version; aoqi@0: aoqi@0: // read interface aoqi@0: aoqi@0: readonly attribute Container defined_in; aoqi@0: readonly attribute ScopedName absolute_name; aoqi@0: readonly attribute Repository containing_repository; aoqi@0: aoqi@0: struct Description { aoqi@0: DefinitionKind kind; aoqi@0: any value; aoqi@0: }; aoqi@0: aoqi@0: Description describe (); aoqi@0: aoqi@0: // write interface aoqi@0: aoqi@0: void move ( aoqi@0: in Container new_container, aoqi@0: in Identifier new_name, aoqi@0: in VersionSpec new_version aoqi@0: ); aoqi@0: }; aoqi@0: aoqi@0: aoqi@0: interface ModuleDef; aoqi@0: interface ConstantDef; aoqi@0: interface IDLType; aoqi@0: interface StructDef; aoqi@0: interface UnionDef; aoqi@0: interface EnumDef; aoqi@0: interface AliasDef; aoqi@0: interface InterfaceDef; aoqi@0: interface ExceptionDef; aoqi@0: interface ValueDef; // orbos 98-01-18: Objects By Value aoqi@0: interface ValueMemberDef; // orbos 98-01-18: Objects By Value aoqi@0: interface ValueBoxDef; // orbos 98-01-18: Objects By Value aoqi@0: interface NativeDef; aoqi@0: aoqi@0: aoqi@0: typedef sequence InterfaceDefSeq; aoqi@0: aoqi@0: aoqi@0: typedef sequence ContainedSeq; aoqi@0: aoqi@0: struct StructMember { aoqi@0: Identifier name; aoqi@0: TypeCode type; aoqi@0: IDLType type_def; aoqi@0: }; aoqi@0: typedef sequence StructMemberSeq; aoqi@0: aoqi@0: struct UnionMember { aoqi@0: Identifier name; aoqi@0: any label; aoqi@0: TypeCode type; aoqi@0: IDLType type_def; aoqi@0: }; aoqi@0: typedef sequence UnionMemberSeq; aoqi@0: aoqi@0: aoqi@0: typedef sequence EnumMemberSeq; aoqi@0: aoqi@0: // orbos 98-01-18: Objects By Value -- begin aoqi@0: typedef short Visibility; aoqi@0: const Visibility PRIVATE_MEMBER = 0; aoqi@0: const Visibility PUBLIC_MEMBER = 1; aoqi@0: aoqi@0: struct ValueMember { aoqi@0: Identifier name; aoqi@0: RepositoryId id; aoqi@0: RepositoryId defined_in; aoqi@0: VersionSpec version; aoqi@0: TypeCode type; aoqi@0: IDLType type_def; aoqi@0: Visibility access; aoqi@0: }; aoqi@0: typedef sequence ValueMemberSeq; aoqi@0: aoqi@0: struct Initializer { aoqi@0: StructMemberSeq members; aoqi@0: }; aoqi@0: typedef sequence InitializerSeq; aoqi@0: aoqi@0: typedef sequence ValueDefSeq; aoqi@0: aoqi@0: // orbos 98-01-18: Objects By Value -- end aoqi@0: aoqi@0: aoqi@0: interface Container : IRObject aoqi@0: /** aoqi@0: The Container interface is used to form a containment hierarchy aoqi@0: in the Interface Repository. A Container can contain any number aoqi@0: of objects derived from the Contained interface. aoqi@0: */ aoqi@0: { aoqi@0: // read interface aoqi@0: aoqi@0: Contained lookup ( in ScopedName search_name); aoqi@0: aoqi@0: ContainedSeq contents ( aoqi@0: in DefinitionKind limit_type, aoqi@0: in boolean exclude_inherited aoqi@0: ); aoqi@0: aoqi@0: ContainedSeq lookup_name ( aoqi@0: in Identifier search_name, aoqi@0: in long levels_to_search, aoqi@0: in DefinitionKind limit_type, aoqi@0: in boolean exclude_inherited aoqi@0: ); aoqi@0: aoqi@0: struct Description { aoqi@0: Contained contained_object; aoqi@0: DefinitionKind kind; aoqi@0: any value; aoqi@0: }; aoqi@0: aoqi@0: typedef sequence DescriptionSeq; aoqi@0: aoqi@0: DescriptionSeq describe_contents ( aoqi@0: in DefinitionKind limit_type, aoqi@0: in boolean exclude_inherited, aoqi@0: in long max_returned_objs aoqi@0: ); aoqi@0: aoqi@0: // write interface aoqi@0: aoqi@0: ModuleDef create_module ( aoqi@0: in RepositoryId id, aoqi@0: in Identifier name, aoqi@0: in VersionSpec version aoqi@0: ); aoqi@0: aoqi@0: ConstantDef create_constant ( aoqi@0: in RepositoryId id, aoqi@0: in Identifier name, aoqi@0: in VersionSpec version, aoqi@0: in IDLType type, aoqi@0: in any value aoqi@0: ); aoqi@0: aoqi@0: StructDef create_struct ( aoqi@0: in RepositoryId id, aoqi@0: in Identifier name, aoqi@0: in VersionSpec version, aoqi@0: in StructMemberSeq members aoqi@0: ); aoqi@0: aoqi@0: UnionDef create_union ( aoqi@0: in RepositoryId id, aoqi@0: in Identifier name, aoqi@0: in VersionSpec version, aoqi@0: in IDLType discriminator_type, aoqi@0: in UnionMemberSeq members aoqi@0: ); aoqi@0: aoqi@0: EnumDef create_enum ( aoqi@0: in RepositoryId id, aoqi@0: in Identifier name, aoqi@0: in VersionSpec version, aoqi@0: in EnumMemberSeq members aoqi@0: ); aoqi@0: aoqi@0: AliasDef create_alias ( aoqi@0: in RepositoryId id, aoqi@0: in Identifier name, aoqi@0: in VersionSpec version, aoqi@0: in IDLType original_type aoqi@0: ); aoqi@0: aoqi@0: ExceptionDef create_exception ( aoqi@0: in RepositoryId id, aoqi@0: in Identifier name, aoqi@0: in VersionSpec version, aoqi@0: in StructMemberSeq members aoqi@0: ); aoqi@0: aoqi@0: aoqi@0: InterfaceDef create_interface ( aoqi@0: in RepositoryId id, aoqi@0: in Identifier name, aoqi@0: in VersionSpec version, aoqi@0: in boolean is_abstract, aoqi@0: in InterfaceDefSeq base_interfaces aoqi@0: ); aoqi@0: aoqi@0: // orbos 98-01-18: Objects By Value aoqi@0: ValueDef create_value( aoqi@0: in RepositoryId id, aoqi@0: in Identifier name, aoqi@0: in VersionSpec version, aoqi@0: in boolean is_custom, aoqi@0: in boolean is_abstract, aoqi@0: in octet flags, // must be 0 aoqi@0: in ValueDef base_value, aoqi@0: in boolean has_safe_base, aoqi@0: in ValueDefSeq abstract_base_values, aoqi@0: in InterfaceDefSeq supported_interfaces, aoqi@0: in InitializerSeq initializers aoqi@0: ); aoqi@0: aoqi@0: // orbos 98-01-18: Objects By Value aoqi@0: ValueBoxDef create_value_box( aoqi@0: in RepositoryId id, aoqi@0: in Identifier name, aoqi@0: in VersionSpec version, aoqi@0: in IDLType original_type_def aoqi@0: ); aoqi@0: aoqi@0: NativeDef create_native( aoqi@0: in RepositoryId id, aoqi@0: in Identifier name, aoqi@0: in VersionSpec version aoqi@0: ); aoqi@0: aoqi@0: }; aoqi@0: aoqi@0: aoqi@0: aoqi@0: interface IDLType : IRObject aoqi@0: /** aoqi@0: The IDLType interface is an abstract interface inherited by all aoqi@0: IR objects that represent the OMG IDL types. It provides access aoqi@0: to the TypeCode describing the type, and is used in defining the aoqi@0: other interfaces wherever definitions of IDLType must be referenced. aoqi@0: */ aoqi@0: { aoqi@0: readonly attribute TypeCode type; aoqi@0: }; aoqi@0: aoqi@0: aoqi@0: aoqi@0: interface PrimitiveDef; aoqi@0: interface StringDef; aoqi@0: interface SequenceDef; aoqi@0: interface ArrayDef; aoqi@0: aoqi@0: enum PrimitiveKind { aoqi@0: pk_null, pk_void, pk_short, pk_long, pk_ushort, pk_ulong, aoqi@0: pk_float, pk_double, pk_boolean, pk_char, pk_octet, aoqi@0: pk_any, pk_TypeCode, pk_Principal, pk_string, pk_objref aoqi@0: }; aoqi@0: aoqi@0: interface Repository : Container aoqi@0: /** aoqi@0: Repository is an interface that provides global access to the aoqi@0: Interface Repository. Repository objects can contain constants, aoqi@0: typedefs, exceptions, interfaces, and modules. aoqi@0: */ aoqi@0: { aoqi@0: // read interface aoqi@0: aoqi@0: Contained lookup_id (in RepositoryId search_id); aoqi@0: aoqi@0: PrimitiveDef get_primitive (in PrimitiveKind kind); aoqi@0: aoqi@0: // write interface aoqi@0: aoqi@0: StringDef create_string (in unsigned long bound); aoqi@0: aoqi@0: SequenceDef create_sequence ( aoqi@0: in unsigned long bound, aoqi@0: in IDLType element_type aoqi@0: ); aoqi@0: aoqi@0: ArrayDef create_array ( aoqi@0: in unsigned long length, aoqi@0: in IDLType element_type aoqi@0: ); aoqi@0: }; aoqi@0: aoqi@0: aoqi@0: interface ModuleDef : Container, Contained aoqi@0: /** aoqi@0: A ModuleDef can contain constants, typedefs, exceptions, interfaces, aoqi@0: and other module objects. aoqi@0: */ aoqi@0: { aoqi@0: }; aoqi@0: aoqi@0: struct ModuleDescription { aoqi@0: Identifier name; aoqi@0: RepositoryId id; aoqi@0: RepositoryId defined_in; aoqi@0: VersionSpec version; aoqi@0: }; aoqi@0: aoqi@0: aoqi@0: interface ConstantDef : Contained aoqi@0: /** aoqi@0: A ConstantDef object defines a named constant. aoqi@0: */ aoqi@0: { aoqi@0: readonly attribute TypeCode type; aoqi@0: attribute IDLType type_def; aoqi@0: attribute any value; aoqi@0: }; aoqi@0: aoqi@0: struct ConstantDescription { aoqi@0: Identifier name; aoqi@0: RepositoryId id; aoqi@0: RepositoryId defined_in; aoqi@0: VersionSpec version; aoqi@0: TypeCode type; aoqi@0: any value; aoqi@0: }; aoqi@0: aoqi@0: aoqi@0: interface TypedefDef : Contained, IDLType aoqi@0: /** aoqi@0: TypedefDef is an abstract interface used as a base interface for aoqi@0: all named non-object types(structures, unions, enumerations, aoqi@0: aliases). The TypedefDef interface is not inherited by the definition aoqi@0: objects for the primitive or anonymous types. aoqi@0: */ aoqi@0: { aoqi@0: }; aoqi@0: aoqi@0: struct TypeDescription { aoqi@0: Identifier name; aoqi@0: RepositoryId id; aoqi@0: RepositoryId defined_in; aoqi@0: VersionSpec version; aoqi@0: TypeCode type; aoqi@0: }; aoqi@0: aoqi@0: aoqi@0: interface StructDef : TypedefDef, Container aoqi@0: /** aoqi@0: A StructDef represents an OMG IDL structure definition. aoqi@0: */ aoqi@0: { aoqi@0: attribute StructMemberSeq members; aoqi@0: }; aoqi@0: aoqi@0: aoqi@0: interface UnionDef : TypedefDef, Container aoqi@0: /** aoqi@0: A UnionDef represents an OMG IDL union definition. aoqi@0: */ aoqi@0: { aoqi@0: readonly attribute TypeCode discriminator_type; aoqi@0: attribute IDLType discriminator_type_def; aoqi@0: attribute UnionMemberSeq members; aoqi@0: }; aoqi@0: aoqi@0: aoqi@0: interface EnumDef : TypedefDef aoqi@0: /** aoqi@0: A EnumDef represents an OMG IDL enum definition. aoqi@0: */ aoqi@0: { aoqi@0: attribute EnumMemberSeq members; aoqi@0: }; aoqi@0: aoqi@0: aoqi@0: interface AliasDef : TypedefDef aoqi@0: /** aoqi@0: An AliasDef represents an OMG IDL typedef that aliases other aoqi@0: definition. aoqi@0: */ aoqi@0: { aoqi@0: attribute IDLType original_type_def; aoqi@0: }; aoqi@0: aoqi@0: aoqi@0: interface PrimitiveDef: IDLType aoqi@0: /** aoqi@0: A PrimitiveDef represents one of the IDL primitive types. As aoqi@0: primitive types are unnamed, this interface is not derived from aoqi@0: TypedefDef or Contained. aoqi@0: */ aoqi@0: { aoqi@0: readonly attribute PrimitiveKind kind; aoqi@0: }; aoqi@0: aoqi@0: aoqi@0: interface StringDef : IDLType aoqi@0: /** aoqi@0: A StringDef represents an OMG IDL string type. As string aoqi@0: types are anonymous, this interface is not derived from TypedefDef aoqi@0: or Contained. aoqi@0: */ aoqi@0: { aoqi@0: attribute unsigned long bound; aoqi@0: }; aoqi@0: aoqi@0: aoqi@0: interface SequenceDef : IDLType aoqi@0: /** aoqi@0: A SequenceDef represents an OMG IDL sequence type. As sequence aoqi@0: types are anonymous, this interface is not derived from TypedefDef aoqi@0: or Contained. aoqi@0: */ aoqi@0: { aoqi@0: attribute unsigned long bound; aoqi@0: readonly attribute TypeCode element_type; aoqi@0: attribute IDLType element_type_def; aoqi@0: }; aoqi@0: aoqi@0: interface ArrayDef : IDLType aoqi@0: /** aoqi@0: An ArrayDef represents an OMG IDL array type. As array aoqi@0: types are anonymous, this interface is not derived from TypedefDef aoqi@0: or Contained. aoqi@0: */ aoqi@0: { aoqi@0: attribute unsigned long length; aoqi@0: readonly attribute TypeCode element_type; aoqi@0: attribute IDLType element_type_def; aoqi@0: }; aoqi@0: aoqi@0: aoqi@0: interface ExceptionDef : Contained, Container aoqi@0: /** aoqi@0: An ExceptionDef represents an exception definition. aoqi@0: */ aoqi@0: { aoqi@0: readonly attribute TypeCode type; aoqi@0: attribute StructMemberSeq members; aoqi@0: }; aoqi@0: struct ExceptionDescription { aoqi@0: Identifier name; aoqi@0: RepositoryId id; aoqi@0: RepositoryId defined_in; aoqi@0: VersionSpec version; aoqi@0: TypeCode type; aoqi@0: }; aoqi@0: aoqi@0: aoqi@0: aoqi@0: enum AttributeMode {ATTR_NORMAL, ATTR_READONLY}; aoqi@0: aoqi@0: interface AttributeDef : Contained aoqi@0: /** aoqi@0: An AttributeDef represents the information that defines an aoqi@0: attribute of an interface. aoqi@0: */ aoqi@0: { aoqi@0: readonly attribute TypeCode type; aoqi@0: attribute IDLType type_def; aoqi@0: attribute AttributeMode mode; aoqi@0: }; aoqi@0: aoqi@0: struct AttributeDescription { aoqi@0: Identifier name; aoqi@0: RepositoryId id; aoqi@0: RepositoryId defined_in; aoqi@0: VersionSpec version; aoqi@0: TypeCode type; aoqi@0: AttributeMode mode; aoqi@0: }; aoqi@0: aoqi@0: aoqi@0: aoqi@0: enum OperationMode {OP_NORMAL, OP_ONEWAY}; aoqi@0: aoqi@0: enum ParameterMode {PARAM_IN, PARAM_OUT, PARAM_INOUT}; aoqi@0: struct ParameterDescription { aoqi@0: Identifier name; aoqi@0: TypeCode type; aoqi@0: IDLType type_def; aoqi@0: ParameterMode mode; aoqi@0: }; aoqi@0: typedef sequence ParDescriptionSeq; aoqi@0: aoqi@0: typedef Identifier ContextIdentifier; aoqi@0: typedef sequence ContextIdSeq; aoqi@0: aoqi@0: typedef sequence ExceptionDefSeq; aoqi@0: typedef sequence ExcDescriptionSeq; aoqi@0: aoqi@0: interface OperationDef : Contained aoqi@0: /** aoqi@0: An OperationDef represents the information that defines an aoqi@0: operation of an interface. aoqi@0: */ aoqi@0: { aoqi@0: readonly attribute TypeCode result; aoqi@0: attribute IDLType result_def; aoqi@0: attribute ParDescriptionSeq params; aoqi@0: attribute OperationMode mode; aoqi@0: attribute ContextIdSeq contexts; aoqi@0: attribute ExceptionDefSeq exceptions; aoqi@0: }; aoqi@0: aoqi@0: struct OperationDescription { aoqi@0: Identifier name; aoqi@0: RepositoryId id; aoqi@0: RepositoryId defined_in; aoqi@0: VersionSpec version; aoqi@0: TypeCode result; aoqi@0: OperationMode mode; aoqi@0: ContextIdSeq contexts; aoqi@0: ParDescriptionSeq parameters; aoqi@0: ExcDescriptionSeq exceptions; aoqi@0: }; aoqi@0: aoqi@0: aoqi@0: aoqi@0: typedef sequence RepositoryIdSeq; aoqi@0: typedef sequence OpDescriptionSeq; aoqi@0: typedef sequence AttrDescriptionSeq; aoqi@0: aoqi@0: interface InterfaceDef : Container, Contained, IDLType aoqi@0: /** aoqi@0: An InterfaceDef object represents an interface definition. It can aoqi@0: contains constants, typedefs, exceptions, operations, and aoqi@0: attributes. aoqi@0: */ aoqi@0: { aoqi@0: // read/write interface aoqi@0: aoqi@0: attribute InterfaceDefSeq base_interfaces; aoqi@0: attribute boolean is_abstract; aoqi@0: aoqi@0: // read interface aoqi@0: aoqi@0: boolean is_a (in RepositoryId interface_id); aoqi@0: aoqi@0: struct FullInterfaceDescription { aoqi@0: Identifier name; aoqi@0: RepositoryId id; aoqi@0: RepositoryId defined_in; aoqi@0: VersionSpec version; aoqi@0: boolean is_abstract; aoqi@0: OpDescriptionSeq operations; aoqi@0: AttrDescriptionSeq attributes; aoqi@0: RepositoryIdSeq base_interfaces; aoqi@0: TypeCode type; aoqi@0: }; aoqi@0: aoqi@0: FullInterfaceDescription describe_interface(); aoqi@0: aoqi@0: // write interface aoqi@0: aoqi@0: AttributeDef create_attribute ( aoqi@0: in RepositoryId id, aoqi@0: in Identifier name, aoqi@0: in VersionSpec version, aoqi@0: in IDLType type, aoqi@0: in AttributeMode mode aoqi@0: ); aoqi@0: aoqi@0: OperationDef create_operation ( aoqi@0: in RepositoryId id, aoqi@0: in Identifier name, aoqi@0: in VersionSpec version, aoqi@0: in IDLType result, aoqi@0: in OperationMode mode, aoqi@0: in ParDescriptionSeq params, aoqi@0: in ExceptionDefSeq exceptions, aoqi@0: in ContextIdSeq contexts aoqi@0: ); aoqi@0: }; aoqi@0: aoqi@0: struct InterfaceDescription { aoqi@0: Identifier name; aoqi@0: RepositoryId id; aoqi@0: RepositoryId defined_in; aoqi@0: VersionSpec version; aoqi@0: RepositoryIdSeq base_interfaces; aoqi@0: }; aoqi@0: aoqi@0: aoqi@0: // orbos 98-01-18: Objects By Value -- begin aoqi@0: aoqi@0: interface ValueMemberDef : Contained aoqi@0: aoqi@0: /** A ValueMemberDef object represents the public aoqi@0: and private data member definition of a Value type aoqi@0: */ aoqi@0: aoqi@0: { aoqi@0: readonly attribute TypeCode type; aoqi@0: attribute IDLType type_def; aoqi@0: attribute Visibility access; aoqi@0: }; aoqi@0: aoqi@0: interface ValueDef : Container, Contained, IDLType aoqi@0: /** aoqi@0: A ValueDef object represents the definition of the aoqi@0: Value object used to pass the object state aoqi@0: between hosts aoqi@0: */ aoqi@0: aoqi@0: { aoqi@0: // read/write interface aoqi@0: attribute InterfaceDefSeq supported_interfaces; aoqi@0: attribute InitializerSeq initializers; aoqi@0: attribute ValueDef base_value; aoqi@0: attribute ValueDefSeq abstract_base_values; aoqi@0: attribute boolean is_abstract; aoqi@0: attribute boolean is_custom; aoqi@0: attribute octet flags; // always 0 aoqi@0: attribute boolean has_safe_base; aoqi@0: aoqi@0: // read interface aoqi@0: boolean is_a(in RepositoryId value_id); aoqi@0: aoqi@0: struct FullValueDescription { aoqi@0: Identifier name; aoqi@0: RepositoryId id; aoqi@0: boolean is_abstract; aoqi@0: boolean is_custom; aoqi@0: octet flags; // always 0 aoqi@0: RepositoryId defined_in; aoqi@0: VersionSpec version; aoqi@0: OpDescriptionSeq operations; aoqi@0: AttrDescriptionSeq attributes; aoqi@0: ValueMemberSeq members; aoqi@0: InitializerSeq initializers; aoqi@0: RepositoryIdSeq supported_interfaces; aoqi@0: RepositoryIdSeq abstract_base_values; aoqi@0: boolean has_safe_base; aoqi@0: RepositoryId base_value; aoqi@0: TypeCode type; aoqi@0: }; aoqi@0: aoqi@0: FullValueDescription describe_value(); aoqi@0: aoqi@0: // write interface aoqi@0: aoqi@0: ValueMemberDef create_value_member( aoqi@0: in RepositoryId id, aoqi@0: in Identifier name, aoqi@0: in VersionSpec version, aoqi@0: in IDLType type_def, aoqi@0: in Visibility access aoqi@0: ); aoqi@0: aoqi@0: AttributeDef create_attribute( aoqi@0: in RepositoryId id, aoqi@0: in Identifier name, aoqi@0: in VersionSpec version, aoqi@0: in IDLType type, aoqi@0: in AttributeMode mode aoqi@0: ); aoqi@0: aoqi@0: OperationDef create_operation( aoqi@0: in RepositoryId id, aoqi@0: in Identifier name, aoqi@0: in VersionSpec version, aoqi@0: in IDLType result, aoqi@0: in OperationMode mode, aoqi@0: in ParDescriptionSeq params, aoqi@0: in ExceptionDefSeq exceptions, aoqi@0: in ContextIdSeq contexts aoqi@0: ); aoqi@0: }; aoqi@0: struct ValueDescription { aoqi@0: Identifier name; aoqi@0: RepositoryId id; aoqi@0: boolean is_abstract; aoqi@0: boolean is_custom; aoqi@0: octet flags; // always 0 aoqi@0: RepositoryId defined_in; aoqi@0: VersionSpec version; aoqi@0: RepositoryIdSeq supported_interfaces; aoqi@0: RepositoryIdSeq abstract_base_values; aoqi@0: boolean has_safe_base; aoqi@0: RepositoryId base_value; aoqi@0: }; aoqi@0: aoqi@0: interface ValueBoxDef : IDLType aoqi@0: aoqi@0: /** ValueBoxDef is an interface that reresents a value type with aoqi@0: a single data member inside its state section and no aoqi@0: inheritance or methods. For example, when transmitting a aoqi@0: string or sequence as an actual parameter on an interface aoqi@0: operation or as a data member of a value type that is an aoqi@0: actual parameter, it may be important to preserve any sharing aoqi@0: of the string or sequence within the object graph being aoqi@0: transmitted. Because current IDL data types do not preserve aoqi@0: referential integrity in this way, this requirement is aoqi@0: conveniently handled by using a value type. Value types also aoqi@0: support the transmission of nulls (as a distinguished value), aoqi@0: whereas IDL data types such as string and sequence (which are aoqi@0: mapped to empty strings and sequences) do not. The Java to IDL aoqi@0: mapping requires both preservation of referential integrity aoqi@0: and transmission of nulls. Because it would be cumbersome to aoqi@0: require the full IDL syntax for a value type for this specific aoqi@0: usage, this shorthand notation is introduced to cover this use aoqi@0: of value types for simple containment of a single data member. aoqi@0: */ aoqi@0: aoqi@0: { aoqi@0: attribute IDLType original_type_def; aoqi@0: }; aoqi@0: aoqi@0: // orbos 98-01-18: Objects By Value -- end aoqi@0: aoqi@0: enum TCKind { aoqi@0: tk_null, tk_void, aoqi@0: tk_short, tk_long, tk_ushort, tk_ulong, aoqi@0: tk_float, tk_double, tk_boolean, tk_char, aoqi@0: tk_octet, tk_any, tk_TypeCode, tk_Principal, tk_objref, aoqi@0: tk_struct, tk_union, tk_enum, tk_string, aoqi@0: tk_sequence, tk_array, tk_alias, tk_except, aoqi@0: tk_longlong, tk_ulonglong, tk_longdouble, aoqi@0: tk_wchar, tk_wstring, tk_fixed, aoqi@0: tk_value, tk_value_box, aoqi@0: tk_native, aoqi@0: tk_abstract_interface aoqi@0: }; aoqi@0: aoqi@0: interface NativeDef : TypedefDef { aoqi@0: }; aoqi@0: };