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

#ifndef _SENDING_CONTEXT_IDL_
#define _SENDING_CONTEXT_IDL_

#include <orb.idl>

#pragma prefix "omg.org"

module SendingContext
{

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

    /**
     *
     */
    interface CodeBase: RunTime
    {
        /**
         * blank-separated list of one or more URLs
         */
        typedef string URL;

        typedef sequence<URL> URLSeq;

        typedef sequence<CORBA::ValueDef::FullValueDescription> ValueDescSeq;

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

        /**
         * Operation to obtain a location of the implementation code.
         */
        URL implementation( in CORBA::RepositoryId x );

        /**
         * Operation to obtain a location of the implementation code.
         */
        URL implementationx( in CORBA::RepositoryId x );

        /**
         * Operation to obtain a location of the implementation code.
         */
        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 );

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

        /**
         * To obtain a type graph for a value type.  This is just a
         * performance optimization the IR can provide the same
         * information.
         */
        CORBA::RepositoryIdSeq bases( in CORBA::RepositoryId x );
    };
};

#endif // _SENDING_CONTEXT_IDL_
