// File: orb.idl
// From CORBA 3.0

// PolyORB Notes:
//   NI - Not Implemented
//   IL - Implementation Limitation

#ifndef _ORB_IDL_
#define _ORB_IDL_

//PolyORB:WAidlac: For now, idlac supports typeprefix statement only
//inside a scoped_name. This definition has been moved inside the
//CORBA module.
//#ifdef _PRE_3_0_COMPILER_
//#pragma prefix "omg.org"
//#else
//typeprefix CORBA "omg.org"
//#endif
//PolyORB:WAidlac:end

#ifdef _PRE_3_0_COMPILER_ 
#ifdef _NO_LOCAL_
#define local
#endif
#endif

// 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 {

//PolyORB:WAidlac: For now, idlac supports typeprefix statement only
//inside a scoped_name. This definition has been moved inside the
//CORBA module.
#ifdef _PRE_3_0_COMPILER_
#pragma prefix "omg.org"
#else
typeprefix CORBA "omg.org"; // ";" suppresses iac warning about missing ";".
#endif
//PolyORB:WAidlac:end


// 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
//PolyORB:NI:    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
//PolyORB:NI:    local interface PollableSet;         // Chapter  7, CORBA_Pollable.idl
//PolyORB:NI:    abstract valuetype CustomMarshal;    // Chapter  5, CORBA_valuetype.idl
//PolyORB:NI:    abstract valuetype DataInputStream;  // Chapter  5, CORBA_Stream.idl
//PolyORB:NI:    abstract valuetype DataOutputStream; // Chapter  5, CORBA_Stream.idl

// Forward references to Chapter 10, CORBA_InterfaceRepository.idl
//PolyORB:IL:    interface AbstractInterfaceDef;
//PolyORB:IL:    interface AliasDef;
    interface ArrayDef;
    interface AttributeDef;
//PolyORB:IL:    interface ConstantDef;
    interface Contained;
    interface Container;
//PolyORB:IL:    interface EnumDef;
//PolyORB:IL:    interface ExceptionDef;
//PolyORB:IL:    interface ExtInterfaceDef;
//PolyORB:NI:    interface ExtValueDef;
//PolyORB:IL:    interface ExtAbstractInterfaceDef;
//PolyORB:IL:    interface ExtLocalInterfaceDef;
    interface FixedDef;
//PolyORB:IL:    interface IDLType;
//PolyORB:IL:    interface InterfaceDef;
    interface IRObject;
//PolyORB:IL:    interface LocalInterfaceDef;
//PolyORB:IL:    interface ModuleDef;
//PolyORB:IL:    interface NativeDef;
    interface OperationDef;
    interface PrimitiveDef; 
    interface Repository;
    interface SequenceDef;
    interface StringDef;
//PolyORB:IL:    interface StructDef;
    interface TypeCode;
    interface TypedefDef;
//PolyORB:IL:    interface UnionDef;
//PolyORB:IL:    interface ValueDef;
//PolyORB:IL:    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
//PolyORB:NI:#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
//PolyORB:NI:#include <CORBA_CustomMarshal.idl>
#include <CORBA_Stream.idl>

//----------------------------------------------------------------------------
//PolyORB:AB: This code is copied from CORBA Pseudo IDL specification,
//primary because it define some entities, required for CORBA Services;
//and for completeness.

// The "define" fakes out the compiler to let it compile the "Context" 
//    interface and references to it even though "context" is a keyword
#define Context CContext

// The "define" fakes out the compiler to let it compile the "Object" 
//    interface and references to it even though "Object" is a keyword
#define Object OObject

// The "define" fakes out the compiler to let it compile the "ValueBase" 
//    valuetype and references to it even though "ValueBase" is a keyword
#define ValueBase VValueBase


// Forward references, alphabetically 
    interface Context;                   // Chapter  7, CORBA_Context.idl
    interface NVList;                    // Chapter  7, CORBA_NVList.idl
    interface Object;                    // Chapter  4, CORBA_Object.idl
    interface ORB;                       // Chapter  4, CORBA_ORB.idl
    interface Request;                   // Chapter  7, CORBA_Request.idl
    interface ServerRequest;             // Chapter  8, CORBA_ServerRequest.idl
//PolyORB:NI:    valuetype ValueBase;                 // Chapter  4, CORBA_ValueBase.idl

    typedef unsigned long Flags;

// Chapter 4: ORB Interface
#include <CORBA_Object.idl>
#include <CORBA_ORB.idl>

//PolyORB:NI:// Chapter 5: Value Type Semantics
//PolyORB:NI:#include <CORBA_ValueBase.idl>

// Chapter 7: Dynamic Invocation Interface
#include <CORBA_Request.idl>
#include <CORBA_Context.idl>
#include <CORBA_NVList.idl>

//PolyORB:NI:// Chapter 8: Dynamic Skeleton Interface
#include <CORBA_ServerRequest.idl>

//PolyORB:AE:
//----------------------------------------------------------------------------

};

#undef Context
#undef Object
#undef ValueBase

#endif // _ORB_IDL_

