⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 factbin.c

📁 clips源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
/*********************************************************/static void BsaveStorage(  void *theEnv,  FILE *fp)  {   size_t space;   space = sizeof(long);   GenWrite(&space,sizeof(size_t),fp);   GenWrite(&FactBinaryData(theEnv)->NumberOfPatterns,sizeof(long int),fp);  }/*****************************************************//* BsaveFactPatterns: Writes out all factPatternNode *//*    data structures to the binary file.            *//*****************************************************/static void BsaveFactPatterns(  void *theEnv,  FILE *fp)  {   size_t space;   struct deftemplate *theDeftemplate;   struct defmodule *theModule;   /*========================================*/   /* Write out the amount of space taken up */   /* by the factPatternNode data structures */   /* in the binary image.                   */   /*========================================*/   space = FactBinaryData(theEnv)->NumberOfPatterns * sizeof(struct bsaveFactPatternNode);   GenWrite(&space,sizeof(size_t),fp);   /*===========================*/   /* Loop through each module. */   /*===========================*/   for (theModule = (struct defmodule *) EnvGetNextDefmodule(theEnv,NULL);        theModule != NULL;        theModule = (struct defmodule *) EnvGetNextDefmodule(theEnv,theModule))     {      /*=====================================================*/      /* Loop through each deftemplate in the current module */      /* and save its fact pattern network to the file.      */      /*=====================================================*/      EnvSetCurrentModule(theEnv,(void *) theModule);      for (theDeftemplate = (struct deftemplate *) EnvGetNextDeftemplate(theEnv,NULL);           theDeftemplate != NULL;           theDeftemplate = (struct deftemplate *) EnvGetNextDeftemplate(theEnv,theDeftemplate))        { BsaveDriver(theEnv,BSAVE_PATTERNS,fp,theDeftemplate->patternNetwork); }    }   /*=============================================================*/   /* If a binary image was already loaded when the bsave command */   /* was issued, then restore the counts indicating the number   */   /* of factPatternNode data structures in the binary image      */   /* (these were overwritten by the binary save).                */   /*=============================================================*/   RestoreBloadCount(theEnv,&FactBinaryData(theEnv)->NumberOfPatterns);  }/******************************************************//* BsavePatternNode: Writes out a single fact pattern *//*   node to the binary image save file.              *//******************************************************/static void BsavePatternNode(  void *theEnv,  struct factPatternNode *thePattern,  FILE *fp)  {   struct bsaveFactPatternNode tempNode;   AssignBsavePatternHeaderValues(theEnv,&tempNode.header,&thePattern->header);   tempNode.whichField = thePattern->whichField;   tempNode.leaveFields = thePattern->leaveFields;   tempNode.whichSlot = thePattern->whichSlot;   tempNode.networkTest = HashedExpressionIndex(theEnv,thePattern->networkTest);   tempNode.nextLevel =  BsaveFactPatternIndex(thePattern->nextLevel);   tempNode.lastLevel =  BsaveFactPatternIndex(thePattern->lastLevel);   tempNode.leftNode =  BsaveFactPatternIndex(thePattern->leftNode);   tempNode.rightNode =  BsaveFactPatternIndex(thePattern->rightNode);   GenWrite(&tempNode,(unsigned long) sizeof(struct bsaveFactPatternNode),fp);  }#endif /* BLOAD_AND_BSAVE *//*****************************************************//* BloadStorage: Allocates storage requirements for  *//*   the factPatternNodes used by this binary image. *//*****************************************************/static void BloadStorage(  void *theEnv)  {   size_t space;   /*=========================================*/   /* Determine the number of factPatternNode */   /* data structures to be read.             */   /*=========================================*/   GenReadBinary(theEnv,&space,sizeof(size_t));   GenReadBinary(theEnv,&FactBinaryData(theEnv)->NumberOfPatterns,sizeof(long int));   /*===================================*/   /* Allocate the space needed for the */   /* factPatternNode data structures.  */   /*===================================*/   if (FactBinaryData(theEnv)->NumberOfPatterns == 0)     {      FactBinaryData(theEnv)->FactPatternArray = NULL;      return;     }   space = FactBinaryData(theEnv)->NumberOfPatterns * sizeof(struct factPatternNode);   FactBinaryData(theEnv)->FactPatternArray = (struct factPatternNode *) genalloc(theEnv,space);  }/************************************************************//* BloadBinaryItem: Loads and refreshes the factPatternNode *//*   data structures used by this binary image.             *//************************************************************/static void BloadBinaryItem(  void *theEnv)  {   size_t space;   long i;   /*======================================================*/   /* Read in the amount of space used by the binary image */   /* (this is used to skip the construct in the event it  */   /* is not available in the version being run).          */   /*======================================================*/   GenReadBinary(theEnv,&space,sizeof(size_t));   /*=============================================*/   /* Read in the factPatternNode data structures */   /* and refresh the pointers.                   */   /*=============================================*/   BloadandRefresh(theEnv,FactBinaryData(theEnv)->NumberOfPatterns,(unsigned) sizeof(struct bsaveFactPatternNode),                   UpdateFactPatterns);                      for (i = 0; i < FactBinaryData(theEnv)->NumberOfPatterns; i++)     {      if ((FactBinaryData(theEnv)->FactPatternArray[i].lastLevel != NULL) &&          (FactBinaryData(theEnv)->FactPatternArray[i].lastLevel->header.selector))        {          AddHashedPatternNode(theEnv,FactBinaryData(theEnv)->FactPatternArray[i].lastLevel,                                     &FactBinaryData(theEnv)->FactPatternArray[i],                                     FactBinaryData(theEnv)->FactPatternArray[i].networkTest->type,                                     FactBinaryData(theEnv)->FactPatternArray[i].networkTest->value);         }     }  }/*************************************************//* UpdateFactPatterns: Bload refresh routine for *//*   the factPatternNode structure.              *//*************************************************/static void UpdateFactPatterns(  void *theEnv,  void *buf,  long obji)  {   struct bsaveFactPatternNode *bp;   bp = (struct bsaveFactPatternNode *) buf;   UpdatePatternNodeHeader(theEnv,&FactBinaryData(theEnv)->FactPatternArray[obji].header,&bp->header);   FactBinaryData(theEnv)->FactPatternArray[obji].bsaveID = 0L;   FactBinaryData(theEnv)->FactPatternArray[obji].whichField = bp->whichField;   FactBinaryData(theEnv)->FactPatternArray[obji].leaveFields = bp->leaveFields;   FactBinaryData(theEnv)->FactPatternArray[obji].whichSlot = bp->whichSlot;   FactBinaryData(theEnv)->FactPatternArray[obji].networkTest = HashedExpressionPointer(bp->networkTest);   FactBinaryData(theEnv)->FactPatternArray[obji].rightNode = BloadFactPatternPointer(bp->rightNode);   FactBinaryData(theEnv)->FactPatternArray[obji].nextLevel = BloadFactPatternPointer(bp->nextLevel);   FactBinaryData(theEnv)->FactPatternArray[obji].lastLevel = BloadFactPatternPointer(bp->lastLevel);   FactBinaryData(theEnv)->FactPatternArray[obji].leftNode  = BloadFactPatternPointer(bp->leftNode);  }/***************************************************//* ClearBload:  Fact pattern network clear routine *//*   when a binary load is in effect.              *//***************************************************/static void ClearBload(  void *theEnv)  {   size_t space;   long i;      for (i = 0; i < FactBinaryData(theEnv)->NumberOfPatterns; i++)     {      if ((FactBinaryData(theEnv)->FactPatternArray[i].lastLevel != NULL) &&          (FactBinaryData(theEnv)->FactPatternArray[i].lastLevel->header.selector))        {          RemoveHashedPatternNode(theEnv,FactBinaryData(theEnv)->FactPatternArray[i].lastLevel,                                        &FactBinaryData(theEnv)->FactPatternArray[i],                                        FactBinaryData(theEnv)->FactPatternArray[i].networkTest->type,                                        FactBinaryData(theEnv)->FactPatternArray[i].networkTest->value);         }     }   space = FactBinaryData(theEnv)->NumberOfPatterns * sizeof(struct factPatternNode);   if (space != 0) genfree(theEnv,(void *) FactBinaryData(theEnv)->FactPatternArray,space);   FactBinaryData(theEnv)->NumberOfPatterns = 0;  }#endif /* DEFTEMPLATE_CONSTRUCT && (BLOAD || BLOAD_ONLY || BLOAD_AND_BSAVE) && (! RUN_TIME) */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -