:copyrightS
/* @(#) somc/ctm.efw 2.41 4/30/96 15:25:24 [12/22/96 21:11:17] */

/*
 *   COMPONENT_NAME: some
 *
 *   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.
 */

:prologS
/*
 *  This file was generated by the SOM Compiler and Emitter Framework.
 *  Generated using: 
 *      SOM Emitter <progname>: <version>
 */

:moduleS
#define SOM_Module_<moduleSourceFileStem>_Source

:classS
#ifndef SOM_Module_<lowerClassSourceFileStem>_Source
#define SOM_Module_<lowerClassSourceFileStem>_Source
#endif
#define <classCScopedName>_Class_Source
?#define <explicitMetaName>_Class_Source
?#define <metaClassForName>_Class_Source

:includeS
#include "<classSourceFileStem>.<ext>"

:methodsPrologS
:methodCommentS
?<--  methodComment>

:noSelfProcedurePrototypeS

SOMEXTERN <methodCReturnType>  SOMLINK __somP_<methodClassName>_<methodName>(<methodNoSelfParamList, ...>)
:withSelfProcedurePrototypeS

SOMEXTERN <methodCReturnType>  SOMLINK __somP_<methodClassName>_<methodName>(<methodCParamList, ...>)
:noSelfMethodPrototypeS

SOM_Scope <methodCReturnType>  SOMLINK <functionprefix><methodName>(<methodNoSelfParamList, ...>)
:withSelfMethodPrototypeS

SOM_Scope <methodCReturnType>  SOMLINK <functionprefix><methodName>(<methodCParamList, ...>)
:methodBodyS
{
    <somThisAssign>
    <methodClassName>MethodDebug("<methodClassName>","<functionprefix><methodName>");

:pcallS
    <classCScopedName>_pcall_<methodName>(<methodFullParamNameList, ...>);
:returnedpcallS
    return <classCScopedName>_pcall_<methodName>(<methodFullParamNameList, ...>);
:CreturnStatementS
    /* Return statement to be customized: */
    return;
:C++returnStatementS
    /* Return statement to be customized: */
    { <methodCReturnType> retVal;  return (retVal); }
:somInitCallOfDefaultInitS
    <functionprefix>somDefaultInit(somSelf, (som3InitCtrl *) NULL);
:somUninitCallOfsomDestructS
    <functionprefix>somDestruct(somSelf, FALSE, (som3DestructCtrl *) NULL);
:methodEpilogS
}
:methodsEpilogS

:InitializerS

?<--  initializerComment>
SOM_Scope void SOMLINK <functionprefix><initializerName>(<initializerCParamList, ...>)
{
    <classCScopedName>Data *somThis; /* set in BeginInitializer */
    som3InitCtrl globalCtrl;
    somBooleanVector myMask;
    <classCScopedName>MethodDebug("<classCScopedName>","<initializerName>");
    <classCScopedName>_BeginInitializer_<initializerName>;

:AssignmentOpS

?<--  assignmentOpComment>
SOM_Scope <classCScopedName> <star> SOMLINK <functionprefix><assignmentOpName>(<assignmentOpCParamList, ...>)
{
    <classCScopedName>Data *somThis; /* set in BeginAssignmentOp */
    som3AssignCtrl globalCtrl;
    somBooleanVector myMask;
    <classCScopedName>MethodDebug("<classCScopedName>","<assignmentOpName>");
    <classCScopedName>_BeginAssignmentOp;

:parentInitializerCallS
    <classCScopedName>_Init_<parentName>_somDefaultInit(somSelf, <ctrlName>);
:parentCopyInitializerCallS
    <classCScopedName>_Init_<parentName>_<initializerName>(somSelf, <ctrlName>, <fromName>);
:parentAssignOpCallS
    <classCScopedName>_Assign_<parentName>_<assignmentOpName>(somSelf, <ctrlName>, <fromName>);
:initializerEpilogS

    /* 
     * local <className> initialization code added by programmer 
     */
}

:AssignmentOpEpilogS

    /* 
     * local <className> assignmentOp code added by programmer 
     */

    return somSelf;
}

:DestructorS

?<--  destructorComment>
SOM_Scope void SOMLINK <functionprefix>somDestruct(<destructorCParamList, ...>)
{
    <classCScopedName>Data *somThis; /* set in BeginDestructor */
    som3DestructCtrl globalCtrl;
    somBooleanVector myMask;
    <classCScopedName>MethodDebug("<classCScopedName>","<functionprefix>somDestruct");
    <classCScopedName>_BeginDestructor;

    /* 
     * local <className> deinitialization code added by programmer 
     */

    <classCScopedName>_EndDestructor;
:parentDeinitializerCallS
:DestructorEpilogS
}

:classinitS

/* Programmer Provided Class Initialization called by __somC_<classCScopedName>_classInit */
SOM_Scope void SOMLINK <functionprefix><classinit>(SOMClass *cls)
{
}

:classuninitS

/* Programmer Provided Class Uninitialization called by SOM kernel */
SOM_Scope void SOMLINK <functionprefix><classuninit>(SOMClass *cls)
{
}

:somallocateS

/* Programmer Provided instance allocation function */
/* returns an uninitialized instance so use void * as return type */
SOM_Scope void * SOMLINK <somallocate>( SOMClass *cls, size_t sizeToAllocate )
{
   /* programmer replaces the following with memory allocation */
   return 0;
}

/* Programmer Provided instance deallocation function */
SOM_Scope void SOMLINK <somdeallocate>( void *obj, size_t sizeToFree )
{
}

:epilogS
:noSomThisAssignS
:noDataSomThisAssignS
/* <methodClassName>Data *somThis = <methodClassName>GetData(somSelf); */
:yesDataSomThisAssignS
<methodClassName>Data *somThis = <methodClassName>GetData(somSelf);

:instanceMethodClassNameS
<classCScopedName>
:classMethodClassNameS
M_<classCScopedName>

