Ejemplo n.º 1
0
        private List <GraphElement> BuildNextGraphLevel(List <GraphElement> GraphElementsLevel, List <GraphElement> allElements)
        {
            ObjectEntry         incomingElement;
            GraphElement        prev;
            GraphElement        next;
            List <GraphElement> nextLevelElements = new List <GraphElement>();

            int[]         indexes;
            int           elementIndex         = 0;
            int           incomingElementIndex = 0;
            HashSet <int> indexHolder          = null;

            GraphElement[] GraphElementsArray = new GraphElement[GraphElementsLevel.Count];
            GraphElementsLevel.CopyTo(GraphElementsArray);
            for (int i = 0; i < RouteElements.Count; i++)
            {
                indexHolder = ElementIncomingElementIndexes[i];
                if (indexHolder != null)
                {
                    indexes = new int[indexHolder.Count];
                    ElementIncomingElementIndexes[i].CopyTo(indexes, 0);

                    for (incomingElementIndex = 0; incomingElementIndex < indexes.Length; incomingElementIndex++)
                    {
                        elementIndex    = indexes[incomingElementIndex];
                        incomingElement = RouteElements[elementIndex];
                        for (int j = 0; j < GraphElementsArray.Length; j++)
                        {
                            prev = (GraphElement)GraphElementsArray[j];
                            if (incomingElement.name.Equals(prev.CurrentElement.name))
                            {
                                next = new GraphElement(RouteElements[i], prev.graphLength - 1, this.ObjectAttributeTypesById);
                                if (allElements.Contains(next))
                                {
                                    next = allElements[allElements.IndexOf(next)];
                                }
                                if (!next.IncomingElements.Contains(prev))
                                {
                                    next.AddIncomingElement(prev);
                                }

                                if (!prev.OutgoingElements.Contains(next))
                                {
                                    prev.AddOutgoingElement(next);
                                }
                                nextLevelElements.Add(next);
                            }
                        }
                    }
                }
            }

            if (nextLevelElements.Count == 0)
            {
                return(null);
            }
            else
            {
                return(nextLevelElements);
            }
        }