< Summary

Class:Itinero.Network.Search.VertexEdgeEnumerator
Assembly:Itinero
File(s):/home/runner/work/routing2/routing2/src/Itinero/Network/Search/VertexEdgeEnumerator.cs
Covered lines:41
Uncovered lines:31
Coverable lines:72
Total lines:137
Line coverage:56.9% (41 of 72)
Covered branches:14
Total branches:18
Branch coverage:77.7% (14 of 18)
Tag:224_14471318300

Metrics

MethodBranch coverage Cyclomatic complexity Line coverage
.ctor(...)100%1100%
Reset()100%10%
MoveNext()77.77%1884.84%
get_RoutingNetworkEdgeEnumerator()100%1100%
Dispose()100%10%
get_Network()100%10%
get_Forward()100%1100%
get_Tail()100%10%
get_TailLocation()100%1100%
get_Head()100%10%
get_HeadLocation()100%1100%
get_EdgeId()100%1100%
get_Shape()100%1100%
get_Attributes()100%10%
get_EdgeTypeId()100%10%
get_Length()100%10%
get_HeadOrder()100%10%
get_TailOrder()100%10%
GetTurnCostToTail(...)100%10%
GetTurnCostFromTail(...)100%10%
GetTurnCostToHead(...)100%10%
GetTurnCostFromHead(...)100%10%

File(s)

/home/runner/work/routing2/routing2/src/Itinero/Network/Search/VertexEdgeEnumerator.cs

#LineLine coverage
 1using System.Collections.Generic;
 2using Itinero.Network;
 3using Itinero.Network.Enumerators.Edges;
 4
 5namespace Itinero.Network.Search;
 6
 7internal class VertexEdgeEnumerator : IEdgeEnumerator<RoutingNetwork>
 8{
 9    private readonly IEnumerator<VertexId> _vertexEnumerator;
 10
 2911    public VertexEdgeEnumerator(RoutingNetwork graph, IEnumerable<VertexId> vertices)
 2912    {
 2913        this.Network = graph;
 2914        _vertexEnumerator = vertices.GetEnumerator();
 2915        this.RoutingNetworkEdgeEnumerator = graph.GetEdgeEnumerator();
 2916    }
 17
 2918    private bool _firstEdge = false;
 19
 20    public void Reset()
 021    {
 022        _firstEdge = false;
 023        this.RoutingNetworkEdgeEnumerator.Reset();
 024        _vertexEnumerator.Reset();
 025    }
 26
 27    public bool MoveNext()
 7228    {
 7229        if (!_firstEdge)
 2930        {
 3031            while (_vertexEnumerator.MoveNext())
 2932            {
 2933                while (this.RoutingNetworkEdgeEnumerator.MoveTo(_vertexEnumerator.Current))
 2934                {
 2935                    if (!this.RoutingNetworkEdgeEnumerator.MoveNext())
 136                    {
 137                        break;
 38                    }
 39
 2840                    _firstEdge = true;
 2841                    return true;
 42                }
 143            }
 44
 145            return false;
 46        }
 47
 4348        while (true)
 4349        {
 4350            if (this.RoutingNetworkEdgeEnumerator.MoveNext())
 251            {
 252                return true;
 53            }
 54
 4155            if (!_vertexEnumerator.MoveNext())
 856            {
 857                return false;
 58            }
 59
 3360            while (this.RoutingNetworkEdgeEnumerator.MoveTo(_vertexEnumerator.Current))
 3361            {
 3362                if (this.RoutingNetworkEdgeEnumerator.MoveNext())
 3363                {
 3364                    return true;
 65                }
 66
 067                if (!_vertexEnumerator.MoveNext())
 068                {
 069                    return false;
 70                }
 071            }
 072        }
 7273    }
 74
 38975    internal RoutingNetworkEdgeEnumerator RoutingNetworkEdgeEnumerator { get; }
 76
 077    public void Dispose() { }
 78
 079    public RoutingNetwork Network { get; }
 80
 3581    public bool Forward => this.RoutingNetworkEdgeEnumerator.Forward;
 082    public VertexId Tail => this.RoutingNetworkEdgeEnumerator.Tail;
 3683    public (double longitude, double latitude, float? e) TailLocation => this.RoutingNetworkEdgeEnumerator.TailLocation;
 084    public VertexId Head => this.RoutingNetworkEdgeEnumerator.Head;
 3685    public (double longitude, double latitude, float? e) HeadLocation => this.RoutingNetworkEdgeEnumerator.HeadLocation;
 7986    public EdgeId EdgeId => this.RoutingNetworkEdgeEnumerator.EdgeId;
 3687    public IEnumerable<(double longitude, double latitude, float? e)> Shape => this.RoutingNetworkEdgeEnumerator.Shape;
 088    public IEnumerable<(string key, string value)> Attributes => this.RoutingNetworkEdgeEnumerator.Attributes;
 089    public uint? EdgeTypeId => this.RoutingNetworkEdgeEnumerator.EdgeTypeId;
 090    public uint? Length => this.RoutingNetworkEdgeEnumerator.Length;
 091    public byte? HeadOrder => this.RoutingNetworkEdgeEnumerator.HeadOrder;
 092    public byte? TailOrder => this.RoutingNetworkEdgeEnumerator.TailOrder;
 93
 94    /// <summary>
 95    /// Gets the turn cost at the tail turn (source -> [tail -> head]).
 96    /// </summary>
 97    /// <param name="sourceOrder">The order of the source edge.</param>
 98    /// <returns>The turn costs if any.</returns>
 99    public IEnumerable<(uint turnCostType, IEnumerable<(string key, string value)> attributes, uint cost, IEnumerable<Ed
 100        byte sourceOrder)
 0101    {
 0102        return this.RoutingNetworkEdgeEnumerator.GetTurnCostToTail(sourceOrder);
 0103    }
 104
 105    /// <summary>
 106    /// Gets the turn cost at the tail turn ([head -> tail] -> target).
 107    /// </summary>
 108    /// <param name="targetOrder">The order of the target edge.</param>
 109    /// <returns>The turn costs if any.</returns>
 110    public IEnumerable<(uint turnCostType, IEnumerable<(string key, string value)> attributes, uint cost, IEnumerable<Ed
 111        byte targetOrder)
 0112    {
 0113        return this.RoutingNetworkEdgeEnumerator.GetTurnCostFromTail(targetOrder);
 0114    }
 115
 116    /// <summary>
 117    /// Gets the turn cost at the tail turn (source -> [head -> tail]).
 118    /// </summary>
 119    /// <param name="sourceOrder">The order of the source edge.</param>
 120    /// <returns>The turn costs if any.</returns>
 121    public IEnumerable<(uint turnCostType, IEnumerable<(string key, string value)> attributes, uint cost, IEnumerable<Ed
 122        byte sourceOrder)
 0123    {
 0124        return this.RoutingNetworkEdgeEnumerator.GetTurnCostToHead(sourceOrder);
 0125    }
 126
 127    /// <summary>
 128    /// Gets the turn cost at the tail turn ([tail -> head] -> target).
 129    /// </summary>
 130    /// <param name="targetOrder">The order of the target edge.</param>
 131    /// <returns>The turn costs if any.</returns>
 132    public IEnumerable<(uint turnCostType, IEnumerable<(string key, string value)> attributes, uint cost, IEnumerable<Ed
 133        byte targetOrder)
 0134    {
 0135        return this.RoutingNetworkEdgeEnumerator.GetTurnCostFromHead(targetOrder);
 0136    }
 137}