< Summary

Class:Itinero.Routing.Flavours.Dijkstra.PathTreeExtensions
Assembly:Itinero
File(s):/home/runner/work/routing2/routing2/src/Itinero/Routing/Flavours/Dijkstra/PathTreeExtensions.cs
Covered lines:24
Uncovered lines:11
Coverable lines:35
Total lines:96
Line coverage:68.5% (24 of 35)
Covered branches:7
Total branches:10
Branch coverage:70% (7 of 10)
Tag:224_14471318300

Metrics

MethodBranch coverage Cyclomatic complexity Line coverage
AddVisit(...)100%4100%
AddVisit(...)100%1100%
GetVisit(...)100%2100%
GetPreviousEdges()50%262.5%
GetPathDebug()0%20%

File(s)

/home/runner/work/routing2/routing2/src/Itinero/Routing/Flavours/Dijkstra/PathTreeExtensions.cs

#LineLine coverage
 1using System.Collections.Generic;
 2using Itinero.Network;
 3using Itinero.Network.Enumerators.Edges;
 4using Itinero.Routing.DataStructures;
 5
 6namespace Itinero.Routing.Flavours.Dijkstra;
 7
 8internal static class PathTreeExtensions
 9{
 10    // TODO: this can all be represented much more compact.
 11
 12    /// <summary>
 13    /// Adds a new visit the path tree.
 14    /// </summary>
 15    /// <param name="tree">The tree.</param>
 16    /// <param name="vertex">The vertex.</param>
 17    /// <param name="edge">The edge.</param>
 18    /// <param name="forward">The edge direction.</param>
 19    /// <param name="head">The head index.</param>
 20    /// <param name="previousPointer">The pointer to the previous entry.</param>
 21    /// <returns>A pointer to the visit.</returns>
 22    public static uint AddVisit(this PathTree tree, VertexId vertex, EdgeId edge, bool forward, byte? head,
 23        uint previousPointer)
 9524    {
 9525        var data0 = vertex.TileId;
 9526        var data1 = vertex.LocalId;
 9527        var data2 = edge.TileId;
 9528        var data3 = edge.LocalId;
 9529        var data4 = head ?? uint.MaxValue;
 9530        var data5 = previousPointer;
 9531        var data6 = forward ? 1U : 0;
 32
 9533        return tree.Add(data0, data1, data2, data3, data4, data5, data6);
 9534    }
 35
 36    /// <summary>
 37    /// Adds a new visit to the path tree.
 38    /// </summary>
 39    /// <param name="tree">The tree.</param>
 40    /// <param name="enumerator">The current edge.</param>
 41    /// <param name="previousPointer">The pointer to the previous entry.</param>
 42    /// <returns>A pointer to the visit.</returns>
 43    public static uint AddVisit(this PathTree tree, RoutingNetworkEdgeEnumerator enumerator, uint previousPointer)
 9544    {
 9545        return tree.AddVisit(enumerator.Head, enumerator.EdgeId, enumerator.Forward, enumerator.HeadOrder,
 9546            previousPointer);
 9547    }
 48
 49    /// <summary>
 50    /// Gets the visit at the given location.
 51    /// </summary>
 52    /// <param name="tree">The tree.</param>
 53    /// <param name="pointer">The pointer.</param>
 54    /// <returns>The visit.</returns>
 55    public static (VertexId vertex, EdgeId edge, bool forward, byte? head, uint previousPointer) GetVisit(this PathTree 
 56        uint pointer)
 17657    {
 17658        tree.Get(pointer, out var data0, out var data1, out var data2, out var data3, out var data4, out var data5, out 
 59
 17660        var head = data4 == uint.MaxValue ? null : (byte?)data4;
 61
 17662        return (new VertexId(data0, data1), new EdgeId(data2, data3), data6 == 1U, head, data5);
 17663    }
 64
 65    /// <summary>
 66    /// Enumerates the edges backwards from the visit at the given pointer.
 67    /// </summary>
 68    /// <param name="tree">The tree.</param>
 69    /// <param name="pointer">The pointer.</param>
 70    /// <returns>The edges and their turn.</returns>
 71    public static IEnumerable<(EdgeId edge, byte? turn)> GetPreviousEdges(this PathTree tree, uint pointer)
 1772    {
 1773        while (pointer != uint.MaxValue)
 1774        {
 1775            var (_, edge, _, head, next) = tree.GetVisit(pointer);
 76
 1777            yield return (edge, head);
 78
 079            pointer = next;
 080        }
 081    }
 82
 83#if DEBUG
 84    public static IEnumerable<(EdgeId edge, bool forward, byte? turn)> GetPathDebug(this PathTree tree, uint pointer)
 085    {
 086        while (pointer != uint.MaxValue)
 087        {
 088            var (_, edge, forward, head, next) = tree.GetVisit(pointer);
 89
 090            yield return (edge, forward, head);
 91
 092            pointer = next;
 093        }
 094    }
 95#endif
 96}