예제 #1
0
 /*
  * 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;
     }
 }
예제 #2
0
        /*
         *  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;
            }
        }