globle void RemovePMDependencies( void *theEnv, struct partialMatch *theBinds) { struct dependency *fdPtr, *nextPtr, *theList; struct patternEntity *theEntity; fdPtr = (struct dependency *) theBinds->binds[theBinds->bcount + theBinds->activationf].gm.theValue; while (fdPtr != NULL) { nextPtr = fdPtr->next; theEntity = (struct patternEntity *) fdPtr->dPtr; theList = (struct dependency *) theEntity->dependents; theList = DetachAssociatedDependencies(theEnv,theList,(void *) theBinds); theEntity->dependents = (void *) theList; rtn_struct(theEnv,dependency,fdPtr); fdPtr = nextPtr; } theBinds->binds[theBinds->bcount + theBinds->activationf].gm.theValue = NULL; }
void RemovePMDependencies( Environment *theEnv, struct partialMatch *theBinds) { struct dependency *fdPtr, *nextPtr, *theList; struct patternEntity *theEntity; fdPtr = (struct dependency *) theBinds->dependents; while (fdPtr != NULL) { nextPtr = fdPtr->next; theEntity = (struct patternEntity *) fdPtr->dPtr; theList = (struct dependency *) theEntity->dependents; theList = DetachAssociatedDependencies(theEnv,theList,theBinds); theEntity->dependents = theList; rtn_struct(theEnv,dependency,fdPtr); fdPtr = nextPtr; } theBinds->dependents = NULL; }
globle void RemoveEntityDependencies( void *theEnv, struct patternEntity *theEntity) { struct dependency *fdPtr, *nextPtr, *theList; struct partialMatch *theBinds; /*===============================*/ /* Get the list of dependencies. */ /*===============================*/ fdPtr = (struct dependency *) theEntity->dependents; /*========================================*/ /* Loop through each of the dependencies. */ /*========================================*/ while (fdPtr != NULL) { /*===============================*/ /* Remember the next dependency. */ /*===============================*/ nextPtr = fdPtr->next; /*================================================================*/ /* Remove the link between the data entity and the partial match. */ /*================================================================*/ theBinds = (struct partialMatch *) fdPtr->dPtr; theList = (struct dependency *) theBinds->binds[theBinds->bcount + theBinds->activationf].gm.theValue; theList = DetachAssociatedDependencies(theEnv,theList,(void *) theEntity); theBinds->binds[theBinds->bcount + theBinds->activationf].gm.theValue = (void *) theList; /*========================*/ /* Return the dependency. */ /*========================*/ rtn_struct(theEnv,dependency,fdPtr); /*=================================*/ /* Move on to the next dependency. */ /*=================================*/ fdPtr = nextPtr; } /*=====================================================*/ /* Set the dependency list of the data entity to NULL. */ /*=====================================================*/ theEntity->dependents = NULL; }
globle void RemoveLogicalSupport( void *theEnv, struct partialMatch *theBinds) { struct dependency *dlPtr, *tempPtr, *theList; struct patternEntity *theEntity; /*========================================*/ /* If the partial match has no associated */ /* dependencies, then return. */ /*========================================*/ if (theBinds->dependentsf == FALSE) return; /*=======================================*/ /* Loop through each of the dependencies */ /* attached to the partial match. */ /*=======================================*/ dlPtr = (struct dependency *) theBinds->binds[theBinds->bcount + theBinds->activationf].gm.theValue; while (dlPtr != NULL) { /*===============================*/ /* Remember the next dependency. */ /*===============================*/ tempPtr = dlPtr->next; /*==========================================================*/ /* Determine the data entity associated with the dependency */ /* structure and delete its dependency references to this */ /* partial match. */ /*==========================================================*/ theEntity = (struct patternEntity *) dlPtr->dPtr; theList = (struct dependency *) theEntity->dependents; theList = DetachAssociatedDependencies(theEnv,theList,(void *) theBinds); theEntity->dependents = (void *) theList; /*==============================================================*/ /* If the data entity has lost all of its logical support, then */ /* add the dependency structure from the partial match to the */ /* list of unsupported data entities to be deleted. Otherwise, */ /* just delete the dependency structure. */ /*==============================================================*/ if (theEntity->dependents == NULL) { (*theEntity->theInfo->base.incrementBusyCount)(theEnv,theEntity); dlPtr->next = EngineData(theEnv)->UnsupportedDataEntities; EngineData(theEnv)->UnsupportedDataEntities = dlPtr; } else { rtn_struct(theEnv,dependency,dlPtr); } /*==================================*/ /* Move on to the next dependency. */ /*==================================*/ dlPtr = tempPtr; } /*=====================================*/ /* The partial match no longer has any */ /* dependencies associated with it. */ /*=====================================*/ theBinds->binds[theBinds->bcount + theBinds->activationf].gm.theValue = NULL; }