#ifndef SOMClass_API
#define SOMClass_API
/*
 * -- The Class API
 */

/*
 * Start of user-defined types:
 */
class SOMClass;
class SOMObject;
#ifndef _IDL_SEQUENCE_somToken_defined
#define _IDL_SEQUENCE_somToken_defined
typedef struct {
    unsigned long _maximum;
    unsigned long _length;
    somToken *_buffer;
} _IDL_SEQUENCE_somToken;
#endif /* _IDL_SEQUENCE_somToken_defined */ 
typedef
_IDL_SEQUENCE_somToken SOMClass_somTokenSequence;

/*
 *  a (generic) sequence of somTokens
 */
#ifndef _IDL_SEQUENCE_SOMClass_defined
#define _IDL_SEQUENCE_SOMClass_defined
typedef struct {
    unsigned long _maximum;
    unsigned long _length;
    SOMClass **_buffer;
} _IDL_SEQUENCE_SOMClass;
#endif /* _IDL_SEQUENCE_SOMClass_defined */ 
typedef
_IDL_SEQUENCE_SOMClass SOMClass_SOMClassSequence;

/*
 *  a sequence of classes
 */
typedef
struct SOMClass_somOffsetInfo {
SOMClass* cls;
long  offset;
} SOMClass_somOffsetInfo;

/*
 *  a structure to describe a class-related offset
 */
struct SOMClass_somOffsetInfo;
#ifndef _IDL_SEQUENCE_SOMClass_somOffsetInfo_defined
#define _IDL_SEQUENCE_SOMClass_somOffsetInfo_defined
typedef struct {
    unsigned long _maximum;
    unsigned long _length;
    struct SOMClass_somOffsetInfo *_buffer;
} _IDL_SEQUENCE_SOMClass_somOffsetInfo;
#endif /* _IDL_SEQUENCE_SOMClass_somOffsetInfo_defined */ 
typedef
_IDL_SEQUENCE_SOMClass_somOffsetInfo SOMClass_somOffsets;

/*
 *  a sequence of class-related offsets
 */
#ifndef _IDL_SEQUENCE_somId_defined
#define _IDL_SEQUENCE_somId_defined
typedef struct {
    unsigned long _maximum;
    unsigned long _length;
    somId *_buffer;
} _IDL_SEQUENCE_somId;
#endif /* _IDL_SEQUENCE_somId_defined */ 
typedef
_IDL_SEQUENCE_somId SOMClass_somIdSequence;

/*
 *  a sequence of somIds
 */
typedef
struct SOMClass_somUserPCallDispatchStruct {
somId methodId;
somMethodPtr dispatchFcn;
SOMClass* cls;
somMethodPtr continuation;
} SOMClass_somUserPCallDispatchStruct;

#ifndef SOM_DONT_USE_SHORT_NAMES

#ifndef SOM_DONT_USE_SHORT_NAMES
#ifndef SOMTGD_somTokenSequence
    #ifdef somTokenSequence
        #undef somTokenSequence
        #define SOMTGD_somTokenSequence 1
    #else
        #define somTokenSequence SOMClass_somTokenSequence
    #endif /* somTokenSequence */
#endif /* SOMTGD_somTokenSequence */
#endif /* SOM_DONT_USE_SHORT_NAMES */

#ifndef SOM_DONT_USE_SHORT_NAMES
#ifndef SOMTGD_SOMClassSequence
    #ifdef SOMClassSequence
        #undef SOMClassSequence
        #define SOMTGD_SOMClassSequence 1
    #else
        #define SOMClassSequence SOMClass_SOMClassSequence
    #endif /* SOMClassSequence */
#endif /* SOMTGD_SOMClassSequence */
#endif /* SOM_DONT_USE_SHORT_NAMES */
#ifndef SOMTGD_somOffsetInfo
    #ifdef somOffsetInfo
        #undef somOffsetInfo
        #define SOMTGD_somOffsetInfo 1
    #else
        #define somOffsetInfo SOMClass_somOffsetInfo
    #endif /* somOffsetInfo */
#endif /* SOMTGD_somOffsetInfo */
#ifndef SOMTGD__IDL_SEQUENCE_somOffsetInfo
    #ifdef _IDL_SEQUENCE_somOffsetInfo
        #undef _IDL_SEQUENCE_somOffsetInfo
        #define SOMTGD__IDL_SEQUENCE_somOffsetInfo 1
    #else
        #define _IDL_SEQUENCE_somOffsetInfo _IDL_SEQUENCE_SOMClass_somOffsetInfo
    #endif /* _IDL_SEQUENCE_somOffsetInfo */
#endif /* SOMTGD__IDL_SEQUENCE_somOffsetInfo */

#ifndef SOM_DONT_USE_SHORT_NAMES
#ifndef SOMTGD_somOffsets
    #ifdef somOffsets
        #undef somOffsets
        #define SOMTGD_somOffsets 1
    #else
        #define somOffsets SOMClass_somOffsets
    #endif /* somOffsets */
#endif /* SOMTGD_somOffsets */
#endif /* SOM_DONT_USE_SHORT_NAMES */

#ifndef SOM_DONT_USE_SHORT_NAMES
#ifndef SOMTGD_somIdSequence
    #ifdef somIdSequence
        #undef somIdSequence
        #define SOMTGD_somIdSequence 1
    #else
        #define somIdSequence SOMClass_somIdSequence
    #endif /* somIdSequence */
#endif /* SOMTGD_somIdSequence */
#endif /* SOM_DONT_USE_SHORT_NAMES */
#ifndef SOMTGD_somUserPCallDispatchStruct
    #ifdef somUserPCallDispatchStruct
        #undef somUserPCallDispatchStruct
        #define SOMTGD_somUserPCallDispatchStruct 1
    #else
        #define somUserPCallDispatchStruct SOMClass_somUserPCallDispatchStruct
    #endif /* somUserPCallDispatchStruct */
#endif /* SOMTGD_somUserPCallDispatchStruct */
#endif /* SOM_DONT_USE_SHORT_NAMES */

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

/* A procedure to create the SOMClass Class */
SOMEXTERN SOMClass * SOMLINK SOMClassNewClass(
		integer4,
		integer4 );

/* The API to the SOMClass class object, and the methods it introduces. */
SOMEXTERN struct SOMClassClassDataStructure {
	SOMClass *classObject;
	somMToken somNew;
	somMToken somRenew;
	somMToken somInitClass;
	somMToken somClassReady;
	somMToken somGetName;
	somMToken somGetParent;
	somMToken somDescendedFrom;
	somMToken somCheckVersion;
	somMToken somFindMethod;
	somMToken somFindMethodOk;
	somMToken somSupportsMethod;
	somMToken somGetNumMethods;
	somMToken somGetInstanceSize;
	somMToken somGetInstanceOffset;
	somMToken somGetInstancePartSize;
	somMToken somGetMethodIndex;
	somMToken somGetNumStaticMethods;
	somMToken somGetPClsMtab;
	somMToken somGetClassMtab;
	somMToken somAddStaticMethod;
	somMToken somOverrideSMethod;
	somMToken somAddDynamicMethod;
	somMToken somGetMethodOffset;
	somMToken somGetApplyStub;
	somMToken somFindSMethod;
	somMToken somFindSMethodOk;
	somMToken somGetMethodDescriptor;
	somMToken somGetNthMethodInfo;
	somMToken somSetClassData;
	somMToken somGetClassData;
	somMToken somNewNoInit;
	somMToken somRenewNoInit;
	somMToken somGetInstanceToken;
	somMToken somGetMemberToken;
	somMToken somSetMethodDescriptor;
	somMToken somGetMethodData;
	somMToken somOverrideMtab;
	somMToken somGetMethodToken;
	somMToken somGetParents;
	somMToken somGetPClsMtabs;
	somMToken somInitMIClass;
	somMToken somGetVersionNumbers;
	somMToken somLookupMethod;
	somMToken _get_somInstanceDataOffsets;
	somMToken somRenewNoZero;
	somMToken somRenewNoInitNoZero;
	somMToken somAllocate;
	somMToken somDeallocate;
	somMToken somGetRdStub;
	somMToken somGetNthMethodData;
	somMToken somCloneClass;
	somMToken _get_somMethodOffsets;
	somMToken _get_somDirectInitClasses;
	somMToken _set_somDirectInitClasses;
	somMToken somGetInstanceInitMask;
	somMToken somGetInstanceDestructionMask;
	somMToken somCastObjCls;
	somMToken somResetObjCls;
	somMToken _get_somTrueClass;
	somMToken _get_somCastedClass;
	somMToken somRegLPMToken;
	somMToken somDefinedMethod;
	somMToken somAddMethod;
	somMToken _get_somCClassData;
	somMToken _set_somCClassData;
	somMethodProc *somClassOfNewClassWithParents;
	somMToken _set_somClassDataOrder;
	somMToken _get_somClassDataOrder;
	somMToken somGetClassDataEntry;
	somMToken somSetClassDataEntry;
	somMToken _get_somDataAlignment;
	somMToken somGetInstanceAssignmentMask;
	somMToken _get_somDirectAssignClasses;
	somMToken setUserPCallDispatch;
	somMToken _get_somClassAllocate;
	somMToken _get_somClassDeallocate;
}  _SOMClassClassData;
SOMEXTERN struct SOMClassClassDataStructure * SOMLINK resolve_SOMClassClassData(void);
#define _SOMClass SOMClassClassData.classObject

/* The API to parentMtabs for SOMClass, and the instance data it introduces. */
SOMEXTERN struct SOMClassCClassDataStructure {
	somMethodTabs parentMtab;
	somDToken              instanceDataToken;
}  _SOMClassCClassData;
SOMEXTERN struct SOMClassCClassDataStructure * SOMLINK resolve_SOMClassCClassData(void);

/*
 * -- Typedefs for SOMClass Method Procedures
 */
SOMEXTERN {
typedef long   (SOMLINK * somTD_SOMClass__get_somDataAlignment)(SOMClass *somSelf);
typedef SOMClass_somOffsets   (SOMLINK * somTD_SOMClass__get_somInstanceDataOffsets)(SOMClass *somSelf);
typedef SOMClass_SOMClassSequence   (SOMLINK * somTD_SOMClass__get_somDirectInitClasses)(SOMClass *somSelf);
typedef void   (SOMLINK * somTD_SOMClass__set_somDirectInitClasses)(SOMClass *somSelf,
		SOMClass_SOMClassSequence* somDirectInitClasses);
typedef SOMClass_SOMClassSequence   (SOMLINK * somTD_SOMClass__get_somDirectAssignClasses)(SOMClass *somSelf);
typedef somCClassDataStructurePtr   (SOMLINK * somTD_SOMClass__get_somCClassData)(SOMClass *somSelf);
typedef void   (SOMLINK * somTD_SOMClass__set_somCClassData)(SOMClass *somSelf,
		somCClassDataStructurePtr somCClassData);
typedef SOMClass_somIdSequence   (SOMLINK * somTD_SOMClass__get_somClassDataOrder)(SOMClass *somSelf);
typedef void   (SOMLINK * somTD_SOMClass__set_somClassDataOrder)(SOMClass *somSelf,
		SOMClass_somIdSequence* somClassDataOrder);
typedef SOMClass*   (SOMLINK * somTD_SOMClass__get_somTrueClass)(SOMClass *somSelf);
typedef SOMClass*   (SOMLINK * somTD_SOMClass__get_somCastedClass)(SOMClass *somSelf);
typedef SOMClass_somOffsets   (SOMLINK * somTD_SOMClass__get_somMethodOffsets)(SOMClass *somSelf);
typedef SOMObject*   (SOMLINK * somTD_SOMClass_somNew)(SOMClass *somSelf);
typedef SOMObject*   (SOMLINK * somTD_SOMClass_somNewNoInit)(SOMClass *somSelf);
typedef SOMObject*   (SOMLINK * somTD_SOMClass_somRenew)(SOMClass *somSelf,
		void* obj);
typedef SOMObject*   (SOMLINK * somTD_SOMClass_somRenewNoInit)(SOMClass *somSelf,
		void* obj);
typedef SOMObject*   (SOMLINK * somTD_SOMClass_somRenewNoZero)(SOMClass *somSelf,
		void* obj);
typedef SOMObject*   (SOMLINK * somTD_SOMClass_somRenewNoInitNoZero)(SOMClass *somSelf,
		void* obj);
typedef string   (SOMLINK * somTD_SOMClass_somAllocate)(SOMClass *somSelf,
		long size);
typedef void   (SOMLINK * somTD_SOMClass_somDeallocate)(SOMClass *somSelf,
		string memptr);
typedef somMethodProc*   (SOMLINK * somTD_SOMClass__get_somClassAllocate)(SOMClass *somSelf);
typedef somMethodProc*   (SOMLINK * somTD_SOMClass__get_somClassDeallocate)(SOMClass *somSelf);
typedef somBooleanVector   (SOMLINK * somTD_SOMClass_somGetInstanceInitMask)(SOMClass *somSelf,
		somInitCtrl* ctrl);
typedef somBooleanVector   (SOMLINK * somTD_SOMClass_somGetInstanceDestructionMask)(SOMClass *somSelf,
		somDestructCtrl* ctrl);
typedef somBooleanVector   (SOMLINK * somTD_SOMClass_somGetInstanceAssignmentMask)(SOMClass *somSelf,
		somAssignCtrl* ctrl);
typedef void   (SOMLINK * somTD_SOMClass_somInitClass)(SOMClass *somSelf,
		string className,
		SOMClass* parentClass,
		long dataSize,
		long maxStaticMethods,
		long majorVersion,
		long minorVersion);
typedef void   (SOMLINK * somTD_SOMClass_somInitMIClass)(SOMClass *somSelf,
		long inherit_vars,
		string className,
		SOMClass_SOMClassSequence* parentClasses,
		long dataSize,
		long dataAlignment,
		long maxStaticMethods,
		long majorVersion,
		long minorVersion);
typedef somMToken   (SOMLINK * somTD_SOMClass_somAddStaticMethod)(SOMClass *somSelf,
		somId methodId,
		somId methodDescriptor,
		somMethodPtr method,
		somMethodPtr redispatchStub,
		somMethodPtr applyStub);
typedef void   (SOMLINK * somTD_SOMClass_somAddDynamicMethod)(SOMClass *somSelf,
		somId methodId,
		somId methodDescriptor,
		somMethodPtr method,
		somMethodPtr applyStub);
typedef void   (SOMLINK * somTD_SOMClass_somOverrideSMethod)(SOMClass *somSelf,
		somId methodId,
		somMethodPtr method);
typedef void   (SOMLINK * somTD_SOMClass_somClassReady)(SOMClass *somSelf);
typedef somMToken   (SOMLINK * somTD_SOMClass_somAddMethod)(SOMClass *somSelf,
		unsigned long type,
		somId methodId,
		somId methodDescriptor,
		somMethodPtr method,
		somMethodPtr redispatchStub,
		somMethodPtr applyStub);
typedef void   (SOMLINK * somTD_SOMClass_somRegLPMToken)(SOMClass *somSelf,
		somMToken* tokenPtr);
typedef somMethodPtr   (SOMLINK * somTD_SOMClass_somGetApplyStub)(SOMClass *somSelf,
		somId methodId);
typedef somClassDataStructure*   (SOMLINK * somTD_SOMClass_somGetClassData)(SOMClass *somSelf);
typedef void   (SOMLINK * somTD_SOMClass_somSetClassData)(SOMClass *somSelf,
		somClassDataStructure* cds);
typedef somMethodTab*   (SOMLINK * somTD_SOMClass_somGetClassMtab)(SOMClass *somSelf);
typedef long   (SOMLINK * somTD_SOMClass_somGetInstanceOffset)(SOMClass *somSelf);
typedef long   (SOMLINK * somTD_SOMClass_somGetInstancePartSize)(SOMClass *somSelf);
typedef long   (SOMLINK * somTD_SOMClass_somGetInstanceSize)(SOMClass *somSelf);
typedef somDToken   (SOMLINK * somTD_SOMClass_somGetInstanceToken)(SOMClass *somSelf);
typedef somDToken   (SOMLINK * somTD_SOMClass_somGetMemberToken)(SOMClass *somSelf,
		long memberOffset,
		somDToken instanceToken);
typedef boolean   (SOMLINK * somTD_SOMClass_somGetMethodData)(SOMClass *somSelf,
		somId methodId,
		somMethodData* md);
typedef somMethodProc*   (SOMLINK * somTD_SOMClass_somGetRdStub)(SOMClass *somSelf,
		somId methodId);
typedef somId   (SOMLINK * somTD_SOMClass_somGetMethodDescriptor)(SOMClass *somSelf,
		somId methodId);
typedef long   (SOMLINK * somTD_SOMClass_somGetMethodIndex)(SOMClass *somSelf,
		somId id);
typedef somMToken   (SOMLINK * somTD_SOMClass_somGetMethodToken)(SOMClass *somSelf,
		somId methodId);
typedef string   (SOMLINK * somTD_SOMClass_somGetName)(SOMClass *somSelf);
typedef boolean   (SOMLINK * somTD_SOMClass_somGetNthMethodData)(SOMClass *somSelf,
		long n,
		somMethodData* md);
typedef somId   (SOMLINK * somTD_SOMClass_somGetNthMethodInfo)(SOMClass *somSelf,
		long n,
		somId* descriptor);
typedef long   (SOMLINK * somTD_SOMClass_somGetNumMethods)(SOMClass *somSelf);
typedef long   (SOMLINK * somTD_SOMClass_somGetNumStaticMethods)(SOMClass *somSelf);
typedef SOMClass*   (SOMLINK * somTD_SOMClass_somGetParent)(SOMClass *somSelf);
typedef SOMClass_SOMClassSequence   (SOMLINK * somTD_SOMClass_somGetParents)(SOMClass *somSelf);
typedef somMethodTabs   (SOMLINK * somTD_SOMClass_somGetPClsMtab)(SOMClass *somSelf);
typedef somMethodTabs   (SOMLINK * somTD_SOMClass_somGetPClsMtabs)(SOMClass *somSelf);
typedef void   (SOMLINK * somTD_SOMClass_somGetVersionNumbers)(SOMClass *somSelf,
		long* majorVersion,
		long* minorVersion);
typedef boolean   (SOMLINK * somTD_SOMClass_somSetMethodDescriptor)(SOMClass *somSelf,
		somId methodId,
		somId descriptor);
typedef boolean   (SOMLINK * somTD_SOMClass_somFindMethod)(SOMClass *somSelf,
		somId methodId,
		somMethodPtr* m);
typedef boolean   (SOMLINK * somTD_SOMClass_somFindMethodOk)(SOMClass *somSelf,
		somId methodId,
		somMethodPtr* m);
typedef somMethodPtr   (SOMLINK * somTD_SOMClass_somFindSMethod)(SOMClass *somSelf,
		somId methodId);
typedef somMethodPtr   (SOMLINK * somTD_SOMClass_somFindSMethodOk)(SOMClass *somSelf,
		somId methodId);
typedef somMethodPtr   (SOMLINK * somTD_SOMClass_somLookupMethod)(SOMClass *somSelf,
		somId methodId);
typedef somToken   (SOMLINK * somTD_SOMClass_somGetClassDataEntry)(SOMClass *somSelf,
		somId memberName);
typedef boolean   (SOMLINK * somTD_SOMClass_somSetClassDataEntry)(SOMClass *somSelf,
		somId memberName,
		somToken entry);
typedef long   (SOMLINK * somTD_SOMClass_somGetMethodOffset)(SOMClass *somSelf,
		somId methodId);
typedef boolean   (SOMLINK * somTD_SOMClass_somCheckVersion)(SOMClass *somSelf,
		long majorVersion,
		long minorVersion);
typedef boolean   (SOMLINK * somTD_SOMClass_somDescendedFrom)(SOMClass *somSelf,
		SOMClass* aClassObj);
typedef boolean   (SOMLINK * somTD_SOMClass_somSupportsMethod)(SOMClass *somSelf,
		somId mId);
typedef somMethodPtr   (SOMLINK * somTD_SOMClass_somDefinedMethod)(SOMClass *somSelf,
		somMToken method);
typedef void   (SOMLINK * somTD_SOMClass_somOverrideMtab)(SOMClass *somSelf);
typedef boolean   (SOMLINK * somTD_SOMClass_somCastObjCls)(SOMClass *somSelf,
		SOMClass* cls,
		somToken* obj);
typedef boolean   (SOMLINK * somTD_SOMClass_somResetObjCls)(SOMClass *somSelf,
		somToken* obj);
typedef SOMClass*   (SOMLINK * somTD_SOMClass_somCloneClass)(SOMClass *somSelf,
		string cloneName);
typedef boolean   (SOMLINK * somTD_SOMClass_setUserPCallDispatch)(SOMClass *somSelf,
		somMethodProc* oldFcn,
		somMethodProc* newFcn);
typedef SOMClass*   (SOMLINK * somTD_SOMClass_somClassOfNewClassWithParents)(string newClassName,
		SOMClass_SOMClassSequence* parents,
		SOMClass* explicitMeta);

/*
 * -- Typedefs for Reintroduced Wrapper Methods
 */
typedef void   (SOMLINK * somTD_SOMClass_somDefaultInit)(SOMClass *somSelf,
		somInitCtrl* ctrl);
typedef void   (SOMLINK * somTD_SOMClass_somDestruct)(SOMClass *somSelf,
		octet doFree,
		somDestructCtrl* ctrl);
typedef void   (SOMLINK * somTD_SOMClass_somDefaultCopyInit)(SOMClass *somSelf,
		somInitCtrl* ctrl,
		SOMObject* fromObj);
typedef SOMClass*   (SOMLINK * somTD_SOMClass_somDefaultAssign)(SOMClass *somSelf,
		somAssignCtrl* ctrl,
		SOMObject* fromObj);
typedef void   (SOMLINK * somTD_SOMClass_somDefaultConstCopyInit)(SOMClass *somSelf,
		somInitCtrl* ctrl,
		SOMObject* fromObj);
typedef void   (SOMLINK * somTD_SOMClass_somDefaultVCopyInit)(SOMClass *somSelf,
		somInitCtrl* ctrl,
		SOMObject* fromObj);
typedef void   (SOMLINK * somTD_SOMClass_somDefaultConstVCopyInit)(SOMClass *somSelf,
		somInitCtrl* ctrl,
		SOMObject* fromObj);
typedef SOMClass*   (SOMLINK * somTD_SOMClass_somDefaultConstAssign)(SOMClass *somSelf,
		somAssignCtrl* ctrl,
		SOMObject* fromObj);
typedef SOMClass*   (SOMLINK * somTD_SOMClass_somDefaultVAssign)(SOMClass *somSelf,
		somAssignCtrl* ctrl,
		SOMObject* fromObj);
typedef SOMClass*   (SOMLINK * somTD_SOMClass_somDefaultConstVAssign)(SOMClass *somSelf,
		somAssignCtrl* ctrl,
		SOMObject* fromObj);
typedef void   (SOMLINK * somTD_SOMClass_somInit)(SOMClass *somSelf);
typedef void   (SOMLINK * somTD_SOMClass_somFree)(SOMClass *somSelf);
typedef void   (SOMLINK * somTD_SOMClass_somUninit)(SOMClass *somSelf);
typedef SOMClass*   (SOMLINK * somTD_SOMClass_somGetClass)(SOMClass *somSelf);
typedef string   (SOMLINK * somTD_SOMClass_somGetClassName)(SOMClass *somSelf);
typedef long   (SOMLINK * somTD_SOMClass_somGetSize)(SOMClass *somSelf);
typedef boolean   (SOMLINK * somTD_SOMClass_somIsA)(SOMClass *somSelf,
		SOMClass* aClassObj);
typedef boolean   (SOMLINK * somTD_SOMClass_somIsInstanceOf)(SOMClass *somSelf,
		SOMClass* aClassObj);
typedef boolean   (SOMLINK * somTD_SOMClass_somRespondsTo)(SOMClass *somSelf,
		somId mId);
typedef boolean   (SOMLINK * somTD_SOMClass_somDispatch)(SOMClass *somSelf,
		somToken* retValue,
		somId methodId,
		va_list ap);
typedef boolean   (SOMLINK * somTD_SOMClass_somClassDispatch)(SOMClass *somSelf,
		SOMClass* clsObj,
		somToken* retValue,
		somId methodId,
		va_list ap);
typedef boolean   (SOMLINK * somTD_SOMClass_somCastObj)(SOMClass *somSelf,
		SOMClass* cls);
typedef boolean   (SOMLINK * somTD_SOMClass_somResetObj)(SOMClass *somSelf);
typedef SOMObject_BooleanSequence   (SOMLINK * somTD_SOMClass_somComputeForwardVisitMask)(SOMClass *somSelf,
		somMToken visitMethod,
		SOMObject_SOMObjectSequence* visitOrder,
		SOMObject_somObjectOffsets* visitOffsets);
typedef SOMObject_BooleanSequence   (SOMLINK * somTD_SOMClass_somComputeReverseVisitMask)(SOMClass *somSelf,
		somMToken visitMethod,
		SOMObject_SOMObjectSequence* fwdVisitOrder,
		SOMObject_SOMObjectSequence* visitOrder,
		SOMObject_somObjectOffsets* visitOffsets);
typedef void   (SOMLINK * somTD_SOMClass_somDispatchV)(SOMClass *somSelf,
		somId methodId,
		somId descriptor,
		va_list ap);
typedef long   (SOMLINK * somTD_SOMClass_somDispatchL)(SOMClass *somSelf,
		somId methodId,
		somId descriptor,
		va_list ap);
typedef void*   (SOMLINK * somTD_SOMClass_somDispatchA)(SOMClass *somSelf,
		somId methodId,
		somId descriptor,
		va_list ap);
typedef double   (SOMLINK * somTD_SOMClass_somDispatchD)(SOMClass *somSelf,
		somId methodId,
		somId descriptor,
		va_list ap);
typedef SOMObject*   (SOMLINK * somTD_SOMClass_somPrintSelf)(SOMClass *somSelf);
typedef void   (SOMLINK * somTD_SOMClass_somDumpSelf)(SOMClass *somSelf,
		long level);
typedef void   (SOMLINK * somTD_SOMClass_somDumpSelfInt)(SOMClass *somSelf,
		long level);
}



/*
 * Define class data structures as resolution macros
 */
#define SOMClassClassData (*resolve_SOMClassClassData())
#define SOMClassCClassData (*resolve_SOMClassCClassData())

#endif /* SOMClass_API */
