//#
//#  COMPONENT_NAME: somi
//#
//#  ORIGINS: 27
//#
//#
//#    25H7912  (C)   COPYRIGHT International Business Machines Corp. 1992,1996,1996,1996  
//#  All Rights Reserved
//#  Licensed Materials - Property of IBM
//#  US Government Users Restricted Rights - Use, duplication or
//#  disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
//#
//#  @(#) 2.10.1.5 src/somi/ir/somir/operatdf.idl, somi.corba, som3.0 1/3/96 14:29:50 [12/22/96 21:12:35]


//#  OperationDef: CORBA Interface for operation definitions
//#  See CORBA 1.1, 7.5.6, pp.135-136

#ifndef operatdf_idl
#define operatdf_idl

#include <containd.idl>
#include <containr.idl>
#include <somcls.idl>
#include <paramdef.idl>
#include <excptdef.idl>

typedef string ContextIdentifier;

interface OperationDef : Contained , Container
// This interface is used to access information associated with
// operations defined in an IDL interface.
//
// See CORBA 1.1, 7.5.6, pp.135-136
{
    enum OperationMode {NORMAL, ONEWAY};

    struct OperationDescription {
	Identifier    name;
	RepositoryId  id;
	RepositoryId  defined_in;
	TypeCode      result;
	OperationMode mode;
	sequence<ContextIdentifier> contexts;
	sequence<ParameterDef::ParameterDescription> parameter;
	sequence<ExceptionDef::ExceptionDescription> exceptions;
    };
    // The inherited describe method returns an instance of this
    // (OperationDescription) structure in the "value" member of the
    // Description structure defined in the Contained interface.
    // The inherited describe_contents method in the Container
    // interface returns a sequence of these Description structures
    // each carrying a reference to an OperationDescription structure
    // in its "value" member.

    attribute TypeCode result;
    // The TypeCode of the receiving object.  The memory used to hold
    // the TypeCode is contained in the receiving object, which retains
    // ownership.  Hence, do not free the returned TypeCode.  If you want
    // to obtain a separate copy, use the TypeCode_copy operation.

    attribute OperationMode mode;
    // The OperationMode of the receiving object;

    attribute sequence<ContextIdentifier> contexts;
    // The list of ContextIdentifiers associated with the
    // receiving object.


#ifdef __SOMIDL__
  implementation {
      releaseorder: _get_result, _set_result,
		    _get_mode, _set_mode,
		    _get_contexts, _set_contexts
		    ;

      //# Class Modifiers
      callstyle = idl;
      majorversion = 2;
      minorversion = 3;
      filestem = operatdf;
      dllname = "somir.dll";

      passthru C_h =
	""
	"    #include <somtcnst.h>"
	"    #include <somir.h>"
	"    #include <paramdef.h>"
	"    #include <excptdef.h>"
	""
	"    #define ContextIdentifier string"
	"    #define _IDL_SEQUENCE_ContextIdentifier _IDL_SEQUENCE_string"
	"";
      passthru C_xh =
	""
	"    #include <somtcnst.xh>"
	"    #include <somir.xh>"
	"    #include <paramdef.xh>"
	"    #include <excptdef.xh>"
	""
	"    #define ContextIdentifier string"
	"    #define _IDL_SEQUENCE_ContextIdentifier _IDL_SEQUENCE_string"
	"";

      //# Attribute Modifiers
      result: noset;
      mode: noset;
      contexts: noset;
#if defined __SOM_KERNEL_LEVEL && __SOM_KERNEL_LEVEL >= 250
      _get_result : dual_owned_result;
      _get_contexts : dual_owned_result;
#else
      _set_result : client_owns_parameters = "result";
      _set_contexts : client_owns_parameters = "contexts";
#endif

      //# Method Modifiers
      somDefaultInit: override, init;
      somDestruct: override;
      somDumpSelf: override;
      somDumpSelfInt: override;
      describe: override;

  };
#endif /* __SOMIDL__ */
};

#endif	/* operatdf_idl */
