/// <summary> /// Converts the given edge enumerator to an array of key-value pairs. /// </summary> /// <typeparam name="TEdgeData"></typeparam> /// <param name="enumerator"></param> /// <returns></returns> public static KeyValuePair <uint, TEdgeData>[] ToKeyValuePairs <TEdgeData>(this EdgeEnumerator <TEdgeData> enumerator) where TEdgeData : IGraphEdgeData { enumerator.Reset(); var pairs = new List <KeyValuePair <uint, TEdgeData> >(); while (enumerator.MoveNext()) { pairs.Add(new KeyValuePair <uint, TEdgeData>(enumerator.Neighbour, enumerator.EdgeData)); } return(pairs.ToArray()); }
/// <summary> /// Returns all arcs starting at the given vertex. /// </summary> /// <param name="vertex"></param> /// <returns></returns> public override EdgeEnumerator <TEdgeData> GetEdges(uint vertex) { if (_nextVertexId <= vertex) { throw new ArgumentOutOfRangeException("vertex", "vertex is not part of this graph."); } var enumerator = new EdgeEnumerator(this); enumerator.MoveTo(vertex); return(enumerator); }
/// <summary> /// Converts the given edge enumerator to an array of key-value pairs. /// </summary> /// <typeparam name="TEdgeData"></typeparam> /// <param name="enumerator"></param> /// <returns></returns> public static KeyValuePair <uint, KeyValuePair <TEdgeData, ICoordinateCollection> >[] ToKeyValuePairsAndShapes <TEdgeData>(this EdgeEnumerator <TEdgeData> enumerator) where TEdgeData : IGraphEdgeData { enumerator.Reset(); var pairs = new List <KeyValuePair <uint, KeyValuePair <TEdgeData, ICoordinateCollection> > >(); while (enumerator.MoveNext()) { pairs.Add(new KeyValuePair <uint, KeyValuePair <TEdgeData, ICoordinateCollection> >(enumerator.Neighbour, new KeyValuePair <TEdgeData, ICoordinateCollection>(enumerator.EdgeData, enumerator.Intermediates))); } return(pairs.ToArray()); }
/// <summary> /// Creates a new edge keeping the current state of the given enumerator. /// </summary> /// <param name="enumerator"></param> public Edge(EdgeEnumerator <TEdgeData> enumerator) { this.Neighbour = enumerator.Neighbour; this.EdgeData = enumerator.EdgeData; this.Intermediates = enumerator.Intermediates; }