/* Copyright (c) 1992 Colin Jensen.  All Rights Reserved. */


/*
 * This file was generated by the SOM Compiler.
 * FileName: somcm.h.
 * Generated using:
 *     SOM Precompiler spc: 1.22
 *     SOM Emitter emith: 1.11
 */

/*
 *  SOMClassMgr: System Object Model class manager
 *  Copyright (c) International Business Machines Corporation
 *                1991, 1992
 */


#ifndef somcm_h
#define somcm_h


#include <som.h>

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

#define SOMClassMgr_MajorVersion 1
#define SOMClassMgr_MinorVersion 1

/*
 * External name shortening if required
 */
#ifdef SOM_USE_SHORT_EXTERNAL_NAMES
#define SOMClassMgrNewClass somcmc
#pragma linkage(somcmc, system)
#define SOMClassMgrClassData somcmd
#define SOMClassMgrCClassData somcmx
#endif /* SOM_USE_SHORT_EXTERNAL_NAMES */
/*--------------Migration------------*/
#define SOMClassMgr_classObj SOMClassMgrClassData.classObject
#define _SOMClassMgr SOMClassMgr_classObj

/*
 * New and Renew macros for SOMClassMgr
 */
#define _SOMClassMgrNew() (_somNew(SOMClassMgrClassData.classObject))
#define SOMClassMgrNew() \
	( SOMClassMgrClassData.classObject \
		? _SOMClassMgrNew() \
		: ( SOMClassMgrNewClass(SOMClassMgr_MajorVersion, SOMClassMgr_MinorVersion), _SOMClassMgrNew() ) )
#define SOMClassMgrRenew(buf) \
	( _somRenew(SOMClassMgrClassData.classObject, buf) )

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

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

/*
 * Override method: somDumpSelfInt
 */
#define SOMClassMgr_somDumpSelfInt(somSelf,level) \
	SOMObject_somDumpSelfInt(somSelf,level)

/*
 * New Method: somLoadClassFile
 */
typedef SOMClass *   SOMLINK somTP_SOMClassMgr_somLoadClassFile(SOMClassMgr *somSelf,
		INOUT somId classId,
		IN integer4 majorVersion,
		IN integer4 minorVersion,
		IN zString file);
#pragma linkage(somTP_SOMClassMgr_somLoadClassFile, system)
typedef somTP_SOMClassMgr_somLoadClassFile *somTD_SOMClassMgr_somLoadClassFile;
#define somMD_SOMClassMgr_somLoadClassFile "----"
#define SOMClassMgr_somLoadClassFile(somSelf,classId,majorVersion,minorVersion,file) \
    (SOM_Resolve(somSelf, SOMClassMgr, somLoadClassFile) \
	(somSelf,classId,majorVersion,minorVersion,file))
#define _somLoadClassFile SOMClassMgr_somLoadClassFile

/*
 * New Method: somLocateClassFile
 */
typedef zString    SOMLINK somTP_SOMClassMgr_somLocateClassFile(SOMClassMgr *somSelf,
		INOUT somId classId,
		IN integer4 majorVersion,
		IN integer4 minorVersion);
#pragma linkage(somTP_SOMClassMgr_somLocateClassFile, system)
typedef somTP_SOMClassMgr_somLocateClassFile *somTD_SOMClassMgr_somLocateClassFile;
#define somMD_SOMClassMgr_somLocateClassFile "----"
#define SOMClassMgr_somLocateClassFile(somSelf,classId,majorVersion,minorVersion) \
    (SOM_Resolve(somSelf, SOMClassMgr, somLocateClassFile) \
	(somSelf,classId,majorVersion,minorVersion))
#define _somLocateClassFile SOMClassMgr_somLocateClassFile

/*
 * New Method: somRegisterClass
 */
typedef void    SOMLINK somTP_SOMClassMgr_somRegisterClass(SOMClassMgr *somSelf,
		IN SOMClass *classObj);
#pragma linkage(somTP_SOMClassMgr_somRegisterClass, system)
typedef somTP_SOMClassMgr_somRegisterClass *somTD_SOMClassMgr_somRegisterClass;
#define somMD_SOMClassMgr_somRegisterClass "----"
#define SOMClassMgr_somRegisterClass(somSelf,classObj) \
    (SOM_Resolve(somSelf, SOMClassMgr, somRegisterClass) \
	(somSelf,classObj))
#define _somRegisterClass SOMClassMgr_somRegisterClass

/*
 * New Method: somUnloadClassFile
 */
typedef int    SOMLINK somTP_SOMClassMgr_somUnloadClassFile(SOMClassMgr *somSelf,
		IN SOMClass *classObj);
#pragma linkage(somTP_SOMClassMgr_somUnloadClassFile, system)
typedef somTP_SOMClassMgr_somUnloadClassFile *somTD_SOMClassMgr_somUnloadClassFile;
#define somMD_SOMClassMgr_somUnloadClassFile "----"
#define SOMClassMgr_somUnloadClassFile(somSelf,classObj) \
    (SOM_Resolve(somSelf, SOMClassMgr, somUnloadClassFile) \
	(somSelf,classObj))
#define _somUnloadClassFile SOMClassMgr_somUnloadClassFile

/*
 * New Method: somUnregisterClass
 */
typedef int    SOMLINK somTP_SOMClassMgr_somUnregisterClass(SOMClassMgr *somSelf,
		IN SOMClass *classObj);
#pragma linkage(somTP_SOMClassMgr_somUnregisterClass, system)
typedef somTP_SOMClassMgr_somUnregisterClass *somTD_SOMClassMgr_somUnregisterClass;
#define somMD_SOMClassMgr_somUnregisterClass "----"
#define SOMClassMgr_somUnregisterClass(somSelf,classObj) \
    (SOM_Resolve(somSelf, SOMClassMgr, somUnregisterClass) \
	(somSelf,classObj))
#define _somUnregisterClass SOMClassMgr_somUnregisterClass

/*
 * New Method: somGetInitFunction
 */
typedef zString    SOMLINK somTP_SOMClassMgr_somGetInitFunction(SOMClassMgr *somSelf);
#pragma linkage(somTP_SOMClassMgr_somGetInitFunction, system)
typedef somTP_SOMClassMgr_somGetInitFunction *somTD_SOMClassMgr_somGetInitFunction;
#define somMD_SOMClassMgr_somGetInitFunction "----"
#define SOMClassMgr_somGetInitFunction(somSelf) \
    (SOM_Resolve(somSelf, SOMClassMgr, somGetInitFunction) \
	(somSelf))
#define _somGetInitFunction SOMClassMgr_somGetInitFunction

/*
 * New Method: somClassFromId
 */
typedef SOMClass *   SOMLINK somTP_SOMClassMgr_somClassFromId(SOMClassMgr *somSelf,
		IN somId classId);
#pragma linkage(somTP_SOMClassMgr_somClassFromId, system)
typedef somTP_SOMClassMgr_somClassFromId *somTD_SOMClassMgr_somClassFromId;
#define somMD_SOMClassMgr_somClassFromId "----"
#define SOMClassMgr_somClassFromId(somSelf,classId) \
    (SOM_Resolve(somSelf, SOMClassMgr, somClassFromId) \
	(somSelf,classId))
#define _somClassFromId SOMClassMgr_somClassFromId

/*
 * New Method: somFindClass
 */
typedef SOMClass *   SOMLINK somTP_SOMClassMgr_somFindClass(SOMClassMgr *somSelf,
		INOUT somId classId,
		IN integer4 majorVersion,
		IN integer4 minorVersion);
#pragma linkage(somTP_SOMClassMgr_somFindClass, system)
typedef somTP_SOMClassMgr_somFindClass *somTD_SOMClassMgr_somFindClass;
#define somMD_SOMClassMgr_somFindClass "----"
#define SOMClassMgr_somFindClass(somSelf,classId,majorVersion,minorVersion) \
    (SOM_Resolve(somSelf, SOMClassMgr, somFindClass) \
	(somSelf,classId,majorVersion,minorVersion))
#define _somFindClass SOMClassMgr_somFindClass

/*
 * New Method: somFindClsInFile
 */
typedef SOMClass *   SOMLINK somTP_SOMClassMgr_somFindClsInFile(SOMClassMgr *somSelf,
		INOUT somId classId,
		IN integer4 majorVersion,
		IN integer4 minorVersion,
		IN zString file);
#pragma linkage(somTP_SOMClassMgr_somFindClsInFile, system)
typedef somTP_SOMClassMgr_somFindClsInFile *somTD_SOMClassMgr_somFindClsInFile;
#define somMD_SOMClassMgr_somFindClsInFile "----"
#define SOMClassMgr_somFindClsInFile(somSelf,classId,majorVersion,minorVersion,file) \
    (SOM_Resolve(somSelf, SOMClassMgr, somFindClsInFile) \
	(somSelf,classId,majorVersion,minorVersion,file))
#define _somFindClsInFile SOMClassMgr_somFindClsInFile

/*
 * New Method: somMergeInto
 */
typedef void    SOMLINK somTP_SOMClassMgr_somMergeInto(SOMClassMgr *somSelf,
		IN SOMObject *targetObj);
#pragma linkage(somTP_SOMClassMgr_somMergeInto, system)
typedef somTP_SOMClassMgr_somMergeInto *somTD_SOMClassMgr_somMergeInto;
#define somMD_SOMClassMgr_somMergeInto "----"
#define SOMClassMgr_somMergeInto(somSelf,targetObj) \
    (SOM_Resolve(somSelf, SOMClassMgr, somMergeInto) \
	(somSelf,targetObj))
#define _somMergeInto SOMClassMgr_somMergeInto

/*
 * Declare the class creation procedure
 */
SOMEXTERN SOMAny * SOMLINK SOMClassMgrNewClass(integer4 scemajorVersion,
		integer4 sceminorVersion);
#pragma linkage(SOMClassMgrNewClass, system)

/*
 * Declare the class data structure
 */
SOMEXTERN struct SOMClassMgrClassDataStructure {
	SOMAny *classObject;
	somMToken somFindClsInFile;
	somMToken somFindClass;
	somMToken somClassFromId;
	somMToken somRegisterClass;
	somMToken somUnregisterClass;
	somMToken somLocateClassFile;
	somMToken somLoadClassFile;
	somMToken somUnloadClassFile;
	somMToken somGetInitFunction;
	somMToken somMergeInto;
} SOMClassMgrClassData;

/*
 * Declare the C specific class data structure
 */
SOMEXTERN struct SOMClassMgrCClassDataStructure {
	somMethodTab *parentMtab;
	somDToken instanceDataToken;
} SOMClassMgrCClassData;

#endif       /* somcm_h */
