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

📄 objrtbin.c

📁 NASA 开发使用的一个专家系统
💻 C
📖 第 1 页 / 共 2 页
字号:
   space = (sizeof(BSAVE_OBJECT_ALPHA_NODE) * AlphaNodeCount) +           (sizeof(BSAVE_OBJECT_PATTERN_NODE) * PatternNodeCount);   GenWrite(&space,(UNLN) sizeof(UNLN),fp);   /* ==========================================      Write out the alpha terminal pattern nodes      ========================================== */   alphaPtr = ObjectNetworkTerminalPointer();   while (alphaPtr != NULL)     {      AssignBsavePatternHeaderValues(&dummyAlpha.header,&alphaPtr->header);      dummyAlpha.classbmp = alphaPtr->classbmp->bucket;      if (alphaPtr->slotbmp != NULL)        dummyAlpha.slotbmp = alphaPtr->slotbmp->bucket;      else        dummyAlpha.slotbmp = -1L;      dummyAlpha.patternNode = BsaveObjectPatternIndex(alphaPtr->patternNode);      dummyAlpha.nxtInGroup = BsaveObjectAlphaIndex(alphaPtr->nxtInGroup);      dummyAlpha.nxtTerminal = BsaveObjectAlphaIndex(alphaPtr->nxtTerminal);      GenWrite(&dummyAlpha,(UNLN) sizeof(BSAVE_OBJECT_ALPHA_NODE),fp);      alphaPtr = alphaPtr->nxtTerminal;     }        /* ========================================      Write out the intermediate pattern nodes      ======================================== */   patternPtr = ObjectNetworkPointer();   while (patternPtr != NULL)     {      dummyPattern.multifieldNode = patternPtr->multifieldNode;      dummyPattern.whichField = patternPtr->whichField;      dummyPattern.leaveFields = patternPtr->leaveFields;      dummyPattern.endSlot = patternPtr->endSlot;      dummyPattern.slotNameID = patternPtr->slotNameID;      dummyPattern.networkTest = HashedExpressionIndex(patternPtr->networkTest);      dummyPattern.nextLevel = BsaveObjectPatternIndex(patternPtr->nextLevel);      dummyPattern.lastLevel = BsaveObjectPatternIndex(patternPtr->lastLevel);      dummyPattern.leftNode = BsaveObjectPatternIndex(patternPtr->leftNode);      dummyPattern.rightNode = BsaveObjectPatternIndex(patternPtr->rightNode);      dummyPattern.alphaNode = BsaveObjectAlphaIndex(patternPtr->alphaNode);      GenWrite(&dummyPattern,(UNLN) sizeof(BSAVE_OBJECT_PATTERN_NODE),fp);            if (patternPtr->nextLevel == NULL)        {         while (patternPtr->rightNode == NULL)           {            patternPtr = patternPtr->lastLevel;            if (patternPtr == NULL)              return;           }         patternPtr = patternPtr->rightNode;        }      else        patternPtr = patternPtr->nextLevel;     }   if (Bloaded())     {      RestoreBloadCount(&AlphaNodeCount);      RestoreBloadCount(&PatternNodeCount);     }  }#endif/***************************************************  NAME         : BloadStorageObjectPatterns  DESCRIPTION  : Reads in the storage requirements                 for the object patterns in this                 bload image  INPUTS       : None  RETURNS      : Nothing useful  SIDE EFFECTS : Counts read and arrays allocated  NOTES        : None ***************************************************/static VOID BloadStorageObjectPatterns()  {   UNLN space;   long counts[2];      GenRead((VOID *) &space,(UNLN) sizeof(UNLN));   GenRead((VOID *) counts,space);   AlphaNodeCount = counts[0];   PatternNodeCount = counts[1];      if (AlphaNodeCount == 0L)     AlphaArray = NULL;   else     {      space = (UNLN) (AlphaNodeCount * sizeof(OBJECT_ALPHA_NODE));       AlphaArray = (OBJECT_ALPHA_NODE HUGE_ADDR *) genlongalloc(space);     }   if (PatternNodeCount == 0L)     PatternArray = NULL;   else     {      space = (UNLN) (PatternNodeCount * sizeof(OBJECT_PATTERN_NODE));       PatternArray = (OBJECT_PATTERN_NODE HUGE_ADDR *) genlongalloc(space);     }  }/****************************************************  NAME         : BloadObjectPatterns  DESCRIPTION  : Reads in all object pattern                 data structures from binary                 image and updates pointers  INPUTS       : None  RETURNS      : Nothing useful  SIDE EFFECTS : Binary data structures updated  NOTES        : Assumes storage allocated previously ****************************************************/static VOID BloadObjectPatterns()  {   UNLN space;      GenRead((VOID *) &space,(UNLN) sizeof(UNLN));   if (space == 0L)     return;      /* ================================================      Read in the alpha and intermediate pattern nodes      ================================================ */   BloadandRefresh(AlphaNodeCount,(unsigned) sizeof(BSAVE_OBJECT_ALPHA_NODE),UpdateAlpha);   BloadandRefresh(PatternNodeCount,(unsigned) sizeof(BSAVE_OBJECT_PATTERN_NODE),UpdatePattern);      /* =======================      Set the global pointers      ======================= */   SetObjectNetworkTerminalPointer((OBJECT_ALPHA_NODE *) &AlphaArray[0]);   SetObjectNetworkPointer((OBJECT_PATTERN_NODE *) &PatternArray[0]);  }/***************************************************  NAME         : UpdateAlpha  DESCRIPTION  : Updates all the pointers for an                 alpha node based on the binary                 image indices  INPUTS       : 1) A pointer to the binary                    image alpha node buffer                 2) The index of the actual                    alpha node in the array  RETURNS      : Nothing useful  SIDE EFFECTS : Alpha node updated  NOTES        : None ***************************************************/static VOID UpdateAlpha(buf,obji)  VOID *buf;  long obji;  {   BSAVE_OBJECT_ALPHA_NODE *bap;   OBJECT_ALPHA_NODE *ap;      bap = (BSAVE_OBJECT_ALPHA_NODE *) buf;   ap = (OBJECT_ALPHA_NODE *) &AlphaArray[obji];   UpdatePatternNodeHeader(&ap->header,&bap->header);   ap->matchTimeTag = 0L;   ap->classbmp = BitMapPointer(bap->classbmp);   if (bap->slotbmp != -1L)     {      ap->slotbmp = BitMapPointer(bap->slotbmp);      IncrementBitMapCount(ap->slotbmp);     }   else     ap->slotbmp = NULL;   IncrementBitMapCount(ap->classbmp);   ap->patternNode = ObjectPatternPointer(bap->patternNode);   ap->nxtInGroup = ObjectAlphaPointer(bap->nxtInGroup);   ap->nxtTerminal = ObjectAlphaPointer(bap->nxtTerminal);   ap->bsaveID = 0L;  }  /***************************************************  NAME         : UpdatePattern  DESCRIPTION  : Updates all the pointers for a                 pattern node based on the binary                 image indices  INPUTS       : 1) A pointer to the binary                    image pattern node buffer                 2) The index of the actual                    pattern node in the array  RETURNS      : Nothing useful  SIDE EFFECTS : Pattern node updated  NOTES        : None ***************************************************/static VOID UpdatePattern(buf,obji)  VOID *buf;  long obji;  {   BSAVE_OBJECT_PATTERN_NODE *bop;   OBJECT_PATTERN_NODE *op;      bop = (BSAVE_OBJECT_PATTERN_NODE *) buf;   op = (OBJECT_PATTERN_NODE *) &PatternArray[obji];      op->blocked = CLIPS_FALSE;   op->multifieldNode = bop->multifieldNode;   op->whichField = bop->whichField;   op->leaveFields = bop->leaveFields;   op->endSlot = bop->endSlot;   op->matchTimeTag = 0L;   op->slotNameID = bop->slotNameID;   op->networkTest = HashedExpressionPointer(bop->networkTest);   op->nextLevel = ObjectPatternPointer(bop->nextLevel);   op->lastLevel = ObjectPatternPointer(bop->lastLevel);   op->leftNode = ObjectPatternPointer(bop->leftNode);   op->rightNode = ObjectPatternPointer(bop->rightNode);   op->alphaNode = ObjectAlphaPointer(bop->alphaNode);   op->bsaveID = 0L;  }  /***************************************************  NAME         : ClearBloadObjectPatterns  DESCRIPTION  : Releases all emmory associated                 with binary image object patterns  INPUTS       : None  RETURNS      : Nothing useful  SIDE EFFECTS : Memory released and global                 network pointers set to NULL  NOTES        : None ***************************************************/static VOID ClearBloadObjectPatterns()  {   UNLN space;   register long i;      /* ================================================      All instances have been deleted by this point      so we don't need to worry about clearing partial      matches      ================================================ */   for (i = 0L ; i < AlphaNodeCount ; i++)     {      DecrementBitMapCount(AlphaArray[i].classbmp);      if (AlphaArray[i].slotbmp != NULL)        DecrementBitMapCount(AlphaArray[i].slotbmp);     }   if (AlphaNodeCount != 0L)     {      space = (UNLN) (AlphaNodeCount * sizeof(OBJECT_ALPHA_NODE));      genlongfree((VOID *) AlphaArray,space);      AlphaArray = NULL;      space = (UNLN) (PatternNodeCount * sizeof(OBJECT_PATTERN_NODE));      genlongfree((VOID *) PatternArray,space);      PatternArray = NULL;     }        SetObjectNetworkTerminalPointer(NULL);   SetObjectNetworkPointer(NULL);#if BLOAD_ONLY   ResetObjectMatchTimeTags();#endif  }#endif/***************************************************  NAME         :   DESCRIPTION  :   INPUTS       :   RETURNS      :   SIDE EFFECTS :   NOTES        :  ***************************************************/

⌨️ 快捷键说明

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