static void InitDefruleCode( void *theEnv, FILE *initFP, int imageID, int maxIndices) { #if MAC_MCW || WIN_MCW || MAC_XCD #pragma unused(maxIndices) #pragma unused(theEnv) #pragma unused(imageID) #endif fprintf(initFP," DefruleRunTimeInitialize(theEnv,"); if (DefruleData(theEnv)->RightPrimeJoins == NULL) { fprintf(initFP,"NULL,"); } else { fprintf(initFP,"&%s%d_%ld[%ld],",LinkPrefix(), imageID,(DefruleData(theEnv)->RightPrimeJoins->bsaveID / maxIndices) + 1, DefruleData(theEnv)->RightPrimeJoins->bsaveID % maxIndices); } if (DefruleData(theEnv)->LeftPrimeJoins == NULL) { fprintf(initFP,"NULL);\n"); } else { fprintf(initFP,"&%s%d_%ld[%ld]);\n",LinkPrefix(), imageID,(DefruleData(theEnv)->LeftPrimeJoins->bsaveID / maxIndices) + 1, DefruleData(theEnv)->LeftPrimeJoins->bsaveID % maxIndices); } }
static int TraverseJoinLinks( void *theEnv, struct joinLink *linkPtr, char *fileName, char *pathName, char *fileNameBuffer, int fileID, FILE *headerFP, int imageID, int maxIndices, FILE **linkFile, int *fileCount, int *linkArrayVersion, int *linkArrayCount) { for (; linkPtr != NULL; linkPtr = linkPtr->next) { *linkFile = OpenFileIfNeeded(theEnv,*linkFile,fileName,pathName,fileNameBuffer,fileID,imageID,fileCount, *linkArrayVersion,headerFP, (char*)"struct joinLink",LinkPrefix(),FALSE,NULL); if (*linkFile == NULL) { return(FALSE); } LinkToCode(theEnv,*linkFile,linkPtr,imageID,maxIndices); (*linkArrayCount)++; *linkFile = CloseFileIfNeeded(theEnv,*linkFile,linkArrayCount,linkArrayVersion, maxIndices,NULL,NULL); } return(TRUE); }
static void LinkToCode( void *theEnv, EXEC_STATUS, FILE *theFile, struct joinLink *theLink, int imageID, int maxIndices) { /*==================*/ /* Enter Direction. */ /*==================*/ fprintf(theFile,"{%d,",theLink->enterDirection); /*======*/ /* Join */ /*======*/ if (theLink->join == NULL) { fprintf(theFile,"NULL,"); } else { fprintf(theFile,"&%s%d_%ld[%ld],",JoinPrefix(), imageID,(theLink->join->bsaveID / maxIndices) + 1, theLink->join->bsaveID % maxIndices); } /*======*/ /* Next */ /*======*/ if (theLink->next == NULL) { fprintf(theFile,"NULL,"); } else { fprintf(theFile,"&%s%d_%ld[%ld],",LinkPrefix(), imageID,(theLink->next->bsaveID / maxIndices) + 1, theLink->next->bsaveID % maxIndices); } /*===========*/ /* Bsave ID. */ /*===========*/ fprintf(theFile,"0}"); }
static void JoinToCode( void *theEnv, FILE *joinFile, struct joinNode *theJoin, int imageID, int maxIndices) { struct patternParser *theParser; /*===========================*/ /* Mark the join as visited. */ /*===========================*/ theJoin->marked = 0; /*===========================*/ /* Flags and Integer Values. */ /*===========================*/ fprintf(joinFile,"{%d,%d,%d,%d,%d,0,0,%d,%d,0,0,0,0,", theJoin->firstJoin,theJoin->logicalJoin, theJoin->joinFromTheRight,theJoin->patternIsNegated, theJoin->patternIsExists, theJoin->rhsType,theJoin->depth); /*==========================*/ /* Left and right Memories. */ /*==========================*/ fprintf(joinFile,"NULL,NULL,"); /*====================*/ /* Network Expression */ /*====================*/ PrintHashedExpressionReference(theEnv,joinFile,theJoin->networkTest,imageID,maxIndices); fprintf(joinFile,","); PrintHashedExpressionReference(theEnv,joinFile,theJoin->secondaryNetworkTest,imageID,maxIndices); fprintf(joinFile,","); PrintHashedExpressionReference(theEnv,joinFile,theJoin->leftHash,imageID,maxIndices); fprintf(joinFile,","); PrintHashedExpressionReference(theEnv,joinFile,theJoin->rightHash,imageID,maxIndices); fprintf(joinFile,","); /*============================*/ /* Right Side Entry Structure */ /*============================*/ if (theJoin->rightSideEntryStructure == NULL) { fprintf(joinFile,"NULL,"); } else if (theJoin->joinFromTheRight == FALSE) { theParser = GetPatternParser(theEnv,(int) theJoin->rhsType); if (theParser->codeReferenceFunction == NULL) fprintf(joinFile,"NULL,"); else { fprintf(joinFile,"VS "); (*theParser->codeReferenceFunction)(theEnv,theJoin->rightSideEntryStructure, joinFile,imageID,maxIndices); fprintf(joinFile,","); } } else { fprintf(joinFile,"&%s%d_%ld[%ld],",JoinPrefix(), imageID,(((struct joinNode *) theJoin->rightSideEntryStructure)->bsaveID / maxIndices) + 1, ((struct joinNode *) theJoin->rightSideEntryStructure)->bsaveID % maxIndices); } /*=================*/ /* Next Join Level */ /*=================*/ if (theJoin->nextLinks == NULL) { fprintf(joinFile,"NULL,"); } else { fprintf(joinFile,"&%s%d_%ld[%ld],",LinkPrefix(), imageID,(theJoin->nextLinks->bsaveID / maxIndices) + 1, theJoin->nextLinks->bsaveID % maxIndices); } /*=================*/ /* Last Join Level */ /*=================*/ if (theJoin->lastLevel == NULL) { fprintf(joinFile,"NULL,"); } else { fprintf(joinFile,"&%s%d_%ld[%ld],",JoinPrefix(), imageID,(theJoin->lastLevel->bsaveID / maxIndices) + 1, theJoin->lastLevel->bsaveID % maxIndices); } /*==================*/ /* Right Match Node */ /*==================*/ if (theJoin->rightMatchNode == NULL) { fprintf(joinFile,"NULL,"); } else { fprintf(joinFile,"&%s%d_%ld[%ld],",JoinPrefix(), imageID,(theJoin->rightMatchNode->bsaveID / maxIndices) + 1, theJoin->rightMatchNode->bsaveID % maxIndices); } /*==================*/ /* Rule to Activate */ /*==================*/ if (theJoin->ruleToActivate == NULL) { fprintf(joinFile,"NULL}"); } else { fprintf(joinFile,"&%s%d_%ld[%ld]}",ConstructPrefix(DefruleData(theEnv)->DefruleCodeItem),imageID, (theJoin->ruleToActivate->header.bsaveID / maxIndices) + 1, theJoin->ruleToActivate->header.bsaveID % maxIndices); } }