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

/*
 *  96F8647, 96F8648, 96F8850 (C) Copyright IBM Corp. 1992, 1994
 *  All Rights Reserved
 *  Licensed Materials - Property of IBM
 *   SOMObject: System Object Model root class
 */


#ifndef SOM_SOMObject_h
#define SOM_SOMObject_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_som_somobj
#ifdef SOM_DLL_som
	/* export semantics */
	#if defined(SOM_DEFFILE_som)\
	||(defined(SOM_DEFFILE_BY_DEFAULT)&&!defined(SOM_NODEFFILE_som))\
	|| !defined(SOM_Module_somobj_Source)
	#define SOM_IMPORTEXPORT_som_somobj
	#else
	#define SOM_IMPORTEXPORT_som_somobj SOMDLLEXPORT
	#endif
#else
	#define SOM_IMPORTEXPORT_som_somobj 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 SOMObject
#define SOMObject SOMObject
#endif
/*
 *  This is the SOM root class, all SOM classes must be descended from
 *  <SOMObject>. <SOMObject> has no instance data so there is no
 *  per-instance cost to to being descended from it.
 *  a sequence of SOM Objects
 */

/*
 * Include Parent Bindings
 */

/*
 * Start of bindings for IDL types
 */

#ifndef SOMClass
    #define SOMClass SOMObject
#endif /* SOMClass */
#ifndef _IDL_SEQUENCE_SOMObject_defined
#define _IDL_SEQUENCE_SOMObject_defined
typedef struct {
    unsigned long _maximum;
    unsigned long _length;
    SOMObject *_buffer;
} _IDL_SEQUENCE_SOMObject;
#endif /* _IDL_SEQUENCE_SOMObject_defined */ 
typedef
_IDL_SEQUENCE_SOMObject SOMObject_SOMObjectSequence;
/*
 *  a sequence of booleans.
 */

#ifndef _IDL_SEQUENCE_octet_defined
#define _IDL_SEQUENCE_octet_defined
typedef struct {
    unsigned long _maximum;
    unsigned long _length;
    octet *_buffer;
} _IDL_SEQUENCE_octet;
#endif /* _IDL_SEQUENCE_octet_defined */ 
typedef
_IDL_SEQUENCE_octet SOMObject_BooleanSequence;
/*
 *  a structure to describe an object-related offset, and
 *  a sequence of class-related offsets
 */

typedef
struct SOMObject_somObjectOffset {
SOMObject obj;
long  offset;
} SOMObject_somObjectOffset;
struct SOMObject_somObjectOffset;
#ifndef _IDL_SEQUENCE_SOMObject_somObjectOffset_defined
#define _IDL_SEQUENCE_SOMObject_somObjectOffset_defined
typedef struct {
    unsigned long _maximum;
    unsigned long _length;
    struct SOMObject_somObjectOffset *_buffer;
} _IDL_SEQUENCE_SOMObject_somObjectOffset;
#endif /* _IDL_SEQUENCE_SOMObject_somObjectOffset_defined */ 
typedef
_IDL_SEQUENCE_SOMObject_somObjectOffset SOMObject_somObjectOffsets;

#ifndef SOM_DONT_USE_SHORT_NAMES

#ifndef SOM_DONT_USE_SHORT_NAMES
#ifndef SOMTGD_SOMObjectSequence
    #ifdef SOMObjectSequence
        #undef SOMObjectSequence
        #define SOMTGD_SOMObjectSequence 1
    #else
        #define SOMObjectSequence SOMObject_SOMObjectSequence
    #endif /* SOMObjectSequence */
#endif /* SOMTGD_SOMObjectSequence */
#endif /* SOM_DONT_USE_SHORT_NAMES */

#ifndef SOM_DONT_USE_SHORT_NAMES
#ifndef SOMTGD_BooleanSequence
    #ifdef BooleanSequence
        #undef BooleanSequence
        #define SOMTGD_BooleanSequence 1
    #else
        #define BooleanSequence SOMObject_BooleanSequence
    #endif /* BooleanSequence */
#endif /* SOMTGD_BooleanSequence */
#endif /* SOM_DONT_USE_SHORT_NAMES */
#ifndef SOMTGD_somObjectOffset
    #ifdef somObjectOffset
        #undef somObjectOffset
        #define SOMTGD_somObjectOffset 1
    #else
        #define somObjectOffset SOMObject_somObjectOffset
    #endif /* somObjectOffset */
#endif /* SOMTGD_somObjectOffset */
#ifndef SOMTGD__IDL_SEQUENCE_somObjectOffset
    #ifdef _IDL_SEQUENCE_somObjectOffset
        #undef _IDL_SEQUENCE_somObjectOffset
        #define SOMTGD__IDL_SEQUENCE_somObjectOffset 1
    #else
        #define _IDL_SEQUENCE_somObjectOffset _IDL_SEQUENCE_SOMObject_somObjectOffset
    #endif /* _IDL_SEQUENCE_somObjectOffset */
#endif /* SOMTGD__IDL_SEQUENCE_somObjectOffset */

#ifndef SOM_DONT_USE_SHORT_NAMES
#ifndef SOMTGD_somObjectOffsets
    #ifdef somObjectOffsets
        #undef somObjectOffsets
        #define SOMTGD_somObjectOffsets 1
    #else
        #define somObjectOffsets SOMObject_somObjectOffsets
    #endif /* somObjectOffsets */
#endif /* SOMTGD_somObjectOffsets */
#endif /* SOM_DONT_USE_SHORT_NAMES */
#endif /* SOM_DONT_USE_SHORT_NAMES */

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

#define SOMObject_MajorVersion 1
#define SOMObject_MinorVersion 7

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

/*
 * Declare the ABI 2 ClassData structure
 */
SOMEXTERN struct SOMObjectClassDataStructure {
	SOMClass classObject;
	somMToken somInit;
	somMToken somUninit;
	somMToken somFree;
	somMToken somDefaultVCopyInit;
	somMToken somGetClassName;
	somMToken somGetClass;
	somMToken somIsA;
	somMToken somRespondsTo;
	somMToken somIsInstanceOf;
	somMToken somGetSize;
	somMToken somDumpSelf;
	somMToken somDumpSelfInt;
	somMToken somPrintSelf;
	somMToken somDefaultConstVCopyInit;
	somMToken somoPrivate1;
	somMToken somoPrivate2;
	somMToken somoPrivate3;
	somMToken somoPrivate4;
	somMToken somDispatch;
	somMToken somClassDispatch;
	somMToken somCastObj;
	somMToken somResetObj;
	somMToken somDefaultInit;
	somMToken somDestruct;
	somMToken somoPrivate5;
	somMToken somoPrivate6;
	somMToken somDefaultCopyInit;
	somMToken somDefaultConstCopyInit;
	somMToken somDefaultAssign;
	somMToken somDefaultConstAssign;
	somMToken somDefaultVAssign;
	somMToken somDefaultConstVAssign;
	somMToken somoPrivate7;
	somMToken somoPrivate8;
	somMToken somoPrivate9;
	somMToken somoPrivate10;
	somMToken somoPrivate11;
	somMToken somoPrivate12;
	somMToken somoPrivate13;
	somMToken somoPrivate14;
} SOM_IMPORTEXPORT_som_somobj SOMDLINK SOMObjectClassData;

/*
 * Declare the ABI 2 CClassData structure
 */
SOMEXTERN struct SOMObjectCClassDataStructure {
	somMethodTabs parentMtab;
	somDToken instanceDataToken;
	somMethodProc *somDispatch;
	somMethodProc *somClassDispatch;
} SOM_IMPORTEXPORT_som_somobj SOMDLINK SOMObjectCClassData;

/*
 * Class Object and Method Token Macros
 */
#define _SOMCLASS_SOMObject (SOMObjectClassData.classObject)
#ifndef SOMGD_SOMObject
    #if (defined(_SOMObject) || defined(__SOMObject))
        #undef _SOMObject
        #undef __SOMObject
        #define SOMGD_SOMObject 1
    #else
        #define _SOMObject _SOMCLASS_SOMObject
    #endif /* _SOMObject */
#endif /* SOMGD_SOMObject */
#define SOMObject_classObj _SOMCLASS_SOMObject
#define _SOMMTOKEN_SOMObject(method) ((somMToken)SOMObjectClassData.method)

/*
 * New and Renew macros for SOMObject
 */
#define SOMObjectNew() \
   ( _SOMObject ? \
	_somNew(_SOMObject) \
	: ( SOMObjectNewClass(\
		SOMObject_MajorVersion, \
		SOMObject_MinorVersion),\
	   _somNew(_SOMObject)))
#define SOMObjectRenew(buf) \
   ( _SOMObject ? \
	_somRenew(_SOMObject, buf) \
	: ( SOMObjectNewClass(\
		SOMObject_MajorVersion, \
		SOMObject_MinorVersion),\
	   _somRenew(_SOMObject, buf)))

/*
 * New Method: somDefaultInit
 */
typedef void   SOMLINK somTP_SOMObject_somDefaultInit(SOMObject somSelf, 
		som3InitCtrl* ctrl);
typedef somTP_SOMObject_somDefaultInit *somTD_SOMObject_somDefaultInit;
/*
 *  A default initializer for a SOM object. Passing a null ctrl
 *  indicates to the receiver that its class is the class of the
 *  object being initialized, whereby the initializer will determine
 *  an appropriate control structure.
 */
#define somMD_SOMObject_somDefaultInit "::SOMObject::somDefaultInit"
#define SOMObject_somDefaultInit(somSelf,ctrl) \
    (SOM_Resolve(somSelf, SOMObject, somDefaultInit) \
	(somSelf,ctrl))
#ifndef SOMGD_somDefaultInit
    #if (defined(_somDefaultInit) || defined(__somDefaultInit))
        #undef _somDefaultInit
        #undef __somDefaultInit
        #define SOMGD_somDefaultInit 1
    #else
        #define _somDefaultInit SOMObject_somDefaultInit
    #endif /* _somDefaultInit */
#endif /* SOMGD_somDefaultInit */

/*
 * New Method: somDestruct
 */
typedef void   SOMLINK somTP_SOMObject_somDestruct(SOMObject somSelf, 
		octet doFree, 
		som3DestructCtrl* ctrl);
typedef somTP_SOMObject_somDestruct *somTD_SOMObject_somDestruct;
/*
 *  The default destructor for a SOM object. A nonzero <doFree>
 *  indicates that the object storage should be freed by the
 *  object's class (via somDeallocate) after uninitialization.
 *  As with somDefaultInit, a null ctrl can be passed.
 */
#define somMD_SOMObject_somDestruct "::SOMObject::somDestruct"
#define SOMObject_somDestruct(somSelf,doFree,ctrl) \
    (SOM_Resolve(somSelf, SOMObject, somDestruct) \
	(somSelf,doFree,ctrl))
#ifndef SOMGD_somDestruct
    #if (defined(_somDestruct) || defined(__somDestruct))
        #undef _somDestruct
        #undef __somDestruct
        #define SOMGD_somDestruct 1
    #else
        #define _somDestruct SOMObject_somDestruct
    #endif /* _somDestruct */
#endif /* SOMGD_somDestruct */

/*
 * New Method: somDefaultCopyInit
 */
typedef void   SOMLINK somTP_SOMObject_somDefaultCopyInit(SOMObject somSelf, 
		som3InitCtrl* ctrl, 
		SOMObject fromObj);
typedef somTP_SOMObject_somDefaultCopyInit *somTD_SOMObject_somDefaultCopyInit;
/*
 *  A default copy constructor. Use this to make copies of objects for
 *  calling methods with "by-value" argument semantics.
 */
#define somMD_SOMObject_somDefaultCopyInit "::SOMObject::somDefaultCopyInit"
#define SOMObject_somDefaultCopyInit(somSelf,ctrl,fromObj) \
    (SOM_Resolve(somSelf, SOMObject, somDefaultCopyInit) \
	(somSelf,ctrl,fromObj))
#ifndef SOMGD_somDefaultCopyInit
    #if (defined(_somDefaultCopyInit) || defined(__somDefaultCopyInit))
        #undef _somDefaultCopyInit
        #undef __somDefaultCopyInit
        #define SOMGD_somDefaultCopyInit 1
    #else
        #define _somDefaultCopyInit SOMObject_somDefaultCopyInit
    #endif /* _somDefaultCopyInit */
#endif /* SOMGD_somDefaultCopyInit */

/*
 * New Method: somDefaultAssign
 */
typedef SOMObject   SOMLINK somTP_SOMObject_somDefaultAssign(SOMObject somSelf, 
		som3AssignCtrl* ctrl, 
		SOMObject fromObj);
typedef somTP_SOMObject_somDefaultAssign *somTD_SOMObject_somDefaultAssign;
/*
 *  A default assignment operator. Use this to "assign" the state of one
 *  object to another.
 */
#define somMD_SOMObject_somDefaultAssign "::SOMObject::somDefaultAssign"
#define SOMObject_somDefaultAssign(somSelf,ctrl,fromObj) \
    (SOM_Resolve(somSelf, SOMObject, somDefaultAssign) \
	(somSelf,ctrl,fromObj))
#ifndef SOMGD_somDefaultAssign
    #if (defined(_somDefaultAssign) || defined(__somDefaultAssign))
        #undef _somDefaultAssign
        #undef __somDefaultAssign
        #define SOMGD_somDefaultAssign 1
    #else
        #define _somDefaultAssign SOMObject_somDefaultAssign
    #endif /* _somDefaultAssign */
#endif /* SOMGD_somDefaultAssign */

/*
 * New Method: somDefaultConstCopyInit
 */
typedef void   SOMLINK somTP_SOMObject_somDefaultConstCopyInit(SOMObject somSelf, 
		som3InitCtrl* ctrl, 
		SOMObject fromObj);
typedef somTP_SOMObject_somDefaultConstCopyInit *somTD_SOMObject_somDefaultConstCopyInit;
/*
 *  A default copy constructor that uses a const fromObj.
 */
#define somMD_SOMObject_somDefaultConstCopyInit "::SOMObject::somDefaultConstCopyInit"
#define SOMObject_somDefaultConstCopyInit(somSelf,ctrl,fromObj) \
    (SOM_Resolve(somSelf, SOMObject, somDefaultConstCopyInit) \
	(somSelf,ctrl,fromObj))
#ifndef SOMGD_somDefaultConstCopyInit
    #if (defined(_somDefaultConstCopyInit) || defined(__somDefaultConstCopyInit))
        #undef _somDefaultConstCopyInit
        #undef __somDefaultConstCopyInit
        #define SOMGD_somDefaultConstCopyInit 1
    #else
        #define _somDefaultConstCopyInit SOMObject_somDefaultConstCopyInit
    #endif /* _somDefaultConstCopyInit */
#endif /* SOMGD_somDefaultConstCopyInit */

/*
 * New Method: somDefaultVCopyInit
 */
typedef void   SOMLINK somTP_SOMObject_somDefaultVCopyInit(SOMObject somSelf, 
		som3InitCtrl* ctrl, 
		SOMObject fromObj);
typedef somTP_SOMObject_somDefaultVCopyInit *somTD_SOMObject_somDefaultVCopyInit;
/*
 *  A default copy constructor that uses a volatile fromObj.
 */
#define somMD_SOMObject_somDefaultVCopyInit "::SOMObject::somDefaultVCopyInit"
#define SOMObject_somDefaultVCopyInit(somSelf,ctrl,fromObj) \
    (SOM_Resolve(somSelf, SOMObject, somDefaultVCopyInit) \
	(somSelf,ctrl,fromObj))
#ifndef SOMGD_somDefaultVCopyInit
    #if (defined(_somDefaultVCopyInit) || defined(__somDefaultVCopyInit))
        #undef _somDefaultVCopyInit
        #undef __somDefaultVCopyInit
        #define SOMGD_somDefaultVCopyInit 1
    #else
        #define _somDefaultVCopyInit SOMObject_somDefaultVCopyInit
    #endif /* _somDefaultVCopyInit */
#endif /* SOMGD_somDefaultVCopyInit */

/*
 * New Method: somDefaultConstVCopyInit
 */
typedef void   SOMLINK somTP_SOMObject_somDefaultConstVCopyInit(SOMObject somSelf, 
		som3InitCtrl* ctrl, 
		SOMObject fromObj);
typedef somTP_SOMObject_somDefaultConstVCopyInit *somTD_SOMObject_somDefaultConstVCopyInit;
/*
 *  A default copy constructor that uses a const volatile fromObj.
 */
#define somMD_SOMObject_somDefaultConstVCopyInit "::SOMObject::somDefaultConstVCopyInit"
#define SOMObject_somDefaultConstVCopyInit(somSelf,ctrl,fromObj) \
    (SOM_Resolve(somSelf, SOMObject, somDefaultConstVCopyInit) \
	(somSelf,ctrl,fromObj))
#ifndef SOMGD_somDefaultConstVCopyInit
    #if (defined(_somDefaultConstVCopyInit) || defined(__somDefaultConstVCopyInit))
        #undef _somDefaultConstVCopyInit
        #undef __somDefaultConstVCopyInit
        #define SOMGD_somDefaultConstVCopyInit 1
    #else
        #define _somDefaultConstVCopyInit SOMObject_somDefaultConstVCopyInit
    #endif /* _somDefaultConstVCopyInit */
#endif /* SOMGD_somDefaultConstVCopyInit */

/*
 * New Method: somDefaultConstAssign
 */
typedef SOMObject   SOMLINK somTP_SOMObject_somDefaultConstAssign(SOMObject somSelf, 
		som3AssignCtrl* ctrl, 
		SOMObject fromObj);
typedef somTP_SOMObject_somDefaultConstAssign *somTD_SOMObject_somDefaultConstAssign;
/*
 *  A default assignment operator that uses a const fromObj.
 */
#define somMD_SOMObject_somDefaultConstAssign "::SOMObject::somDefaultConstAssign"
#define SOMObject_somDefaultConstAssign(somSelf,ctrl,fromObj) \
    (SOM_Resolve(somSelf, SOMObject, somDefaultConstAssign) \
	(somSelf,ctrl,fromObj))
#ifndef SOMGD_somDefaultConstAssign
    #if (defined(_somDefaultConstAssign) || defined(__somDefaultConstAssign))
        #undef _somDefaultConstAssign
        #undef __somDefaultConstAssign
        #define SOMGD_somDefaultConstAssign 1
    #else
        #define _somDefaultConstAssign SOMObject_somDefaultConstAssign
    #endif /* _somDefaultConstAssign */
#endif /* SOMGD_somDefaultConstAssign */

/*
 * New Method: somDefaultVAssign
 */
typedef SOMObject   SOMLINK somTP_SOMObject_somDefaultVAssign(SOMObject somSelf, 
		som3AssignCtrl* ctrl, 
		SOMObject fromObj);
typedef somTP_SOMObject_somDefaultVAssign *somTD_SOMObject_somDefaultVAssign;
/*
 *  A default assignment operator that uses a volatile fromObj.
 */
#define somMD_SOMObject_somDefaultVAssign "::SOMObject::somDefaultVAssign"
#define SOMObject_somDefaultVAssign(somSelf,ctrl,fromObj) \
    (SOM_Resolve(somSelf, SOMObject, somDefaultVAssign) \
	(somSelf,ctrl,fromObj))
#ifndef SOMGD_somDefaultVAssign
    #if (defined(_somDefaultVAssign) || defined(__somDefaultVAssign))
        #undef _somDefaultVAssign
        #undef __somDefaultVAssign
        #define SOMGD_somDefaultVAssign 1
    #else
        #define _somDefaultVAssign SOMObject_somDefaultVAssign
    #endif /* _somDefaultVAssign */
#endif /* SOMGD_somDefaultVAssign */

/*
 * New Method: somDefaultConstVAssign
 */
typedef SOMObject   SOMLINK somTP_SOMObject_somDefaultConstVAssign(SOMObject somSelf, 
		som3AssignCtrl* ctrl, 
		SOMObject fromObj);
typedef somTP_SOMObject_somDefaultConstVAssign *somTD_SOMObject_somDefaultConstVAssign;
/*
 *  A default assignment operator that uses a const volatile fromObj.
 */
#define somMD_SOMObject_somDefaultConstVAssign "::SOMObject::somDefaultConstVAssign"
#define SOMObject_somDefaultConstVAssign(somSelf,ctrl,fromObj) \
    (SOM_Resolve(somSelf, SOMObject, somDefaultConstVAssign) \
	(somSelf,ctrl,fromObj))
#ifndef SOMGD_somDefaultConstVAssign
    #if (defined(_somDefaultConstVAssign) || defined(__somDefaultConstVAssign))
        #undef _somDefaultConstVAssign
        #undef __somDefaultConstVAssign
        #define SOMGD_somDefaultConstVAssign 1
    #else
        #define _somDefaultConstVAssign SOMObject_somDefaultConstVAssign
    #endif /* _somDefaultConstVAssign */
#endif /* SOMGD_somDefaultConstVAssign */

/*
 * New Method: somInit
 */
typedef void   SOMLINK somTP_SOMObject_somInit(SOMObject somSelf);
typedef somTP_SOMObject_somInit *somTD_SOMObject_somInit;
/*
 *  Obsolete but still supported. Override somDefaultInit instead of somInit.
 */
#define somMD_SOMObject_somInit "::SOMObject::somInit"
#define SOMObject_somInit(somSelf) \
    (SOM_Resolve(somSelf, SOMObject, somInit) \
	(somSelf))
#ifndef SOMGD_somInit
    #if (defined(_somInit) || defined(__somInit))
        #undef _somInit
        #undef __somInit
        #define SOMGD_somInit 1
    #else
        #define _somInit SOMObject_somInit
    #endif /* _somInit */
#endif /* SOMGD_somInit */

/*
 * New Method: somUninit
 */
typedef void   SOMLINK somTP_SOMObject_somUninit(SOMObject somSelf);
typedef somTP_SOMObject_somUninit *somTD_SOMObject_somUninit;
/*
 *  Obsolete but still supported. Override somDestruct instead of somUninit.
 */
#define somMD_SOMObject_somUninit "::SOMObject::somUninit"
#define SOMObject_somUninit(somSelf) \
    (SOM_Resolve(somSelf, SOMObject, somUninit) \
	(somSelf))
#ifndef SOMGD_somUninit
    #if (defined(_somUninit) || defined(__somUninit))
        #undef _somUninit
        #undef __somUninit
        #define SOMGD_somUninit 1
    #else
        #define _somUninit SOMObject_somUninit
    #endif /* _somUninit */
#endif /* SOMGD_somUninit */

/*
 * New Method: somFree
 */
typedef void   SOMLINK somTP_SOMObject_somFree(SOMObject somSelf);
typedef somTP_SOMObject_somFree *somTD_SOMObject_somFree;
/*
 *  The default implementation just calls somDestruct.
 */
#define somMD_SOMObject_somFree "::SOMObject::somFree"
#define SOMObject_somFree(somSelf) \
    (SOM_Resolve(somSelf, SOMObject, somFree) \
	(somSelf))
#ifndef SOMGD_somFree
    #if (defined(_somFree) || defined(__somFree))
        #undef _somFree
        #undef __somFree
        #define SOMGD_somFree 1
    #else
        #define _somFree SOMObject_somFree
    #endif /* _somFree */
#endif /* SOMGD_somFree */

/*
 * New Method: somGetClass
 */
typedef SOMClass   SOMLINK somTP_SOMObject_somGetClass(SOMObject somSelf);
typedef somTP_SOMObject_somGetClass *somTD_SOMObject_somGetClass;
/*
 *  Return the receiver's class.
 */
#define somMD_SOMObject_somGetClass "::SOMObject::somGetClass"
#define SOMObject_somGetClass(somSelf) \
    (SOM_Resolve(somSelf, SOMObject, somGetClass) \
	(somSelf))
#ifndef SOMGD_somGetClass
    #if (defined(_somGetClass) || defined(__somGetClass))
        #undef _somGetClass
        #undef __somGetClass
        #define SOMGD_somGetClass 1
    #else
        #define _somGetClass SOMObject_somGetClass
    #endif /* _somGetClass */
#endif /* SOMGD_somGetClass */

/*
 * New Method: somGetClassName
 */
typedef string   SOMLINK somTP_SOMObject_somGetClassName(SOMObject somSelf);
typedef somTP_SOMObject_somGetClassName *somTD_SOMObject_somGetClassName;
/*
 *  Return the name of the receiver's class.
 */
#define somMD_SOMObject_somGetClassName "::SOMObject::somGetClassName"
#define SOMObject_somGetClassName(somSelf) \
    (SOM_Resolve(somSelf, SOMObject, somGetClassName) \
	(somSelf))
#ifndef SOMGD_somGetClassName
    #if (defined(_somGetClassName) || defined(__somGetClassName))
        #undef _somGetClassName
        #undef __somGetClassName
        #define SOMGD_somGetClassName 1
    #else
        #define _somGetClassName SOMObject_somGetClassName
    #endif /* _somGetClassName */
#endif /* SOMGD_somGetClassName */

/*
 * New Method: somGetSize
 */
typedef long   SOMLINK somTP_SOMObject_somGetSize(SOMObject somSelf);
typedef somTP_SOMObject_somGetSize *somTD_SOMObject_somGetSize;
/*
 *  Return the size of the receiver.
 */
#define somMD_SOMObject_somGetSize "::SOMObject::somGetSize"
#define SOMObject_somGetSize(somSelf) \
    (SOM_Resolve(somSelf, SOMObject, somGetSize) \
	(somSelf))
#ifndef SOMGD_somGetSize
    #if (defined(_somGetSize) || defined(__somGetSize))
        #undef _somGetSize
        #undef __somGetSize
        #define SOMGD_somGetSize 1
    #else
        #define _somGetSize SOMObject_somGetSize
    #endif /* _somGetSize */
#endif /* SOMGD_somGetSize */

/*
 * New Method: somIsA
 */
typedef boolean   SOMLINK somTP_SOMObject_somIsA(SOMObject somSelf, 
		SOMClass aClassObj);
typedef somTP_SOMObject_somIsA *somTD_SOMObject_somIsA;
/*
 *  Returns 1 (true) if the receiver responds to methods
 *  introduced by <aClassObj>, and 0 (false) otherwise.
 */
#define somMD_SOMObject_somIsA "::SOMObject::somIsA"
#define SOMObject_somIsA(somSelf,aClassObj) \
    (SOM_Resolve(somSelf, SOMObject, somIsA) \
	(somSelf,aClassObj))
#ifndef SOMGD_somIsA
    #if (defined(_somIsA) || defined(__somIsA))
        #undef _somIsA
        #undef __somIsA
        #define SOMGD_somIsA 1
    #else
        #define _somIsA SOMObject_somIsA
    #endif /* _somIsA */
#endif /* SOMGD_somIsA */

/*
 * New Method: somIsInstanceOf
 */
typedef boolean   SOMLINK somTP_SOMObject_somIsInstanceOf(SOMObject somSelf, 
		SOMClass aClassObj);
typedef somTP_SOMObject_somIsInstanceOf *somTD_SOMObject_somIsInstanceOf;
/*
 *  Returns 1 (true) if the receiver is an instance of
 *  <aClassObj> and 0 (false) otherwise.
 */
#define somMD_SOMObject_somIsInstanceOf "::SOMObject::somIsInstanceOf"
#define SOMObject_somIsInstanceOf(somSelf,aClassObj) \
    (SOM_Resolve(somSelf, SOMObject, somIsInstanceOf) \
	(somSelf,aClassObj))
#ifndef SOMGD_somIsInstanceOf
    #if (defined(_somIsInstanceOf) || defined(__somIsInstanceOf))
        #undef _somIsInstanceOf
        #undef __somIsInstanceOf
        #define SOMGD_somIsInstanceOf 1
    #else
        #define _somIsInstanceOf SOMObject_somIsInstanceOf
    #endif /* _somIsInstanceOf */
#endif /* SOMGD_somIsInstanceOf */

/*
 * New Method: somRespondsTo
 */
typedef boolean   SOMLINK somTP_SOMObject_somRespondsTo(SOMObject somSelf, 
		somId mId);
typedef somTP_SOMObject_somRespondsTo *somTD_SOMObject_somRespondsTo;
/*
 *  Returns 1 (true) if the indicated method can be invoked
 *  on the receiver and 0 (false) otherwise.
 */
#define somMD_SOMObject_somRespondsTo "::SOMObject::somRespondsTo"
#define SOMObject_somRespondsTo(somSelf,mId) \
    (SOM_Resolve(somSelf, SOMObject, somRespondsTo) \
	(somSelf,mId))
#ifndef SOMGD_somRespondsTo
    #if (defined(_somRespondsTo) || defined(__somRespondsTo))
        #undef _somRespondsTo
        #undef __somRespondsTo
        #define SOMGD_somRespondsTo 1
    #else
        #define _somRespondsTo SOMObject_somRespondsTo
    #endif /* _somRespondsTo */
#endif /* SOMGD_somRespondsTo */

/*
 * New Method: somDispatch
 */
typedef boolean   SOMLINK somTP_SOMObject_somDispatch(SOMObject somSelf, 
		somToken* retValue, 
		somId methodId, 
		va_list ap);
typedef somTP_SOMObject_somDispatch *somTD_SOMObject_somDispatch;
/*
 *  This method provides a generic, class-specific dispatch mechanism.
 *  It accepts as input <retValue> a pointer to the memory area to be
 *  loaded with the result of dispatching the method indicated by
 *  <methodId> using the arguments in <ap>. <ap> contains the object
 *  on which the method is to be invoked as the first argument.
 * 
 *  Default redispatch stubs invoke this method.
 */
#define somMD_SOMObject_somDispatch "::SOMObject::somDispatch"
#define SOMObject_somDispatch(somSelf,retValue,methodId,ap) \
    (SOM_Resolve(somSelf, SOMObject, somDispatch) \
	(somSelf,retValue,methodId,ap))

/*
 * legacy support for non-system-linkage vararg stub
 * use -mnolegacy to avoid generating this stub.
 */
#ifdef SOMObject_VA_EXTERN
    SOMEXTERN
#else
    static
#endif
boolean   va_SOMObject_somDispatch(SOMObject somSelf,
		somToken* retValue,
		somId methodId,
		...)
#if (defined(SOMObject_VA_STUBS)||!defined(SOMObject_VA_EXTERN))
{
    boolean result;
    va_list ap;
    va_start(ap, methodId);
    result = SOMObject_somDispatch(somSelf,retValue,methodId,ap);
    va_end(ap);
    return (result);
}    
#else
    ;
#endif

/*
 * normal vararg stubs
 */
#ifndef SOMGD_va_somDispatch
   #ifdef va_somDispatch
      #undef va_somDispatch
      #define SOMGD_va_somDispatch 1
   #else
      #define va_somDispatch somva_SOMObject_somDispatch
   #endif /* va_somDispatch */
#endif /* SOMGD_va_somDispatch */
#ifndef SOMGD_somDispatch
    #if (defined(_somDispatch) || defined(__somDispatch))
        #undef _somDispatch
        #undef __somDispatch
        #define SOMGD_somDispatch 1
    #else
        #define _somDispatch somva_SOMObject_somDispatch
    #endif /* _somDispatch */
#endif /* SOMGD_somDispatch */
#ifdef SOMObject_VA_EXTERN
    SOMEXTERN
#else
    static
#endif
boolean  SOMLINK somva_SOMObject_somDispatch(SOMObject somSelf,
		somToken* retValue,
		somId methodId,
		...)
#if (defined(SOMObject_VA_STUBS)||!defined(SOMObject_VA_EXTERN))
{
    boolean result;
    va_list ap;
    va_start(ap, methodId);
    result = SOMObject_somDispatch(somSelf,retValue,methodId,ap);
    va_end(ap);
    return (result);
}    
#else
    ;
#endif

/*
 * New Method: somClassDispatch
 */
typedef boolean   SOMLINK somTP_SOMObject_somClassDispatch(SOMObject somSelf, 
		SOMClass clsObj, 
		somToken* retValue, 
		somId methodId, 
		va_list ap);
typedef somTP_SOMObject_somClassDispatch *somTD_SOMObject_somClassDispatch;
/*
 *  Like somDispatch, but method resolution for static methods is done
 *  according to the clsObj instance method table.
 */
#define somMD_SOMObject_somClassDispatch "::SOMObject::somClassDispatch"
#define SOMObject_somClassDispatch(somSelf,clsObj,retValue,methodId,ap) \
    (SOM_Resolve(somSelf, SOMObject, somClassDispatch) \
	(somSelf,clsObj,retValue,methodId,ap))

/*
 * legacy support for non-system-linkage vararg stub
 * use -mnolegacy to avoid generating this stub.
 */
#ifdef SOMObject_VA_EXTERN
    SOMEXTERN
#else
    static
#endif
boolean   va_SOMObject_somClassDispatch(SOMObject somSelf,
		SOMClass clsObj,
		somToken* retValue,
		somId methodId,
		...)
#if (defined(SOMObject_VA_STUBS)||!defined(SOMObject_VA_EXTERN))
{
    boolean result;
    va_list ap;
    va_start(ap, methodId);
    result = SOMObject_somClassDispatch(somSelf,clsObj,retValue,methodId,ap);
    va_end(ap);
    return (result);
}    
#else
    ;
#endif

/*
 * normal vararg stubs
 */
#ifndef SOMGD_va_somClassDispatch
   #ifdef va_somClassDispatch
      #undef va_somClassDispatch
      #define SOMGD_va_somClassDispatch 1
   #else
      #define va_somClassDispatch somva_SOMObject_somClassDispatch
   #endif /* va_somClassDispatch */
#endif /* SOMGD_va_somClassDispatch */
#ifndef SOMGD_somClassDispatch
    #if (defined(_somClassDispatch) || defined(__somClassDispatch))
        #undef _somClassDispatch
        #undef __somClassDispatch
        #define SOMGD_somClassDispatch 1
    #else
        #define _somClassDispatch somva_SOMObject_somClassDispatch
    #endif /* _somClassDispatch */
#endif /* SOMGD_somClassDispatch */
#ifdef SOMObject_VA_EXTERN
    SOMEXTERN
#else
    static
#endif
boolean  SOMLINK somva_SOMObject_somClassDispatch(SOMObject somSelf,
		SOMClass clsObj,
		somToken* retValue,
		somId methodId,
		...)
#if (defined(SOMObject_VA_STUBS)||!defined(SOMObject_VA_EXTERN))
{
    boolean result;
    va_list ap;
    va_start(ap, methodId);
    result = SOMObject_somClassDispatch(somSelf,clsObj,retValue,methodId,ap);
    va_end(ap);
    return (result);
}    
#else
    ;
#endif

/*
 * New Method: somCastObj
 */
typedef boolean   SOMLINK somTP_SOMObject_somCastObj(SOMObject somSelf, 
		SOMClass castedCls);
typedef somTP_SOMObject_somCastObj *somTD_SOMObject_somCastObj;
/*
 *  Changes the behavior of the target object to that implemented
 *  by castedCls. This is possible when all concrete data in castedCls
 *  is also concrete in the true class of the target object.
 *  Returns true (1) on success, and false (0) otherwise.
 */
#define somMD_SOMObject_somCastObj "::SOMObject::somCastObj"
#define SOMObject_somCastObj(somSelf,castedCls) \
    (SOM_Resolve(somSelf, SOMObject, somCastObj) \
	(somSelf,castedCls))
#ifndef SOMGD_somCastObj
    #if (defined(_somCastObj) || defined(__somCastObj))
        #undef _somCastObj
        #undef __somCastObj
        #define SOMGD_somCastObj 1
    #else
        #define _somCastObj SOMObject_somCastObj
    #endif /* _somCastObj */
#endif /* SOMGD_somCastObj */

/*
 * New Method: somResetObj
 */
typedef boolean   SOMLINK somTP_SOMObject_somResetObj(SOMObject somSelf);
typedef somTP_SOMObject_somResetObj *somTD_SOMObject_somResetObj;
/*
 *  reset an object to its true class. Returns true always.
 */
#define somMD_SOMObject_somResetObj "::SOMObject::somResetObj"
#define SOMObject_somResetObj(somSelf) \
    (SOM_Resolve(somSelf, SOMObject, somResetObj) \
	(somSelf))
#ifndef SOMGD_somResetObj
    #if (defined(_somResetObj) || defined(__somResetObj))
        #undef _somResetObj
        #undef __somResetObj
        #define SOMGD_somResetObj 1
    #else
        #define _somResetObj SOMObject_somResetObj
    #endif /* _somResetObj */
#endif /* SOMGD_somResetObj */

/*
 * New Method: somPrintSelf
 */
typedef SOMObject   SOMLINK somTP_SOMObject_somPrintSelf(SOMObject somSelf);
typedef somTP_SOMObject_somPrintSelf *somTD_SOMObject_somPrintSelf;
/*
 *  Uses <SOMOutCharRoutine> to write a brief string with identifying
 *  information about this object.  The default implementation just gives
 *  the object's class name and its address in memory.
 *  <self> is returned.
 */
#define somMD_SOMObject_somPrintSelf "::SOMObject::somPrintSelf"
#define SOMObject_somPrintSelf(somSelf) \
    (SOM_Resolve(somSelf, SOMObject, somPrintSelf) \
	(somSelf))
#ifndef SOMGD_somPrintSelf
    #if (defined(_somPrintSelf) || defined(__somPrintSelf))
        #undef _somPrintSelf
        #undef __somPrintSelf
        #define SOMGD_somPrintSelf 1
    #else
        #define _somPrintSelf SOMObject_somPrintSelf
    #endif /* _somPrintSelf */
#endif /* SOMGD_somPrintSelf */

/*
 * New Method: somDumpSelf
 */
typedef void   SOMLINK somTP_SOMObject_somDumpSelf(SOMObject somSelf, 
		long level);
typedef somTP_SOMObject_somDumpSelf *somTD_SOMObject_somDumpSelf;
/*
 *  Uses <SOMOutCharRoutine> to write a detailed description of this object
 *  and its current state.
 * 
 *  <level> indicates the nesting level for describing compound objects
 *  it must be greater than or equal to zero.  All lines in the
 *  description will be preceeded by <2*level> spaces.
 * 
 *  This routine only actually writes the data that concerns the object
 *  as a whole, such as class, and uses <somDumpSelfInt> to describe
 *  the object's current state.  This approach allows readable
 *  descriptions of compound objects to be constructed.
 * 
 *  Generally it is not necessary to override this method, if it is
 *  overriden it generally must be completely replaced.
 */
#define somMD_SOMObject_somDumpSelf "::SOMObject::somDumpSelf"
#define SOMObject_somDumpSelf(somSelf,level) \
    (SOM_Resolve(somSelf, SOMObject, somDumpSelf) \
	(somSelf,level))
#ifndef SOMGD_somDumpSelf
    #if (defined(_somDumpSelf) || defined(__somDumpSelf))
        #undef _somDumpSelf
        #undef __somDumpSelf
        #define SOMGD_somDumpSelf 1
    #else
        #define _somDumpSelf SOMObject_somDumpSelf
    #endif /* _somDumpSelf */
#endif /* SOMGD_somDumpSelf */

/*
 * New Method: somDumpSelfInt
 */
typedef void   SOMLINK somTP_SOMObject_somDumpSelfInt(SOMObject somSelf, 
		long level);
typedef somTP_SOMObject_somDumpSelfInt *somTD_SOMObject_somDumpSelfInt;
/*
 *  Uses <SOMOutCharRoutine> to write in the current state of this object.
 *  Generally this method will need to be overridden.  When overriding
 *  it, begin by calling the parent class form of this method and then
 *  write in a description of your class's instance data. This will
 *  result in a description of all the object's instance data going
 *  from its root ancestor class to its specific class.
 */
#define somMD_SOMObject_somDumpSelfInt "::SOMObject::somDumpSelfInt"
#define SOMObject_somDumpSelfInt(somSelf,level) \
    (SOM_Resolve(somSelf, SOMObject, somDumpSelfInt) \
	(somSelf,level))
#ifndef SOMGD_somDumpSelfInt
    #if (defined(_somDumpSelfInt) || defined(__somDumpSelfInt))
        #undef _somDumpSelfInt
        #undef __somDumpSelfInt
        #define SOMGD_somDumpSelfInt 1
    #else
        #define _somDumpSelfInt SOMObject_somDumpSelfInt
    #endif /* _somDumpSelfInt */
#endif /* SOMGD_somDumpSelfInt */

/*
 * Full Names for Inherited Methods
 */

#ifndef SOM_DONT_USE_INHERITED_MACROS
#endif /* SOM_DONT_USE_INHERITED_MACROS */

#endif       /* SOM_SOMObject_h */
