
/*
 * This file was generated by the SOM Compiler.
 * FileName: somdcprx.h.
 * Generated using:
 *     SOM Precompiler somipc: 2.29.1.19
 *     SOM Emitter emith.dll: 2.31.1.64
 */

/*
 *    @(#) 2.15.1.38 src/somd/somdcprx.idl, somd, som3.0 12/4/96 00:28:16 [12/22/96 21:11:53]
 * 
 *    COMPONENT_NAME: somd
 * 
 *    ORIGINS: 27
 * 
 *     25H7912  (C)  COPYRIGHT International Business Machines Corp. 1992,1994,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.
 * 
 * 
 *   This class implements DSOM client proxy objects.  It provides a
 *   special implementation of sommProxyDispatch which uses the DSOM
 *   communications framework to dispatch the method to the target object.
 *   It is intended that this "generic" proxy class will be used to derive
 *   specific proxy classes via multiple inheritance.  This new dispatch
 *   method is inherited from this proxy class while the desired interface
 *   is inherited from the target class.
 *   E.g.,
 *             SOMDClientProxy   Animal
 *                     \           /
 *                      \         / (interface only)
 *                       \       /
 *                    Animal__Proxy
 * 
 */


#ifndef SOM_SOMDClientProxy_h
#define SOM_SOMDClientProxy_h


/*
 * The SOM_STRICT_IDL macro means that we can ignore stars
 * in our declarations of objects.
 */
#define SOM_STRICT_IDL 1


#include <som.h>
#ifndef SOM_IMPORTEXPORT_somd_somdcprx
#ifdef SOM_DLL_somd
	/* export semantics */
	#if defined(SOM_DEFFILE_somd)\
	||(defined(SOM_DEFFILE_BY_DEFAULT)&&!defined(SOM_NODEFFILE_somd))\
	|| !defined(SOM_Module_somdcprx_Source)
	#define SOM_IMPORTEXPORT_somd_somdcprx
	#else
	#define SOM_IMPORTEXPORT_somd_somdcprx SOMDLLEXPORT
	#endif
#else
	#define SOM_IMPORTEXPORT_somd_somdcprx SOMDLLIMPORT
#endif
#endif

/*
 * -- This emitter treats Method Tokens as Thunks by default.
 * -- Use the sc modifier "nothunks" to change this default
 */
#undef somresolve_
#define somresolve_(obj,mToken) ((somMethodProc*)((void)obj, mToken))

/*
 * Define the class name as an object type
 */
#ifndef SOMDClientProxy
#define SOMDClientProxy SOMObject
#endif

/*
 * Include Parent Bindings
 */
#ifndef SOM_SOMMProxyForObject_h
#ifdef SOMLOCALINCLUDES
#include "somproxy.h"
#else
#include <somproxy.h>
#endif
#endif
#ifndef SOM_SOMDObject_h
#ifdef SOMLOCALINCLUDES
#include "somdobj.h"
#else
#include <somdobj.h>
#endif
#endif

/*
 * Start of bindings for IDL types
 */

#ifndef SOMClass
    #define SOMClass SOMObject
#endif /* SOMClass */
#ifndef Container
    #define Container SOMObject
#endif /* Container */
#ifndef Principal
    #define Principal SOMObject
#endif /* Principal */
#ifndef ImplementationDef
    #define ImplementationDef SOMObject
#endif /* ImplementationDef */
#ifndef InterfaceDef
    #define InterfaceDef SOMObject
#endif /* InterfaceDef */
#ifndef NVList
    #define NVList SOMObject
#endif /* NVList */
#ifndef Context
    #define Context SOMObject
#endif /* Context */
#ifndef Request
    #define Request SOMObject
#endif /* Request */

/*
 * End of bindings for IDL types.
 */

#define SOMDClientProxy_MajorVersion 2
#define SOMDClientProxy_MinorVersion 2

/*
 * Declare the class creation procedure
 */
SOMEXTERN SOM_IMPORTEXPORT_somd_somdcprx SOMClass  SOMLINK SOMDClientProxyNewClass(integer4 somtmajorVersion,
		integer4 somtminorVersion);

/*
 * Declare the ABI 2 ClassData structure
 */
SOMEXTERN struct SOMDClientProxyClassDataStructure {
	SOMClass classObject;
	somMToken somdTargetFree;
	somMToken somdTargetGetClass;
	somMToken somdTargetGetClassName;
	somMToken somdProxyFree;
	somMToken somdProxyGetClass;
	somMToken somdProxyGetClassName;
	somMToken unused1;
	somMToken unused2;
	somMToken unused3;
	somMToken unused4;
	somMToken unused5;
	somMToken somdReleaseResources;
	somMToken private1;
	somMToken private2;
	somMToken private3;
	somMToken private4;
	somMToken private5;
} SOM_IMPORTEXPORT_somd_somdcprx SOMDLINK SOMDClientProxyClassData;

/*
 * Declare the ABI 2 CClassData structure
 */
SOMEXTERN struct SOMDClientProxyCClassDataStructure {
	somMethodTabs parentMtab;
	somDToken instanceDataToken;
} SOM_IMPORTEXPORT_somd_somdcprx SOMDLINK SOMDClientProxyCClassData;

/*
 * Class Object and Method Token Macros
 */
#define _SOMCLASS_SOMDClientProxy (SOMDClientProxyClassData.classObject)
#ifndef SOMGD_SOMDClientProxy
    #if (defined(_SOMDClientProxy) || defined(__SOMDClientProxy))
        #undef _SOMDClientProxy
        #undef __SOMDClientProxy
        #define SOMGD_SOMDClientProxy 1
    #else
        #define _SOMDClientProxy _SOMCLASS_SOMDClientProxy
    #endif /* _SOMDClientProxy */
#endif /* SOMGD_SOMDClientProxy */
#define SOMDClientProxy_classObj _SOMCLASS_SOMDClientProxy
#define _SOMMTOKEN_SOMDClientProxy(method) ((somMToken)SOMDClientProxyClassData.method)

/*
 * New and Renew macros for SOMDClientProxy
 */
#define SOMDClientProxyNew() \
   ( _SOMDClientProxy ? \
	_somNew(_SOMDClientProxy) \
	: ( SOMDClientProxyNewClass(\
		SOMDClientProxy_MajorVersion, \
		SOMDClientProxy_MinorVersion),\
	   _somNew(_SOMDClientProxy)))
#define SOMDClientProxyRenew(buf) \
   ( _SOMDClientProxy ? \
	_somRenew(_SOMDClientProxy, buf) \
	: ( SOMDClientProxyNewClass(\
		SOMDClientProxy_MajorVersion, \
		SOMDClientProxy_MinorVersion),\
	   _somRenew(_SOMDClientProxy, buf)))

/*
 * New Method: somdTargetFree
 */
typedef void   SOMLINK somTP_SOMDClientProxy_somdTargetFree(SOMDClientProxy somSelf, Environment *ev);
typedef somTP_SOMDClientProxy_somdTargetFree *somTD_SOMDClientProxy_somdTargetFree;
/*
 *  Forwards _somFree method call to the remote target object.
 */
#define somMD_SOMDClientProxy_somdTargetFree "::SOMDClientProxy::somdTargetFree"
#define SOMDClientProxy_somdTargetFree(somSelf,ev) \
    (SOM_Resolve(somSelf, SOMDClientProxy, somdTargetFree) \
	(somSelf,ev))
#ifndef SOMGD_somdTargetFree
    #if (defined(_somdTargetFree) || defined(__somdTargetFree))
        #undef _somdTargetFree
        #undef __somdTargetFree
        #define SOMGD_somdTargetFree 1
    #else
        #define _somdTargetFree SOMDClientProxy_somdTargetFree
    #endif /* _somdTargetFree */
#endif /* SOMGD_somdTargetFree */

/*
 * New Method: somdTargetGetClass
 */
typedef SOMClass   SOMLINK somTP_SOMDClientProxy_somdTargetGetClass(SOMDClientProxy somSelf, Environment *ev);
typedef somTP_SOMDClientProxy_somdTargetGetClass *somTD_SOMDClientProxy_somdTargetGetClass;
/*
 *  Forwards _somGetClass method call to the remote target object.
 *  Returns a pointer to the target's class object.
 */
#define somMD_SOMDClientProxy_somdTargetGetClass "::SOMDClientProxy::somdTargetGetClass"
#define SOMDClientProxy_somdTargetGetClass(somSelf,ev) \
    (SOM_Resolve(somSelf, SOMDClientProxy, somdTargetGetClass) \
	(somSelf,ev))
#ifndef SOMGD_somdTargetGetClass
    #if (defined(_somdTargetGetClass) || defined(__somdTargetGetClass))
        #undef _somdTargetGetClass
        #undef __somdTargetGetClass
        #define SOMGD_somdTargetGetClass 1
    #else
        #define _somdTargetGetClass SOMDClientProxy_somdTargetGetClass
    #endif /* _somdTargetGetClass */
#endif /* SOMGD_somdTargetGetClass */

/*
 * New Method: somdTargetGetClassName
 */
typedef string   SOMLINK somTP_SOMDClientProxy_somdTargetGetClassName(SOMDClientProxy somSelf, Environment *ev);
typedef somTP_SOMDClientProxy_somdTargetGetClassName *somTD_SOMDClientProxy_somdTargetGetClassName;
/*
 *  Forwards _somGetClassName method call to the remote target object.
 *  Returns the class name of the target object.
 */
#define somMD_SOMDClientProxy_somdTargetGetClassName "::SOMDClientProxy::somdTargetGetClassName"
#define SOMDClientProxy_somdTargetGetClassName(somSelf,ev) \
    (SOM_Resolve(somSelf, SOMDClientProxy, somdTargetGetClassName) \
	(somSelf,ev))
#ifndef SOMGD_somdTargetGetClassName
    #if (defined(_somdTargetGetClassName) || defined(__somdTargetGetClassName))
        #undef _somdTargetGetClassName
        #undef __somdTargetGetClassName
        #define SOMGD_somdTargetGetClassName 1
    #else
        #define _somdTargetGetClassName SOMDClientProxy_somdTargetGetClassName
    #endif /* _somdTargetGetClassName */
#endif /* SOMGD_somdTargetGetClassName */

/*
 * New Method: somdProxyFree
 */
typedef void   SOMLINK somTP_SOMDClientProxy_somdProxyFree(SOMDClientProxy somSelf, Environment *ev);
typedef somTP_SOMDClientProxy_somdProxyFree *somTD_SOMDClientProxy_somdProxyFree;
/*
 *  Performs _somFree method call on the local proxy object.
 */
#define somMD_SOMDClientProxy_somdProxyFree "::SOMDClientProxy::somdProxyFree"
#define SOMDClientProxy_somdProxyFree(somSelf,ev) \
    (SOM_Resolve(somSelf, SOMDClientProxy, somdProxyFree) \
	(somSelf,ev))
#ifndef SOMGD_somdProxyFree
    #if (defined(_somdProxyFree) || defined(__somdProxyFree))
        #undef _somdProxyFree
        #undef __somdProxyFree
        #define SOMGD_somdProxyFree 1
    #else
        #define _somdProxyFree SOMDClientProxy_somdProxyFree
    #endif /* _somdProxyFree */
#endif /* SOMGD_somdProxyFree */

/*
 * New Method: somdProxyGetClass
 */
typedef SOMClass   SOMLINK somTP_SOMDClientProxy_somdProxyGetClass(SOMDClientProxy somSelf, Environment *ev);
typedef somTP_SOMDClientProxy_somdProxyGetClass *somTD_SOMDClientProxy_somdProxyGetClass;
/*
 *  Performs _somGetClass method call on the local proxy object.
 *  Returns a pointer to the proxy's class object.
 */
#define somMD_SOMDClientProxy_somdProxyGetClass "::SOMDClientProxy::somdProxyGetClass"
#define SOMDClientProxy_somdProxyGetClass(somSelf,ev) \
    (SOM_Resolve(somSelf, SOMDClientProxy, somdProxyGetClass) \
	(somSelf,ev))
#ifndef SOMGD_somdProxyGetClass
    #if (defined(_somdProxyGetClass) || defined(__somdProxyGetClass))
        #undef _somdProxyGetClass
        #undef __somdProxyGetClass
        #define SOMGD_somdProxyGetClass 1
    #else
        #define _somdProxyGetClass SOMDClientProxy_somdProxyGetClass
    #endif /* _somdProxyGetClass */
#endif /* SOMGD_somdProxyGetClass */

/*
 * New Method: somdProxyGetClassName
 */
typedef string   SOMLINK somTP_SOMDClientProxy_somdProxyGetClassName(SOMDClientProxy somSelf, Environment *ev);
typedef somTP_SOMDClientProxy_somdProxyGetClassName *somTD_SOMDClientProxy_somdProxyGetClassName;
/*
 *  Performs _somGetClassName method call on the local proxy object.
 *  Returns the class name of the proxy object.
 */
#define somMD_SOMDClientProxy_somdProxyGetClassName "::SOMDClientProxy::somdProxyGetClassName"
#define SOMDClientProxy_somdProxyGetClassName(somSelf,ev) \
    (SOM_Resolve(somSelf, SOMDClientProxy, somdProxyGetClassName) \
	(somSelf,ev))
#ifndef SOMGD_somdProxyGetClassName
    #if (defined(_somdProxyGetClassName) || defined(__somdProxyGetClassName))
        #undef _somdProxyGetClassName
        #undef __somdProxyGetClassName
        #define SOMGD_somdProxyGetClassName 1
    #else
        #define _somdProxyGetClassName SOMDClientProxy_somdProxyGetClassName
    #endif /* _somdProxyGetClassName */
#endif /* SOMGD_somdProxyGetClassName */

/*
 * New Method: somdReleaseResources
 */
typedef void   SOMLINK somTP_SOMDClientProxy_somdReleaseResources(SOMDClientProxy somSelf, Environment *ev);
typedef somTP_SOMDClientProxy_somdReleaseResources *somTD_SOMDClientProxy_somdReleaseResources;
/*
 *  Instructs the proxy to free any memory it owns for use by the client.
 */
#define somMD_SOMDClientProxy_somdReleaseResources "::SOMDClientProxy::somdReleaseResources"
#define SOMDClientProxy_somdReleaseResources(somSelf,ev) \
    (SOM_Resolve(somSelf, SOMDClientProxy, somdReleaseResources) \
	(somSelf,ev))
#ifndef SOMGD_somdReleaseResources
    #if (defined(_somdReleaseResources) || defined(__somdReleaseResources))
        #undef _somdReleaseResources
        #undef __somdReleaseResources
        #define SOMGD_somdReleaseResources 1
    #else
        #define _somdReleaseResources SOMDClientProxy_somdReleaseResources
    #endif /* _somdReleaseResources */
#endif /* SOMGD_somdReleaseResources */

/*
 * Full Names for Inherited Methods
 */
/* overridden methods */
#define SOMDClientProxy_sommProxyDispatch SOMMProxyForObject_sommProxyDispatch
#define SOMDClientProxy_somDefaultInit SOMObject_somDefaultInit
#define SOMDClientProxy_somDestruct SOMObject_somDestruct
#define SOMDClientProxy_somFree SOMObject_somFree
#define SOMDClientProxy_somGetClass SOMObject_somGetClass
#define SOMDClientProxy_somGetClassName SOMObject_somGetClassName
#define SOMDClientProxy_somClassDispatch SOMObject_somClassDispatch
#define SOMDClientProxy_somPrintSelf SOMObject_somPrintSelf
#define SOMDClientProxy_somDumpSelf SOMObject_somDumpSelf
#define SOMDClientProxy_somDumpSelfInt SOMObject_somDumpSelfInt
#define SOMDClientProxy_is_SOM_ref SOMDObject_is_SOM_ref
#define SOMDClientProxy_is_constant SOMDObject_is_constant
#define SOMDClientProxy_is_proxy SOMDObject_is_proxy
#define SOMDClientProxy_duplicate SOMDObject_duplicate
#define SOMDClientProxy_release SOMDObject_release
#define SOMDClientProxy_create_request SOMDObject_create_request
#define SOMDClientProxy_create_request_args SOMDObject_create_request_args
#define SOMDClientProxy__get_type_id SOMDObject__get_type_id
#define SOMDClientProxy__set_type_id SOMDObject__set_type_id

#ifndef SOM_DONT_USE_INHERITED_MACROS
#define SOMDClientProxy__get_sommProxyTarget SOMMProxyForObject__get_sommProxyTarget
#define SOMDClientProxy__set_sommProxyTarget SOMMProxyForObject__set_sommProxyTarget
#define SOMDClientProxy_somDefaultCopyInit SOMObject_somDefaultCopyInit
#define SOMDClientProxy_somDefaultAssign SOMObject_somDefaultAssign
#define SOMDClientProxy_somDefaultConstCopyInit SOMObject_somDefaultConstCopyInit
#define SOMDClientProxy_somDefaultVCopyInit SOMObject_somDefaultVCopyInit
#define SOMDClientProxy_somDefaultConstVCopyInit SOMObject_somDefaultConstVCopyInit
#define SOMDClientProxy_somDefaultConstAssign SOMObject_somDefaultConstAssign
#define SOMDClientProxy_somDefaultVAssign SOMObject_somDefaultVAssign
#define SOMDClientProxy_somDefaultConstVAssign SOMObject_somDefaultConstVAssign
#define SOMDClientProxy_somInit SOMObject_somInit
#define SOMDClientProxy_somUninit SOMObject_somUninit
#define SOMDClientProxy_somGetSize SOMObject_somGetSize
#define SOMDClientProxy_somIsA SOMObject_somIsA
#define SOMDClientProxy_somIsInstanceOf SOMObject_somIsInstanceOf
#define SOMDClientProxy_somRespondsTo SOMObject_somRespondsTo
#define SOMDClientProxy_somDispatch SOMObject_somDispatch
#define SOMDClientProxy_somCastObj SOMObject_somCastObj
#define SOMDClientProxy_somResetObj SOMObject_somResetObj
#define SOMDClientProxy_is_nil SOMDObject_is_nil
#define SOMDClientProxy_get_implementation SOMDObject_get_implementation
#define SOMDClientProxy_get_interface SOMDObject_get_interface
#endif /* SOM_DONT_USE_INHERITED_MACROS */

#endif       /* SOM_SOMDClientProxy_h */
