
/*
 * This file was generated by the SOM Compiler.
 * FileName: SOMDCPRX.h.
 * Generated using:
 *     SOM Precompiler somipc: 2.29.1.3
 *     SOM Emitter emith.dll: 2.41
 */

/*
 * 
 *    COMPONENT_NAME: somd
 * 
 *    ORIGINS: 27
 * 
 * 
 *    10H9767, 10H9769  (C) COPYRIGHT International Business Machines Corp. 1992,1994
 *    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 is the class that implements DSOM proxy objects in clients.
 * 
 *    This class is a subclass of SOMDObject.  It inherits the basic behavior
 *    (methods) of a CORBA object reference from that parent class.
 *    Thus, it "is a" SOMDObject.
 * 
 *    This class overrides the usual somDispatch methods with versions
 *    that build a DSOM Request for the invocation and dispatch it, remotely.
 *    It is intended that the implementation of this "generic" proxy class
 *    will be used to derive specific proxy classes via multiple inheritance.
 *    The new dispatch method is inherited from this client proxy class, while
 *    the desired interface--and language bindings--are inherited from the
 *    target class (but no implementation).
 * 
 *    E.g.,
 *           SOMDClientProxy      Animal
 *                     \           /
 *                      \         / (interface only)
 *                       \       /
 *                    Animal__Proxy
 * 
 *    Note that SOMDClientProxy is an instance of SOMDMetaProxy.
 */


#ifndef SOM_SOMDClientProxy_h
#define SOM_SOMDClientProxy_h


#include <som.h>

/*
 * -- 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 class data structures as resolution macros
 */
#define SOMDClientProxyClassData (*resolve_SOMDClientProxyClassData())
#define SOMDClientProxyCClassData (*resolve_SOMDClientProxyCClassData())

/*
 * Define the class name as an object type
 */
#ifndef SOMDClientProxy
#define SOMDClientProxy SOMObject
#endif
#include <somdobj.h>

/*
 * Start of user-defined types:
 */
#ifndef SOMClass
    #define SOMClass SOMObject
#endif /* SOMClass */
#ifndef Container
    #define Container SOMObject
#endif /* Container */
#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 */
#ifndef CommBinding
    #define CommBinding SOMObject
#endif /* CommBinding */
#ifndef somdMemoryMgr
    #define somdMemoryMgr SOMObject
#endif /* somdMemoryMgr */

/*
 * End of user-defined types.
 */

#define SOMDClientProxy_MajorVersion 2
#define SOMDClientProxy_MinorVersion 1

/*
 * External name shortening if required
 */
#ifdef SOM_USE_SHORT_EXTERNAL_NAMES
#define SOMDClientProxyNewClass c
#define SOMDClientProxyClassData d
#define SOMDClientProxyCClassData x
#endif /* SOM_USE_SHORT_EXTERNAL_NAMES */
/*--------------Migration------------*/
#define SOMDClientProxy_classObj SOMDClientProxyClassData.classObject
#define _SOMDClientProxy SOMDClientProxy_classObj

/*
 * Declare the class creation procedure
 */
SOMEXTERN SOMClass * SOMLINK SOMDClientProxyNewClass(integer4 somntmajorVersion,
		integer4 somntminorVersion);

/*
 * Declare the class data structure
 */
SOMEXTERN struct SOMDClientProxyClassDataStructure {
	SOMClass *classObject;
	somMToken somdTargetFree;
	somMToken somdTargetGetClass;
	somMToken somdTargetGetClassName;
	somMToken somdProxyFree;
	somMToken somdProxyGetClass;
	somMToken somdProxyGetClassName;
	somMToken set_binding;
	somMToken get_binding;
	somMToken reset_binding;
	somMToken _get_ctx_seq;
	somMToken _set_ctx_seq;
	somMToken somdReleaseResources;
	somMToken _get_memoryMgr;
}  _SOMDClientProxyClassData;
SOMEXTERN struct SOMDClientProxyClassDataStructure * SOMLINK resolve_SOMDClientProxyClassData(void);

/*
 * Declare the C specific class data structure
 */
SOMEXTERN struct SOMDClientProxyCClassDataStructure {
	somMethodTabs parentMtab;
	somDToken instanceDataToken;
}  _SOMDClientProxyCClassData;
SOMEXTERN struct SOMDClientProxyCClassDataStructure * SOMLINK resolve_SOMDClientProxyCClassData(void);

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

/*
 * Override method: create_request
 */
#define SOMDClientProxy_create_request(somSelf,ev,ctx,operation,arg_list,result,request,req_flags) \
	SOMDObject_create_request(somSelf,ev,ctx,operation,arg_list,result,request,req_flags)

/*
 * Override method: create_request_args
 */
#define SOMDClientProxy_create_request_args(somSelf,ev,operation,arg_list,result) \
	SOMDObject_create_request_args(somSelf,ev,operation,arg_list,result)

/*
 * Override method: is_proxy
 */
#define SOMDClientProxy_is_proxy(somSelf,ev) \
	SOMDObject_is_proxy(somSelf,ev)

/*
 * Override method: release
 */
#define SOMDClientProxy_release(somSelf,ev) \
	SOMDObject_release(somSelf,ev)

/*
 * Override method: somDispatch
 */
#define SOMDClientProxy_somDispatch(somSelf,retValue,methodId,ap) \
	SOMObject_somDispatch(somSelf,retValue,methodId,ap)

/*
 * Override method: somDispatchV
 */
#define SOMDClientProxy_somDispatchV(somSelf,methodId,descriptor,ap) \
	SOMObject_somDispatchV(somSelf,methodId,descriptor,ap)

/*
 * Override method: somDispatchL
 */
#define SOMDClientProxy_somDispatchL(somSelf,methodId,descriptor,ap) \
	SOMObject_somDispatchL(somSelf,methodId,descriptor,ap)

/*
 * Override method: somDispatchD
 */
#define SOMDClientProxy_somDispatchD(somSelf,methodId,descriptor,ap) \
	SOMObject_somDispatchD(somSelf,methodId,descriptor,ap)

/*
 * Override method: somDispatchA
 */
#define SOMDClientProxy_somDispatchA(somSelf,methodId,descriptor,ap) \
	SOMObject_somDispatchA(somSelf,methodId,descriptor,ap)

/*
 * Override method: somFree
 */
#define SOMDClientProxy_somFree(somSelf) \
	SOMObject_somFree(somSelf)

/*
 * Override method: somGetClass
 */
#define SOMDClientProxy_somGetClass(somSelf) \
	SOMObject_somGetClass(somSelf)

/*
 * Override method: somGetClassName
 */
#define SOMDClientProxy_somGetClassName(somSelf) \
	SOMObject_somGetClassName(somSelf)

/*
 * Override method: somDestruct
 */
#define SOMDClientProxy_somDestruct(somSelf,doFree,ctrl) \
	SOMObject_somDestruct(somSelf,doFree,ctrl)

/*
 * Override method: somDefaultInit
 */
#define SOMDClientProxy_somDefaultInit(somSelf,ctrl) \
	SOMObject_somDefaultInit(somSelf,ctrl)

/*
 * New Method: somdTargetFree
 */
typedef void   (SOMLINK * somTD_SOMDClientProxy_somdTargetFree)(SOMDClientProxy *somSelf, Environment *ev);
#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 * somTD_SOMDClientProxy_somdTargetGetClass)(SOMDClientProxy *somSelf, Environment *ev);
#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 * somTD_SOMDClientProxy_somdTargetGetClassName)(SOMDClientProxy *somSelf, Environment *ev);
#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 * somTD_SOMDClientProxy_somdProxyFree)(SOMDClientProxy *somSelf, Environment *ev);
#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 * somTD_SOMDClientProxy_somdProxyGetClass)(SOMDClientProxy *somSelf, Environment *ev);
#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 * somTD_SOMDClientProxy_somdProxyGetClassName)(SOMDClientProxy *somSelf, Environment *ev);
#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 * somTD_SOMDClientProxy_somdReleaseResources)(SOMDClientProxy *somSelf, Environment *ev);
#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 */
#ifndef SOM_DONT_USE_INHERITED_MACROS
#define SOMDClientProxy_get_implementation SOMDObject_get_implementation
#define SOMDClientProxy_get_interface SOMDObject_get_interface
#define SOMDClientProxy_is_nil SOMDObject_is_nil
#define SOMDClientProxy_is_SOM_ref SOMDObject_is_SOM_ref
#define SOMDClientProxy_is_constant SOMDObject_is_constant
#define SOMDClientProxy_duplicate SOMDObject_duplicate
#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_somClassDispatch SOMObject_somClassDispatch
#define SOMDClientProxy_somCastObj SOMObject_somCastObj
#define SOMDClientProxy_somResetObj SOMObject_somResetObj
#define SOMDClientProxy_somPrintSelf SOMObject_somPrintSelf
#define SOMDClientProxy_somDumpSelf SOMObject_somDumpSelf
#define SOMDClientProxy_somDumpSelfInt SOMObject_somDumpSelfInt
#endif /* SOM_DONT_USE_INHERITED_MACROS */

#endif       /* SOM_SOMDClientProxy_h */
