// File CORBA_ORB.idl    
// CORBA 3.0, Chapter 4
    
    typedef sequence <Request> RequestSeq; 

    native AbstractBase;

    typedef unsigned short ServiceType;
    typedef unsigned long  ServiceOption;
    typedef unsigned long  ServiceDetailType;

    const ServiceType Security = 1;

    struct ServiceDetail {
        ServiceDetailType service_detail_type;
        sequence <octet> service_detail;
    };

    struct ServiceInformation {
        sequence <ServiceOption> service_options;
        sequence <ServiceDetail> service_details;
    };

    native ValueFactory;

    typedef string ORBid;

    // frehberg@mate-de.org 
    exception WrongTransaction {};

    interface ORB {                 // PIDL

        typedef string ObjectId;
        typedef sequence <ObjectId> ObjectIdList; 

        exception InvalidName {}; 

        ORBid id();

        string object_to_string (
            in Object                   obj
        );

        Object string_to_object (
            in string                   str
        );

        // Dynamic Invocation related operations

        void create_list (
            in long                     count,   
            out NVList                  new_list
        );

        void create_operation_list (    
            in OperationDef             oper, 
            out NVList                  new_list
        );

        void get_default_context (
            out Context                 ctx
        );

        void send_multiple_requests_oneway(
            in RequestSeq               req
        ); 

        void send_multiple_requests_deferred(
            in RequestSeq               req
        ); 

        boolean poll_next_response(); 

        void get_next_response(
            out Request                 req
        ) raises (WrongTransaction);

        // Service information operations

        boolean get_service_information (
            in ServiceType              service_type,
            out ServiceInformation      service_information
        );

        ObjectIdList list_initial_services (); 

        // Initial reference operation

        Object resolve_initial_references (
            in ObjectId                 identifier
        ) raises (InvalidName); 

        // Type code creation operations

        TypeCode create_struct_tc (
            in RepositoryId             id,
            in Identifier               name,
            in StructMemberSeq          members
        );

        TypeCode create_union_tc (
            in RepositoryId             id,
            in Identifier               name,
            in TypeCode                 discriminator_type,
            in UnionMemberSeq           members
        );

        TypeCode create_enum_tc (
            in RepositoryId             id,
            in Identifier               name,
            in EnumMemberSeq            members
        );

        TypeCode create_alias_tc (
            in RepositoryId             id,
            in Identifier               name,
            in TypeCode                 original_type
        );

        TypeCode create_exception_tc (
            in RepositoryId             id,
            in Identifier               name,
            in StructMemberSeq          members
        );

        TypeCode create_interface_tc (
            in RepositoryId             id,
            in Identifier               name
        );

        TypeCode create_string_tc (
            in unsigned long            bound
        );

        TypeCode create_wstring_tc (
            in unsigned long            bound
        );

        TypeCode create_fixed_tc (
            in unsigned short           digits,
            in short                    scale
        );
        TypeCode create_sequence_tc (
            in unsigned long            bound,
            in TypeCode                 element_type
        );

        TypeCode create_recursive_sequence_tc( // deprecated
            in unsigned long            bound,
            in unsigned long            offset
        );

        TypeCode create_array_tc (
            in unsigned long            length,
            in TypeCode                 element_type
        );

        TypeCode create_value_tc (
            in RepositoryId             id,
            in Identifier               name,
            in ValueModifier            type_modifier,
            in TypeCode                 concrete_base,
            in ValueMemberSeq           members
        );

        TypeCode create_value_box_tc (
            in RepositoryId             id,
            in Identifier               name,
            in TypeCode                 boxed_type
        );

        TypeCode create_native_tc (
            in RepositoryId             id,
            in Identifier               name
        );

        TypeCode create_recursive_tc(
            in RepositoryId             id
        );

        TypeCode create_abstract_interface_tc(
            in RepositoryId             id,
            in Identifier               name
        );

        TypeCode create_local_interface_tc(
            in RepositoryId             id,
            in Identifier               name
        );

        TypeCode create_component_tc (
            in RepositoryId             id,
            in Identifier               name
        );

        TypeCode create_home_tc (
            in RepositoryId             id,
            in Identifier               name
        );

        TypeCode create_event_tc (
            in RepositoryId             id,
            in Identifier               name,
            in ValueModifier            type_modifier,
            in TypeCode                 concrete_base,
            in ValueMemberSeq           members
        );

        // Thread related operations

        boolean work_pending( );

        void perform_work();

        void run();

        void shutdown(
            in boolean                  wait_for_completion
        );

        void destroy();

        // Policy related operations

        Policy create_policy(
            in PolicyType               type, 
            in any                      val
        ) raises (PolicyError);

        // Dynamic Any related operations deprecated and removed
        // from primary list of ORB operations

        // Value factory operations

        ValueFactory register_value_factory(
            in RepositoryId             id,
            in ValueFactory             _factory
        );

        void unregister_value_factory(
            in RepositoryId             id);

        ValueFactory lookup_value_factory(
            in RepositoryId             id);

        // Portable Interceptor related operations

        void register_initial_reference(
            in ObjectId                 id,
            in Object                   obj
        ) raises (InvalidName);
    }; 

