/*************************************************** NAME : SingleDeffunctionToCode DESCRIPTION : Writes out a single deffunction's data to the file INPUTS : 1) The output file 2) The deffunction 3) The compile image id 4) The maximum number of elements in an array 5) The module index RETURNS : Nothing useful SIDE EFFECTS : Deffunction data written NOTES : None ***************************************************/ static void SingleDeffunctionToCode( void *theEnv, FILE *theFile, DEFFUNCTION *theDeffunction, int imageID, int maxIndices, int moduleCount) { /* ================== Deffunction Header ================== */ fprintf(theFile,"{"); ConstructHeaderToCode(theEnv,theFile,&theDeffunction->header,imageID,maxIndices,moduleCount, ModulePrefix(DeffunctionData(theEnv)->DeffunctionCodeItem), ConstructPrefix(DeffunctionData(theEnv)->DeffunctionCodeItem)); /* ========================= Deffunction specific data ========================= */ fprintf(theFile,",0,0,0,"); ExpressionToCode(theEnv,theFile,theDeffunction->code); fprintf(theFile,",%d,%d,%d", theDeffunction->minNumberOfParameters, theDeffunction->maxNumberOfParameters, theDeffunction->numberOfLocalVars); fprintf(theFile,"}"); }
static void DeffactsToCode( void *theEnv, FILE *theFile, struct deffacts *theDeffacts, int imageID, int maxIndices, int moduleCount) { /*=================*/ /* Deffacts Header */ /*=================*/ fprintf(theFile,"{"); ConstructHeaderToCode(theEnv,theFile,&theDeffacts->header,imageID,maxIndices, moduleCount,ModulePrefix(DeffactsData(theEnv)->DeffactsCodeItem), ConstructPrefix(DeffactsData(theEnv)->DeffactsCodeItem)); fprintf(theFile,","); /*=============*/ /* Assert List */ /*=============*/ ExpressionToCode(theEnv,theFile,theDeffacts->assertList); fprintf(theFile,"}"); }
/**************************************************************** NAME : RestrictionToCode DESCRIPTION : Writes out a single restriction's data to the file INPUTS : 1) The output file 2) The compile image id 3) The restriction 4) The partition holding the restriction types 5) The relative index of the restriction types in the partition RETURNS : Nothing useful SIDE EFFECTS : Restriction data written NOTES : None ***************************************************************/ static void RestrictionToCode( FILE *theFile, int imageID, RESTRICTION *theRestriction, int typeArrayVersion, int typeArrayCount) { fprintf(theFile,"{"); if (theRestriction->types == NULL) fprintf(theFile,"NULL,"); else fprintf(theFile,"&%s%d_%d[%d],",TypePrefix(),imageID, typeArrayVersion,typeArrayCount); ExpressionToCode(theFile,theRestriction->query); fprintf(theFile,",%u}",theRestriction->tcnt); }
static void HashedExpressionsToCode() { unsigned i; EXPRESSION_HN *exphash; for (i = 0; i < EXPRESSION_HASH_SIZE; i++) { for (exphash = ExpressionHashTable[i]; exphash != NULL; exphash = exphash->nxt) { exphash->bsaveID = ExpressionCount + (MaxIndices * ExpressionVersion); ExpressionToCode(NULL,exphash->exp); } } }
/**************************************************************** NAME : MethodToCode DESCRIPTION : Writes out a single method's data to the file INPUTS : 1) The output file 2) The compile image id 3) The method 4) The partition holding the method restrictions 5) The relative index of the method restrictions in the partition RETURNS : Nothing useful SIDE EFFECTS : Method data written NOTES : None ***************************************************************/ static void MethodToCode( FILE *theFile, int imageID, DEFMETHOD *theMethod, int restrictionArrayVersion, int restrictionArrayCount) { fprintf(theFile,"{%u,0,%d,%d,%d,%d,%u,0,", theMethod->index,theMethod->restrictionCount, theMethod->minRestrictions,theMethod->maxRestrictions, theMethod->localVarCount,theMethod->system); if (theMethod->restrictions == NULL) fprintf(theFile,"NULL,"); else fprintf(theFile,"&%s%d_%d[%d],",RestrictionPrefix(),imageID, restrictionArrayVersion,restrictionArrayCount); ExpressionToCode(theFile,theMethod->actions); fprintf(theFile,",NULL}"); }
/*************************************************** NAME : SingleDefinstancesToCode DESCRIPTION : Writes out a single definstances' data to the file INPUTS : 1) The output file 2) The definstances 3) The compile image id 4) The maximum number of elements in an array 5) The module index RETURNS : Nothing useful SIDE EFFECTS : Definstances data written NOTES : None ***************************************************/ static void SingleDefinstancesToCode( FILE *theFile, DEFINSTANCES *theDefinstances, int imageID, int maxIndices, int moduleCount) { /* =================== Definstances Header =================== */ fprintf(theFile,"{"); ConstructHeaderToCode(theFile,&theDefinstances->header,imageID,maxIndices,moduleCount, ModulePrefix(DefinstancesCodeItem), ConstructPrefix(DefinstancesCodeItem)); /* ========================== Definstances specific data ========================== */ fprintf(theFile,",0,"); ExpressionToCode(theFile,theDefinstances->mkinstance); fprintf(theFile,"}"); }
static void DefruleToCode( void *theEnv, FILE *theFile, struct defrule *theDefrule, int imageID, int maxIndices, int moduleCount) { /*==================*/ /* Construct Header */ /*==================*/ fprintf(theFile,"{"); ConstructHeaderToCode(theEnv,theFile,&theDefrule->header,imageID,maxIndices, moduleCount,ModulePrefix(DefruleData(theEnv)->DefruleCodeItem), ConstructPrefix(DefruleData(theEnv)->DefruleCodeItem)); /*==========================*/ /* Flags and Integer Values */ /*==========================*/ fprintf(theFile,",%d,%d,%d,%d,%d,%d,%d,%d,", theDefrule->salience,theDefrule->localVarCnt, theDefrule->complexity,theDefrule->afterBreakpoint, theDefrule->watchActivation,theDefrule->watchFiring, theDefrule->autoFocus,theDefrule->executing); /*==================*/ /* Dynamic Salience */ /*==================*/ ExpressionToCode(theEnv,theFile,theDefrule->dynamicSalience); fprintf(theFile,","); /*=============*/ /* RHS Actions */ /*=============*/ ExpressionToCode(theEnv,theFile,theDefrule->actions); fprintf(theFile,","); /*=========================*/ /* Logical Dependency Join */ /*=========================*/ if (theDefrule->logicalJoin != NULL) { fprintf(theFile,"&%s%d_%ld[%ld],",JoinPrefix(), imageID,(theDefrule->logicalJoin->bsaveID / maxIndices) + 1, theDefrule->logicalJoin->bsaveID % maxIndices); } else { fprintf(theFile,"NULL,"); } /*===========*/ /* Last Join */ /*===========*/ if (theDefrule->lastJoin != NULL) { fprintf(theFile,"&%s%d_%ld[%ld],",JoinPrefix(), imageID,(theDefrule->lastJoin->bsaveID / maxIndices) + 1, theDefrule->lastJoin->bsaveID % maxIndices); } else { fprintf(theFile,"NULL,"); } /*===============*/ /* Next Disjunct */ /*===============*/ if (theDefrule->disjunct != NULL) { fprintf(theFile,"&%s%d_%ld[%ld]}",ConstructPrefix(DefruleData(theEnv)->DefruleCodeItem), imageID,(theDefrule->disjunct->header.bsaveID / maxIndices) + 1, theDefrule->disjunct->header.bsaveID % maxIndices); } else { fprintf(theFile,"NULL}"); } }