/* * Alter NavigationNodeLinks by removing the NavigationLinks following the rule dictated by p_navigationLinkAlterationMethod (see ENavigationLinkRemovalMethod for more). */ public static void removeNavigationLinks(NavigationGraph p_navigationGraph, ENavigationLinkAlterationMethod p_navigationLinkAlterationMethod, NavigationNode p_involvedNode) { switch (p_navigationLinkAlterationMethod) { case ENavigationLinkAlterationMethod.TO: // We have to : // * gets NavigationLinks going to the p_involvedNode // * clear NavigationLinks coming from NavigationNodes that goes to the p_involvedNode // * clear NavigationLinks going to the p_involvedNode List <NavigationLink> l_nodesToList = p_navigationGraph.NodeLinksIndexedByEndNode[p_involvedNode]; for (int i = 0; i < l_nodesToList.Count; i++) { NavigationLink l_linkTo = l_nodesToList[i]; List <NavigationLink> l_targetList = p_navigationGraph.NodeLinksIndexedByStartNode[l_linkTo.StartNode]; l_targetList.Remove(l_linkTo); } p_navigationGraph.NodeLinksIndexedByEndNode[p_involvedNode].Clear(); break; } }
/* * Alter NavigationNodeLinks by restoring NavigationLinks following the rule dictated by p_navigationLinkAlterationMethod (see ENavigationLinkRemovalMethod for more). * - NavigationNodeLinks are restored from the NavigationGraphSnapshot. */ public static void restoreNavigationLinksFromSnapshot(NavigationGraph p_navigationGraph, ENavigationLinkAlterationMethod p_navigationLinkAlterationMethod, NavigationNode p_involvedNode) { switch (p_navigationLinkAlterationMethod) { case ENavigationLinkAlterationMethod.TO: // We have to : // * copy NavigationLinks going to the p_involvedNode (retrieved from snapshot) // * add NavigationLinks coming from NavigationNodes that goes to the p_involvedNode List <NavigationLink> l_linksThatPointsTowardsInvolvedNode = p_navigationGraph.NodeLinksIndexedByEndNode[p_involvedNode]; l_linksThatPointsTowardsInvolvedNode.Clear(); l_linksThatPointsTowardsInvolvedNode.AddRange(p_navigationGraph.NavigationGraphSnapshot.NodeLinksIndexedByEndNode[p_involvedNode]); for (int i = 0; i < l_linksThatPointsTowardsInvolvedNode.Count; i++) { NavigationLink l_linkTo = l_linksThatPointsTowardsInvolvedNode[i]; var l_linksFrom_snapshot_enumerator = p_navigationGraph.NavigationGraphSnapshot.NodeLinksIndexedByStartNode[l_linkTo.StartNode].GetEnumerator(); while (l_linksFrom_snapshot_enumerator.MoveNext()) { NavigationLink l_referenceFromLink = l_linksFrom_snapshot_enumerator.Current; if (l_referenceFromLink.EndNode == p_involvedNode) { p_navigationGraph.NodeLinksIndexedByStartNode[l_referenceFromLink.StartNode].Add(l_referenceFromLink); } } } break; } }