/*
 *    @(#) 1.4 src/somd/comm_fw/include/formarsh.idl, somd, som3.0 12/28/95 13:23:06 [12/22/96 21:42:24]
 */
//
//   COMPONENT_NAME: somd
//
//   ORIGINS: 27
//
//
//    25H7912  (C)  COPYRIGHT International Business Machines Corp. 1992,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.
//


#ifndef _SOMDForeignMarshaler_idl_
#define _SOMDForeignMarshaler_idl_

#include <somdtype.idl>
#include <somestio.idl>

  interface SOMDForeignMarshaler : SOMObject {

  // An abstract base class for dynamic foreign marshallers, to be
  // subclasses by users to provide marshalling for SOMFOREIGN datatypes.
  // The subclass name is to be specified in the "impctx" IDL modifier
  // for the SOMFOREIGN type.

      void marshal (in string latent_param,
                     in somToken dataPtr,
                     in SOMD::marshaling_direction_t direction,
                     in SOMD::marshaling_op_t function,
                     in CosStream::StreamIO streamio);

      // This method is to be overriden by subclasses to provide a 
      // marshalling function for some SOMFOREIGN datatype.
      // The default implementation returns a NO_IMPLEMENT error.
      // The latent_param parameter is passed by DSOM to the marshal method;
      // its value can designate to the marshal method which SOMFOREIGN
      // type is to be marshaled, as specified in the "impctx" IDL
      // modifier for the SOMFOREIGN type.
      // The dataPtr parameter is the foreign data to be marshalled.
      // The direction parameter indicates whether the data is to be 
      // marshalled, demarshalled, or freed.
      // The streamio parameter is a StreamIO object to/from which the
      // foreign data is to be marshalled/demarshalled.



#ifdef __SOMIDL__
    implementation {
        releaseorder: marshal;
        callstyle = idl;
        dllname   = "somdcomm.dll";
        majorversion = 3;
        minorversion = 0;
	passthru C_h_after = "#include <somdtype.h>"
			     "#include <somestio.h>"
			     "";
    };
#endif /* __SOMIDL__ */
  };

#endif /* _SOMDForeignMarshaler_idl_ */
