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

/*
 * 
 *  Theory of Operation
 * 
 * 
 *   This file defines class ODObject.  This class is the common base class
 *   for all OpenDoc classes.  It provides for extensibility through the
 *   Extensions protocol.
 * 
 *  Classes defined in this interface
 * 
 */


#ifndef SOM_M_ODObject_h
#define SOM_M_ODObject_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 M_ODObjectClassData (*resolve_M_ODObjectClassData())
#define M_ODObjectCClassData (*resolve_M_ODObjectCClassData())

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

/*
 * Start of user-defined types:
 */
#ifndef SOMClass
    #define SOMClass SOMObject
#endif /* SOMClass */
#ifndef ODObject
    #define ODObject SOMObject
#endif /* ODObject */
#ifndef ODExtension
    #define ODExtension SOMObject
#endif /* ODExtension */

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

#define M_ODObject_MajorVersion 0
#define M_ODObject_MinorVersion 0

/*
 * External name shortening if required
 */
#ifdef SOM_USE_SHORT_EXTERNAL_NAMES
#define M_ODObjectNewClass c
#define M_ODObjectClassData d
#define M_ODObjectCClassData x
#endif /* SOM_USE_SHORT_EXTERNAL_NAMES */
/*--------------Migration------------*/
#define M_ODObject_classObj M_ODObjectClassData.classObject
#define _M_ODObject M_ODObject_classObj

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

/*
 * Declare the class data structure
 */
SOMEXTERN struct M_ODObjectClassDataStructure {
	SOMClass *classObject;
}  _M_ODObjectClassData;
SOMEXTERN struct M_ODObjectClassDataStructure * SOMLINK resolve_M_ODObjectClassData(void);

/*
 * Declare the C specific class data structure
 */
SOMEXTERN struct M_ODObjectCClassDataStructure {
	somMethodTabs parentMtab;
	somDToken instanceDataToken;
}  _M_ODObjectCClassData;
SOMEXTERN struct M_ODObjectCClassDataStructure * SOMLINK resolve_M_ODObjectCClassData(void);

/*
 * New and Renew macros for M_ODObject
 */
#define M_ODObjectNew() \
   (_somNew(_M_ODObject ? _M_ODObject : M_ODObjectNewClass(M_ODObject_MajorVersion, M_ODObject_MinorVersion)))
#define M_ODObjectRenew(buf) \
   (_somRenew(_M_ODObject ? _M_ODObject : M_ODObjectNewClass(M_ODObject_MajorVersion, M_ODObject_MinorVersion), buf))

/*
 * Override method: somNew
 */
#define M_ODObject_somNew(somSelf) \
	SOMClass_somNew(somSelf)
#ifndef SOM_DONT_USE_INHERITED_MACROS
#define M_ODObject__get_somDataAlignment SOMClass__get_somDataAlignment
#define M_ODObject__get_somInstanceDataOffsets SOMClass__get_somInstanceDataOffsets
#define M_ODObject__get_somDirectInitClasses SOMClass__get_somDirectInitClasses
#define M_ODObject__set_somDirectInitClasses SOMClass__set_somDirectInitClasses
#define M_ODObject_somNewNoInit SOMClass_somNewNoInit
#define M_ODObject_somRenew SOMClass_somRenew
#define M_ODObject_somRenewNoInit SOMClass_somRenewNoInit
#define M_ODObject_somRenewNoZero SOMClass_somRenewNoZero
#define M_ODObject_somRenewNoInitNoZero SOMClass_somRenewNoInitNoZero
#define M_ODObject_somAllocate SOMClass_somAllocate
#define M_ODObject_somDeallocate SOMClass_somDeallocate
#define M_ODObject__get_somClassAllocate SOMClass__get_somClassAllocate
#define M_ODObject__get_somClassDeallocate SOMClass__get_somClassDeallocate
#define M_ODObject_somGetInstanceInitMask SOMClass_somGetInstanceInitMask
#define M_ODObject_somGetInstanceDestructionMask SOMClass_somGetInstanceDestructionMask
#define M_ODObject_somGetInstanceAssignmentMask SOMClass_somGetInstanceAssignmentMask
#define M_ODObject_somInitClass SOMClass_somInitClass
#define M_ODObject_somInitMIClass SOMClass_somInitMIClass
#define M_ODObject_somAddStaticMethod SOMClass_somAddStaticMethod
#define M_ODObject_somAddDynamicMethod SOMClass_somAddDynamicMethod
#define M_ODObject_somOverrideSMethod SOMClass_somOverrideSMethod
#define M_ODObject_somClassReady SOMClass_somClassReady
#define M_ODObject_somGetApplyStub SOMClass_somGetApplyStub
#define M_ODObject_somGetClassData SOMClass_somGetClassData
#define M_ODObject_somSetClassData SOMClass_somSetClassData
#define M_ODObject_somGetClassMtab SOMClass_somGetClassMtab
#define M_ODObject_somGetInstanceOffset SOMClass_somGetInstanceOffset
#define M_ODObject_somGetInstancePartSize SOMClass_somGetInstancePartSize
#define M_ODObject_somGetInstanceSize SOMClass_somGetInstanceSize
#define M_ODObject_somGetInstanceToken SOMClass_somGetInstanceToken
#define M_ODObject_somGetMemberToken SOMClass_somGetMemberToken
#define M_ODObject_somGetMethodData SOMClass_somGetMethodData
#define M_ODObject_somGetRdStub SOMClass_somGetRdStub
#define M_ODObject_somGetMethodDescriptor SOMClass_somGetMethodDescriptor
#define M_ODObject_somGetMethodIndex SOMClass_somGetMethodIndex
#define M_ODObject_somGetMethodToken SOMClass_somGetMethodToken
#define M_ODObject_somGetName SOMClass_somGetName
#define M_ODObject_somGetNthMethodData SOMClass_somGetNthMethodData
#define M_ODObject_somGetNthMethodInfo SOMClass_somGetNthMethodInfo
#define M_ODObject_somGetNumMethods SOMClass_somGetNumMethods
#define M_ODObject_somGetNumStaticMethods SOMClass_somGetNumStaticMethods
#define M_ODObject_somGetParent SOMClass_somGetParent
#define M_ODObject_somGetParents SOMClass_somGetParents
#define M_ODObject_somGetPClsMtab SOMClass_somGetPClsMtab
#define M_ODObject_somGetPClsMtabs SOMClass_somGetPClsMtabs
#define M_ODObject_somGetVersionNumbers SOMClass_somGetVersionNumbers
#define M_ODObject_somSetMethodDescriptor SOMClass_somSetMethodDescriptor
#define M_ODObject_somFindMethod SOMClass_somFindMethod
#define M_ODObject_somFindMethodOk SOMClass_somFindMethodOk
#define M_ODObject_somFindSMethod SOMClass_somFindSMethod
#define M_ODObject_somFindSMethodOk SOMClass_somFindSMethodOk
#define M_ODObject_somLookupMethod SOMClass_somLookupMethod
#define M_ODObject_somCheckVersion SOMClass_somCheckVersion
#define M_ODObject_somDescendedFrom SOMClass_somDescendedFrom
#define M_ODObject_somSupportsMethod SOMClass_somSupportsMethod
#define M_ODObject_somDefinedMethod SOMClass_somDefinedMethod
#define M_ODObject_somOverrideMtab SOMClass_somOverrideMtab
#define M_ODObject_somDefaultInit SOMObject_somDefaultInit
#define M_ODObject_somDestruct SOMObject_somDestruct
#define M_ODObject_somDefaultCopyInit SOMObject_somDefaultCopyInit
#define M_ODObject_somDefaultAssign SOMObject_somDefaultAssign
#define M_ODObject_somDefaultConstCopyInit SOMObject_somDefaultConstCopyInit
#define M_ODObject_somDefaultVCopyInit SOMObject_somDefaultVCopyInit
#define M_ODObject_somDefaultConstVCopyInit SOMObject_somDefaultConstVCopyInit
#define M_ODObject_somDefaultConstAssign SOMObject_somDefaultConstAssign
#define M_ODObject_somDefaultVAssign SOMObject_somDefaultVAssign
#define M_ODObject_somDefaultConstVAssign SOMObject_somDefaultConstVAssign
#define M_ODObject_somInit SOMObject_somInit
#define M_ODObject_somFree SOMObject_somFree
#define M_ODObject_somUninit SOMObject_somUninit
#define M_ODObject_somGetClass SOMObject_somGetClass
#define M_ODObject_somGetClassName SOMObject_somGetClassName
#define M_ODObject_somGetSize SOMObject_somGetSize
#define M_ODObject_somIsA SOMObject_somIsA
#define M_ODObject_somIsInstanceOf SOMObject_somIsInstanceOf
#define M_ODObject_somRespondsTo SOMObject_somRespondsTo
#define M_ODObject_somDispatch SOMObject_somDispatch
#define M_ODObject_somClassDispatch SOMObject_somClassDispatch
#define M_ODObject_somCastObj SOMObject_somCastObj
#define M_ODObject_somResetObj SOMObject_somResetObj
#define M_ODObject_somDispatchV SOMObject_somDispatchV
#define M_ODObject_somDispatchL SOMObject_somDispatchL
#define M_ODObject_somDispatchA SOMObject_somDispatchA
#define M_ODObject_somDispatchD SOMObject_somDispatchD
#define M_ODObject_somPrintSelf SOMObject_somPrintSelf
#define M_ODObject_somDumpSelf SOMObject_somDumpSelf
#define M_ODObject_somDumpSelfInt SOMObject_somDumpSelfInt
#endif /* SOM_DONT_USE_INHERITED_MACROS */

#endif       /* SOM_M_ODObject_h */

#ifndef SOM_ODObject_h
#define SOM_ODObject_h


/*
 * Passthru lines: File: "C.h", "before"
 */

#include <ODTypes.h>

#ifndef _EXCEPT_
#include <Except.h>
#endif


#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 ODObjectClassData (*resolve_ODObjectClassData())
#define ODObjectCClassData (*resolve_ODObjectCClassData())

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

/*
 * Start of user-defined types:
 */

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

#define ODObject_MajorVersion 0
#define ODObject_MinorVersion 0

/*
 * External name shortening if required
 */
#ifdef SOM_USE_SHORT_EXTERNAL_NAMES
#define ODObjectNewClass c
#define ODObjectClassData d
#define ODObjectCClassData x
#endif /* SOM_USE_SHORT_EXTERNAL_NAMES */

/*
 * Include the meta class file
 */
#include <ODOBJECT.h>
/*--------------Migration------------*/
#define ODObject_classObj ODObjectClassData.classObject
#define _ODObject ODObject_classObj

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

/*
 * Declare the class data structure
 */
SOMEXTERN struct ODObjectClassDataStructure {
	SOMClass *classObject;
	somMToken InitObject;
	somMToken IsInitialized;
	somMToken HasExtension;
	somMToken GetExtension;
	somMToken ReleaseExtension;
	somMToken Purge;
	somMToken IsEqualTo;
	somMToken SubClassResponsibility;
}  _ODObjectClassData;
SOMEXTERN struct ODObjectClassDataStructure * SOMLINK resolve_ODObjectClassData(void);

/*
 * Declare the C specific class data structure
 */
SOMEXTERN struct ODObjectCClassDataStructure {
	somMethodTabs parentMtab;
	somDToken instanceDataToken;
}  _ODObjectCClassData;
SOMEXTERN struct ODObjectCClassDataStructure * SOMLINK resolve_ODObjectCClassData(void);

/*
 * New and Renew macros for ODObject
 */
#define ODObjectNew() \
   (_somNew(_ODObject ? _ODObject : ODObjectNewClass(ODObject_MajorVersion, ODObject_MinorVersion)))
#define ODObjectRenew(buf) \
   (_somRenew(_ODObject ? _ODObject : ODObjectNewClass(ODObject_MajorVersion, ODObject_MinorVersion), buf))

/*
 * Override method: somInit
 */
#define ODObject_somInit(somSelf) \
	SOMObject_somInit(somSelf)

/*
 * Override method: somUninit
 */
#define ODObject_somUninit(somSelf) \
	SOMObject_somUninit(somSelf)

/*
 * New Method: InitObject
 */
typedef void   (SOMLINK * somTD_ODObject_InitObject)(ODObject *somSelf, Environment *ev);
#define somMD_ODObject_InitObject "::ODObject::InitObject"
#define ODObject_InitObject(somSelf,ev) \
    (SOM_Resolve(somSelf, ODObject, InitObject) \
	(somSelf,ev))
#ifndef SOMGD_InitObject
    #if (defined(_InitObject) || defined(__InitObject))
        #undef _InitObject
        #undef __InitObject
        #define SOMGD_InitObject 1
    #else
        #define _InitObject ODObject_InitObject
    #endif /* _InitObject */
#endif /* SOMGD_InitObject */

/*
 * New Method: IsInitialized
 */
typedef ODBoolean   (SOMLINK * somTD_ODObject_IsInitialized)(ODObject *somSelf, Environment *ev);
#define somMD_ODObject_IsInitialized "::ODObject::IsInitialized"
#define ODObject_IsInitialized(somSelf,ev) \
    (SOM_Resolve(somSelf, ODObject, IsInitialized) \
	(somSelf,ev))
#ifndef SOMGD_IsInitialized
    #if (defined(_IsInitialized) || defined(__IsInitialized))
        #undef _IsInitialized
        #undef __IsInitialized
        #define SOMGD_IsInitialized 1
    #else
        #define _IsInitialized ODObject_IsInitialized
    #endif /* _IsInitialized */
#endif /* SOMGD_IsInitialized */

/*
 * New Method: HasExtension
 */
typedef ODBoolean   (SOMLINK * somTD_ODObject_HasExtension)(ODObject *somSelf, Environment *ev,
		ODType extensionName);
#define somMD_ODObject_HasExtension "::ODObject::HasExtension"
#define ODObject_HasExtension(somSelf,ev,extensionName) \
    (SOM_Resolve(somSelf, ODObject, HasExtension) \
	(somSelf,ev,extensionName))
#ifndef SOMGD_HasExtension
    #if (defined(_HasExtension) || defined(__HasExtension))
        #undef _HasExtension
        #undef __HasExtension
        #define SOMGD_HasExtension 1
    #else
        #define _HasExtension ODObject_HasExtension
    #endif /* _HasExtension */
#endif /* SOMGD_HasExtension */

/*
 * New Method: GetExtension
 */
typedef ODExtension*   (SOMLINK * somTD_ODObject_GetExtension)(ODObject *somSelf, Environment *ev,
		ODType extensionName);
#define somMD_ODObject_GetExtension "::ODObject::GetExtension"
#define ODObject_GetExtension(somSelf,ev,extensionName) \
    (SOM_Resolve(somSelf, ODObject, GetExtension) \
	(somSelf,ev,extensionName))
#ifndef SOMGD_GetExtension
    #if (defined(_GetExtension) || defined(__GetExtension))
        #undef _GetExtension
        #undef __GetExtension
        #define SOMGD_GetExtension 1
    #else
        #define _GetExtension ODObject_GetExtension
    #endif /* _GetExtension */
#endif /* SOMGD_GetExtension */

/*
 * New Method: ReleaseExtension
 */
typedef void   (SOMLINK * somTD_ODObject_ReleaseExtension)(ODObject *somSelf, Environment *ev,
		ODExtension* extension);
#define somMD_ODObject_ReleaseExtension "::ODObject::ReleaseExtension"
#define ODObject_ReleaseExtension(somSelf,ev,extension) \
    (SOM_Resolve(somSelf, ODObject, ReleaseExtension) \
	(somSelf,ev,extension))
#ifndef SOMGD_ReleaseExtension
    #if (defined(_ReleaseExtension) || defined(__ReleaseExtension))
        #undef _ReleaseExtension
        #undef __ReleaseExtension
        #define SOMGD_ReleaseExtension 1
    #else
        #define _ReleaseExtension ODObject_ReleaseExtension
    #endif /* _ReleaseExtension */
#endif /* SOMGD_ReleaseExtension */

/*
 * New Method: Purge
 */
typedef ODSize   (SOMLINK * somTD_ODObject_Purge)(ODObject *somSelf, Environment *ev,
		ODSize size);
#define somMD_ODObject_Purge "::ODObject::Purge"
#define ODObject_Purge(somSelf,ev,size) \
    (SOM_Resolve(somSelf, ODObject, Purge) \
	(somSelf,ev,size))
#ifndef SOMGD_Purge
    #if (defined(_Purge) || defined(__Purge))
        #undef _Purge
        #undef __Purge
        #define SOMGD_Purge 1
    #else
        #define _Purge ODObject_Purge
    #endif /* _Purge */
#endif /* SOMGD_Purge */

/*
 * New Method: IsEqualTo
 */
typedef ODBoolean   (SOMLINK * somTD_ODObject_IsEqualTo)(ODObject *somSelf, Environment *ev,
		ODObject* object);
#define somMD_ODObject_IsEqualTo "::ODObject::IsEqualTo"
#define ODObject_IsEqualTo(somSelf,ev,object) \
    (SOM_Resolve(somSelf, ODObject, IsEqualTo) \
	(somSelf,ev,object))
#ifndef SOMGD_IsEqualTo
    #if (defined(_IsEqualTo) || defined(__IsEqualTo))
        #undef _IsEqualTo
        #undef __IsEqualTo
        #define SOMGD_IsEqualTo 1
    #else
        #define _IsEqualTo ODObject_IsEqualTo
    #endif /* _IsEqualTo */
#endif /* SOMGD_IsEqualTo */

/*
 * New Method: SubClassResponsibility
 */
typedef void   (SOMLINK * somTD_ODObject_SubClassResponsibility)(ODObject *somSelf, Environment *ev);
#define somMD_ODObject_SubClassResponsibility "::ODObject::SubClassResponsibility"
#define ODObject_SubClassResponsibility(somSelf,ev) \
    (SOM_Resolve(somSelf, ODObject, SubClassResponsibility) \
	(somSelf,ev))
#ifndef SOMGD_SubClassResponsibility
    #if (defined(_SubClassResponsibility) || defined(__SubClassResponsibility))
        #undef _SubClassResponsibility
        #undef __SubClassResponsibility
        #define SOMGD_SubClassResponsibility 1
    #else
        #define _SubClassResponsibility ODObject_SubClassResponsibility
    #endif /* _SubClassResponsibility */
#endif /* SOMGD_SubClassResponsibility */
#ifndef SOM_DONT_USE_INHERITED_MACROS
#define ODObject_somDefaultInit SOMObject_somDefaultInit
#define ODObject_somDestruct SOMObject_somDestruct
#define ODObject_somDefaultCopyInit SOMObject_somDefaultCopyInit
#define ODObject_somDefaultAssign SOMObject_somDefaultAssign
#define ODObject_somDefaultConstCopyInit SOMObject_somDefaultConstCopyInit
#define ODObject_somDefaultVCopyInit SOMObject_somDefaultVCopyInit
#define ODObject_somDefaultConstVCopyInit SOMObject_somDefaultConstVCopyInit
#define ODObject_somDefaultConstAssign SOMObject_somDefaultConstAssign
#define ODObject_somDefaultVAssign SOMObject_somDefaultVAssign
#define ODObject_somDefaultConstVAssign SOMObject_somDefaultConstVAssign
#define ODObject_somFree SOMObject_somFree
#define ODObject_somGetClass SOMObject_somGetClass
#define ODObject_somGetClassName SOMObject_somGetClassName
#define ODObject_somGetSize SOMObject_somGetSize
#define ODObject_somIsA SOMObject_somIsA
#define ODObject_somIsInstanceOf SOMObject_somIsInstanceOf
#define ODObject_somRespondsTo SOMObject_somRespondsTo
#define ODObject_somDispatch SOMObject_somDispatch
#define ODObject_somClassDispatch SOMObject_somClassDispatch
#define ODObject_somCastObj SOMObject_somCastObj
#define ODObject_somResetObj SOMObject_somResetObj
#define ODObject_somDispatchV SOMObject_somDispatchV
#define ODObject_somDispatchL SOMObject_somDispatchL
#define ODObject_somDispatchA SOMObject_somDispatchA
#define ODObject_somDispatchD SOMObject_somDispatchD
#define ODObject_somPrintSelf SOMObject_somPrintSelf
#define ODObject_somDumpSelf SOMObject_somDumpSelf
#define ODObject_somDumpSelfInt SOMObject_somDumpSelfInt
#endif /* SOM_DONT_USE_INHERITED_MACROS */

#endif       /* SOM_ODObject_h */
