/*************************************************** 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( void *theEnv, EXEC_STATUS) { size_t space; register long i; for (i = 0; i < ObjectReteBinaryData(theEnv,execStatus)->PatternNodeCount; i++) { if ((ObjectReteBinaryData(theEnv,execStatus)->PatternArray[i].lastLevel != NULL) && (ObjectReteBinaryData(theEnv,execStatus)->PatternArray[i].lastLevel->selector)) { RemoveHashedPatternNode(theEnv,execStatus,ObjectReteBinaryData(theEnv,execStatus)->PatternArray[i].lastLevel, &ObjectReteBinaryData(theEnv,execStatus)->PatternArray[i], ObjectReteBinaryData(theEnv,execStatus)->PatternArray[i].networkTest->type, ObjectReteBinaryData(theEnv,execStatus)->PatternArray[i].networkTest->value); } } /* ================================================ All instances have been deleted by this point so we don't need to worry about clearing partial matches ================================================ */ for (i = 0L ; i < ObjectReteBinaryData(theEnv,execStatus)->AlphaNodeCount ; i++) { DecrementBitMapCount(theEnv,execStatus,ObjectReteBinaryData(theEnv,execStatus)->AlphaArray[i].classbmp); if (ObjectReteBinaryData(theEnv,execStatus)->AlphaArray[i].slotbmp != NULL) DecrementBitMapCount(theEnv,execStatus,ObjectReteBinaryData(theEnv,execStatus)->AlphaArray[i].slotbmp); } if (ObjectReteBinaryData(theEnv,execStatus)->AlphaNodeCount != 0L) { space = (ObjectReteBinaryData(theEnv,execStatus)->AlphaNodeCount * sizeof(OBJECT_ALPHA_NODE)); genfree(theEnv,execStatus,(void *) ObjectReteBinaryData(theEnv,execStatus)->AlphaArray,space); ObjectReteBinaryData(theEnv,execStatus)->AlphaArray = NULL; ObjectReteBinaryData(theEnv,execStatus)->AlphaNodeCount = 0; space = (ObjectReteBinaryData(theEnv,execStatus)->PatternNodeCount * sizeof(OBJECT_PATTERN_NODE)); genfree(theEnv,execStatus,(void *) ObjectReteBinaryData(theEnv,execStatus)->PatternArray,space); ObjectReteBinaryData(theEnv,execStatus)->PatternArray = NULL; ObjectReteBinaryData(theEnv,execStatus)->PatternNodeCount = 0; } SetObjectNetworkTerminalPointer(theEnv,execStatus,NULL); SetObjectNetworkPointer(theEnv,execStatus,NULL); #if BLOAD_ONLY ResetObjectMatchTimeTags(theEnv,execStatus); #endif }
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; }