< Summary

Class:Itinero.Network.Search.VertexEdgeEnumerator
Assembly:Itinero
File(s):/home/runner/work/routing2/routing2/src/Itinero/Network/Search/VertexEdgeEnumerator.cs
Covered lines:30
Uncovered lines:42
Coverable lines:72
Total lines:137
Line coverage:41.6% (30 of 72)
Covered branches:10
Total branches:18
Branch coverage:55.5% (10 of 18)
Tag:263_26948838820

Metrics

MethodBranch coverage Cyclomatic complexity Line coverage
.ctor(...)100%1100%
Reset()100%10%
MoveNext()55.55%1863.63%
get_RoutingNetworkEdgeEnumerator()100%1100%
Dispose()100%10%
get_Network()100%10%
get_Forward()100%10%
get_Tail()100%10%
get_TailLocation()100%10%
get_Head()100%10%
get_HeadLocation()100%10%
get_EdgeId()100%1100%
get_Shape()100%10%
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
 211    public VertexEdgeEnumerator(RoutingNetwork graph, IEnumerable<VertexId> vertices)
 212    {
 213        this.Network = graph;
 214        _vertexEnumerator = vertices.GetEnumerator();
 215        this.RoutingNetworkEdgeEnumerator = graph.GetEdgeEnumerator();
 216    }
 17
 218    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()
 328    {
 329        if (!_firstEdge)
 230        {
 331            while (_vertexEnumerator.MoveNext())
 232            {
 233                while (this.RoutingNetworkEdgeEnumerator.MoveTo(_vertexEnumerator.Current))
 234                {
 235                    if (!this.RoutingNetworkEdgeEnumerator.MoveNext())
 136                    {
 137                        break;
 38                    }
 39
 140                    _firstEdge = true;
 141                    return true;
 42                }
 143            }
 44
 145            return false;
 46        }
 47
 148        while (true)
 149        {
 150            if (this.RoutingNetworkEdgeEnumerator.MoveNext())
 051            {
 052                return true;
 53            }
 54
 155            if (!_vertexEnumerator.MoveNext())
 156            {
 157                return false;
 58            }
 59
 060            while (this.RoutingNetworkEdgeEnumerator.MoveTo(_vertexEnumerator.Current))
 061            {
 062                if (this.RoutingNetworkEdgeEnumerator.MoveNext())
 063                {
 064                    return true;
 65                }
 66
 067                if (!_vertexEnumerator.MoveNext())
 068                {
 069                    return false;
 70                }
 071            }
 072        }
 373    }
 74
 675    internal RoutingNetworkEdgeEnumerator RoutingNetworkEdgeEnumerator { get; }
 76
 077    public void Dispose() { }
 78
 079    public RoutingNetwork Network { get; }
 80
 081    public bool Forward => this.RoutingNetworkEdgeEnumerator.Forward;
 082    public VertexId Tail => this.RoutingNetworkEdgeEnumerator.Tail;
 083    public (double longitude, double latitude, float? e) TailLocation => this.RoutingNetworkEdgeEnumerator.TailLocation;
 084    public VertexId Head => this.RoutingNetworkEdgeEnumerator.Head;
 085    public (double longitude, double latitude, float? e) HeadLocation => this.RoutingNetworkEdgeEnumerator.HeadLocation;
 186    public EdgeId EdgeId => this.RoutingNetworkEdgeEnumerator.EdgeId;
 087    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}