示例#1
0
            internal void BackwardTraversal(IEnumerable <long> targetTransitionTargets, Action <long> actionOnResultingTransitionTarget, Func <long, bool> transitionTargetsToIgnore)
            {
                var transitionTargetNodes = targetTransitionTargets.Select(TransitionTargetToNodeIndex);

                Func <long, bool> ignoreNodeFunc =
                    node =>
                {
                    var transitionTarget = TryGetTransitionTargetIndex(node);
                    if (transitionTarget == null)
                    {
                        return(false);
                    }
                    return(transitionTargetsToIgnore(transitionTarget.Value));
                };

                var ancestors = _baseGraph.GetAncestors(transitionTargetNodes, ignoreNodeFunc);

                foreach (var ancestor in ancestors)
                {
                    var transitionTargetOfAncestor = TryGetTransitionTargetIndex(ancestor.Key);
                    if (transitionTargetOfAncestor != null)
                    {
                        actionOnResultingTransitionTarget(transitionTargetOfAncestor.Value);
                    }
                }
            }