// File: SendingContext.idl
// CORBA 2.5.1, Chapter 5

#ifndef _SENDING_CONTEXT_IDL_
#define _SENDING_CONTEXT_IDL_

#ifdef _PRE_3_0_COMPILER_ 
#include <orb.idl>
#pragma prefix "omg.org"
#else
import ::CORBA;
#endif // _PRE_3_0_COMPILER_

module SendingContext {

#ifndef _PRE_3_0_COMPILER_ 
    typeprefix SendingContext "omg.org";
#endif // _PRE_3_0_COMPILER_

    interface RunTime {}; // so that we can provide more 
                          // sending context run time
                          // services in the future

    interface CodeBase: RunTime {
        typedef string          URL; // blank-separated list of one or more URLs
        typedef sequence<URL>   URLSeq;
        typedef sequence<CORBA::ValueDef::FullValueDescription> ValueDescSeq;

        // Operation to obtain the IR from the sending context 
        CORBA::Repository get_ir();

        // Operations to obtain a location of the implementation code
        URL     implementation(             in CORBA::RepositoryId    x);
        URL     implementationx(            in CORBA::RepositoryId    x);
        URLSeq  implementations(            in CORBA::RepositoryIdSeq x);

        // Operations to obtain complete meta information about a Value 
        // This is just a performance optimization the IR can provide
        // the same information
        CORBA::ValueDef::FullValueDescription meta( in CORBA::RepositoryId    x);
        ValueDescSeq                          metas(in CORBA::RepositoryIdSeq x);

        // To obtain a type graph for a value type
        // same comment as before the IR can provide similar
        // information
        CORBA::RepositoryIdSeq      bases(  in CORBA::RepositoryId x);    
    };
};
#endif // _SENDING_CONTEXT_IDL_
