// File CORBA_ORB.idl
// CORBA 3.0, Chapter 4

#ifndef JACORB
    typedef sequence <Request> RequestSeq;

    native AbstractBase;
#endif

    typedef unsigned short ServiceType;
    typedef unsigned long  ServiceOption;
    typedef unsigned long  ServiceDetailType;
    typedef CORBA::OctetSeq ServiceDetailData;
    typedef sequence<ServiceOption> ServiceOptionSeq;

    const ServiceType Security = 1;

    struct ServiceDetail {
        ServiceDetailType service_detail_type;
        ServiceDetailData service_detail;
    };

    typedef sequence<ServiceDetail> ServiceDetailSeq;

    struct ServiceInformation {
        ServiceOptionSeq service_options;
        ServiceDetailSeq  service_details;
    };

    native ValueFactory;

    typedef string ORBid;

    exception WrongTransaction {};

    interface ORB {                 // PIDL

        typedef string ObjectId;
        typedef sequence <ObjectId> ObjectIdList;

        exception InvalidName {};

#ifndef JACORB
        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);
#endif
    };
