// File: orb.idl
// From CORBA 3.0
#ifndef _ORB_IDL_
#define _ORB_IDL_

#ifdef _PRE_3_0_COMPILER_
#pragma prefix "omg.org"
#else
typeprefix CORBA "omg.org"
#endif

#ifdef _PRE_3_0_COMPILER_ 
#ifdef _NO_LOCAL_
#define local
#endif
#endif

// Additions to the original spec from OMG
#include <modifications.idl>

// This module brings together many files defining the CORBA module
//   (It really ought to be called CORBA.idl, but that's history.)
// This file includes only the "real" interfaces that are included
//   in the "orb.idl" interface supplied by every ORB and that can be
//   brought into an IDL compilation by "import ::CORBA"
//   or in pre-3.0 IDL compilers by the include directive
//   "#include <orb.idl>".

module CORBA {

// The following forward references list *all* the interfaces and valuetypes
//   defined in the CORBA module. This serves two purposes: documentation
//   and compilability. Documentation is nice: since some of the interfaces
//   must be declared as forward references, it is more consistent to
//   declare them all.
//
//   As far as compilability, it might be possible to avoid having to declare
//   many of the forward reference by rearranging the order of the interface 
//   declarations, but there's no reason to do bother doing that. After all,
//   that's the reason for the design of forward references. Doing a forward
//   reference allows the definition order to be relatively logical.In 
//   particular, it allows the "include"s to be done in chapter order 
//   (almost), the only exception being the InterfaceRepository (Chapter 10). 
//   It contains some data definitions needed by Chapter 4 interfaces.
//   The other reason not to try to rearrange the order is that it's hard.

// Forward references, alphabetically
    interface ConstructionPolicy;        // Chapter  4, CORBA_DomainManager.idl
    local interface Current;             // Chapter  4, CORBA_Current.idl
    interface DomainManager;             // Chapter  4, CORBA_DomainManager.idl
    interface Policy;                    // Chapter  4, CORBA_Policy.idl
    local interface PollableSet;         // Chapter  7, CORBA_Pollable.idl
    abstract valuetype CustomMarshal;    // Chapter  5, CORBA_valuetype.idl
    abstract valuetype DataInputStream;  // Chapter  5, CORBA_Stream.idl
    abstract valuetype DataOutputStream; // Chapter  5, CORBA_Stream.idl

// Forward references to Chapter 10, CORBA_InterfaceRepository.idl
    interface AbstractInterfaceDef;
    interface AliasDef;
    interface ArrayDef;
    interface AttributeDef;
    interface ConstantDef;
    interface Contained;
    interface Container;
    interface EnumDef;
    interface ExceptionDef;
    interface ExtInterfaceDef;
    interface ExtValueDef;
    interface ExtAbstractInterfaceDef;
    interface ExtLocalInterfaceDef;
    interface FixedDef;
    interface IDLType;
    interface InterfaceDef;
    interface IRObject;
    interface LocalInterfaceDef;
    interface ModuleDef;
    interface NativeDef;
    interface OperationDef;
    interface PrimitiveDef; 
    interface Repository;
    interface SequenceDef;
    interface StringDef;
    interface StructDef;
    interface TypeCode;
    interface TypedefDef;
    interface UnionDef;
    interface ValueDef;
    interface ValueBoxDef;
    interface ValueMemberDef;
    interface WstringDef;

    typedef string Identifier;
    
// Chapter 3: IDL Syntax and Semantics
#include <CORBA_StandardExceptions.idl>

// Chapter 4: ORB Interface
#include <CORBA_Current.idl>
#include <CORBA_Policy.idl>
#include <CORBA_DomainManager.idl>

// Chapter 7: Pollable
#include <CORBA_Pollable.idl>

// Chapter 10: The Interface Repository
#include <CORBA_InterfaceRepository.idl>

// more Chapter 4: ORB Interface
// CORBA_TypeCode.idl depends on CORBA_InterfaceRepository.idl
#include <CORBA_TypeCode.idl>

// Chapter 5: Value Type Semantics
#include <CORBA_CustomMarshal.idl>
#include <CORBA_Stream.idl>

};

#endif // _ORB_IDL_

