/// <summary> /// Removes all transitions that are no longer activation minimal due to the current transition. /// </summary> private void CleanupTransitions(FaultSet activatedFaults, int faultIndex, long stateHash) { var current = faultIndex; var nextPointer = &_lookup[stateHash]; while (current != -1) { var faultSet = &_faults[current]; // Remove the fault set and the corresponding transition if it is a proper subset of the activated faults if (activatedFaults.IsSubsetOf(faultSet->Transition->ActivatedFaults) && activatedFaults != faultSet->Transition->ActivatedFaults) { faultSet->Transition->Flags = TransitionFlags.RemoveValid(faultSet->Transition->Flags); *nextPointer = faultSet->NextSet; } if (nextPointer != &_lookup[stateHash]) { nextPointer = &faultSet->NextSet; } current = faultSet->NextSet; } }
private void MergeTransitions(LtmcTransition *mergeInCandidate, LtmcTransition *toMergeCandidate) { mergeInCandidate->Probability += toMergeCandidate->Probability; toMergeCandidate->Flags = TransitionFlags.RemoveValid(toMergeCandidate->Flags); }