📄 objrtcmp.c
字号:
SIDE EFFECTS : Object patterns code written to files NOTES : None ***********************************************************/static int ObjectPatternsToCode(fileName,fileID,headerFP,imageID,maxIndices) char *fileName; int fileID; FILE *headerFP; int imageID; int maxIndices; { int version; version = IntermediatePatternNodesToCode(fileName,fileID, headerFP,imageID,maxIndices,1); if (version == 0) return(0); if (! AlphaPatternNodesToCode(fileName,fileID,headerFP,imageID,maxIndices,version)) return(0); return(1); } /*************************************************** NAME : IntermediatePatternNodeReference DESCRIPTION : Prints out a reference to an object pattern intermediate node INPUTS : 1) A pointer to the object pattern intermediate node 2) A pointer to the output file 3) The id of constructs-to-c image 4) The maximum number of indices allowed in any single array in the image RETURNS : 1 if OK, 0 if could not open a file SIDE EFFECTS : Reference to object pattern alpha memory printed NOTES : None ***************************************************/static VOID IntermediatePatternNodeReference(thePattern,theFile,imageID,maxIndices) OBJECT_PATTERN_NODE *thePattern; FILE *theFile; int imageID; int maxIndices; { if (thePattern == NULL) fprintf(theFile,"NULL"); else { fprintf(theFile,"&%s%d_%d[%d]", ObjectPNPrefix(),imageID, (((int) thePattern->bsaveID) / maxIndices) + 1, ((int) thePattern->bsaveID) % maxIndices); } }/************************************************************* NAME : IntermediatePatternNodesToCode DESCRIPTION : Writes out data structures for run-time creation of object pattern intermediate nodes INPUTS : 1) The base image output file name 2) The base image file id 3) A pointer to the header output file 4) The id of constructs-to-c image 5) The maximum number of indices allowed in any single array in the image RETURNS : Next version file to open, 0 if error SIDE EFFECTS : Object patterns code written to files NOTES : None *************************************************************/static int IntermediatePatternNodesToCode(fileName,fileID,headerFP,imageID,maxIndices,version) char *fileName; int fileID; FILE *headerFP; int imageID; int maxIndices; int version; { FILE *fp; int arrayVersion; int newHeader; int i; OBJECT_PATTERN_NODE *thePattern; /* ================ Create the file. ================ */ if (ObjectNetworkPointer() == NULL) return(1); fprintf(headerFP,"#include \"objrtmch.h\"\n"); /* ================================= Dump the pattern node structures. ================================= */ if ((fp = NewCFile(fileName,fileID,version,CLIPS_FALSE)) == NULL) return(0); newHeader = CLIPS_TRUE; arrayVersion = 1; i = 1; thePattern = ObjectNetworkPointer(); while (thePattern != NULL) { if (newHeader) { fprintf(fp,"OBJECT_PATTERN_NODE %s%d_%d[] = {\n", ObjectPNPrefix(),imageID,arrayVersion); fprintf(headerFP,"extern OBJECT_PATTERN_NODE %s%d_%d[];\n", ObjectPNPrefix(),imageID,arrayVersion); newHeader = CLIPS_FALSE; } fprintf(fp,"{0,%u,%u,%u,%u,0L,%u,",thePattern->multifieldNode, thePattern->endSlot, thePattern->whichField, thePattern->leaveFields, thePattern->slotNameID); PrintHashedExpressionReference(fp,thePattern->networkTest,imageID,maxIndices); fprintf(fp,","); IntermediatePatternNodeReference(thePattern->nextLevel,fp,imageID,maxIndices); fprintf(fp,","); IntermediatePatternNodeReference(thePattern->lastLevel,fp,imageID,maxIndices); fprintf(fp,","); IntermediatePatternNodeReference(thePattern->leftNode,fp,imageID,maxIndices); fprintf(fp,","); IntermediatePatternNodeReference(thePattern->rightNode,fp,imageID,maxIndices); fprintf(fp,","); ObjectPatternNodeReference((VOID *) thePattern->alphaNode,fp,imageID,maxIndices); fprintf(fp,",0L}"); i++; thePattern = GetNextObjectPatternNode(thePattern); if ((i > maxIndices) || (thePattern == NULL)) { fprintf(fp,"};\n"); fclose(fp); i = 1; version++; arrayVersion++; if (thePattern != NULL) { if ((fp = NewCFile(fileName,fileID,version,CLIPS_FALSE)) == NULL) return(0); newHeader = CLIPS_TRUE; } } else if (thePattern != NULL) { fprintf(fp,",\n"); } } return(version); }/*********************************************************** NAME : AlphaPatternNodesToCode DESCRIPTION : Writes out data structures for run-time creation of object pattern alpha memories INPUTS : 1) The base image output file name 2) The base image file id 3) A pointer to the header output file 4) The id of constructs-to-c image 5) The maximum number of indices allowed in any single array in the image RETURNS : Next version file to open, 0 if error SIDE EFFECTS : Object patterns code written to files NOTES : None ***********************************************************/static int AlphaPatternNodesToCode(fileName,fileID,headerFP,imageID,maxIndices,version) char *fileName; int fileID; FILE *headerFP; int imageID; int maxIndices; int version; { FILE *fp; int arrayVersion; int newHeader; int i; OBJECT_ALPHA_NODE *thePattern; /* ================ Create the file. ================ */ if (ObjectNetworkTerminalPointer() == NULL) return(version); /* ================================= Dump the pattern node structures. ================================= */ if ((fp = NewCFile(fileName,fileID,version,CLIPS_FALSE)) == NULL) return(0); newHeader = CLIPS_TRUE; arrayVersion = 1; i = 1; thePattern = ObjectNetworkTerminalPointer(); while (thePattern != NULL) { if (newHeader) { fprintf(fp,"OBJECT_ALPHA_NODE %s%d_%d[] = {\n", ObjectANPrefix(),imageID,arrayVersion); fprintf(headerFP,"extern OBJECT_ALPHA_NODE %s%d_%d[];\n", ObjectANPrefix(),imageID,arrayVersion); newHeader = CLIPS_FALSE; } fprintf(fp,"{"); PatternNodeHeaderToCode(fp,&thePattern->header,imageID,maxIndices); fprintf(fp,",0L,"); PrintBitMapReference(fp,thePattern->classbmp); fprintf(fp,","); PrintBitMapReference(fp,thePattern->slotbmp); fprintf(fp,","); IntermediatePatternNodeReference(thePattern->patternNode,fp,imageID,maxIndices); fprintf(fp,","); ObjectPatternNodeReference(thePattern->nxtInGroup,fp,imageID,maxIndices); fprintf(fp,","); ObjectPatternNodeReference(thePattern->nxtTerminal,fp,imageID,maxIndices); fprintf(fp,",0L}"); i++; thePattern = thePattern->nxtTerminal; if ((i > maxIndices) || (thePattern == NULL)) { fprintf(fp,"};\n"); fclose(fp); i = 1; version++; arrayVersion++; if (thePattern != NULL) { if ((fp = NewCFile(fileName,fileID,version,CLIPS_FALSE)) == NULL) return(0); newHeader = CLIPS_TRUE; } } else if (thePattern != NULL) { fprintf(fp,",\n"); } } return(version); }#endif/*************************************************** NAME : DESCRIPTION : INPUTS : RETURNS : SIDE EFFECTS : NOTES : ***************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -