Beispiel #1
0
        /// <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);
 }