< Summary

Class:Itinero.Routing.IRouterManyToOneExtensions
Assembly:Itinero
File(s):/home/runner/work/routing2/routing2/src/Itinero/Routing/IRouterManyToOneExtensions.cs
Covered lines:0
Uncovered lines:36
Coverable lines:36
Total lines:89
Line coverage:0% (0 of 36)
Covered branches:0
Total branches:12
Branch coverage:0% (0 of 12)
Tag:224_14471318300

Metrics

MethodBranch coverage Cyclomatic complexity Line coverage
Paths()0%120%
Calculate()100%10%
Calculate(...)100%10%

File(s)

/home/runner/work/routing2/routing2/src/Itinero/Routing/IRouterManyToOneExtensions.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using System.Linq;
 4using System.Threading;
 5using System.Threading.Tasks;
 6using Itinero.Routes;
 7using Itinero.Routes.Builders;
 8using Itinero.Routes.Paths;
 9
 10namespace Itinero.Routing;
 11
 12/// <summary>
 13/// Many to one extensions.
 14/// </summary>
 15public static class IRouterManyToOneExtensions
 16{
 17    /// <summary>
 18    /// Calculates the paths.
 19    /// </summary>
 20    /// <param name="routerOneToMany">The router.</param>
 21    /// <param name="cancellationToken"></param>
 22    /// <returns>The paths.</returns>
 23    public static async Task<IReadOnlyList<Result<Path>>> Paths(this IRouterManyToOne routerOneToMany, CancellationToken
 024    {
 025        var sources = routerOneToMany.Sources;
 026        var target = routerOneToMany.Target;
 27
 028        if (target.direction.HasValue ||
 029            !sources.TryToUndirected(out var sourcesUndirected))
 030        {
 031            var routes = await routerOneToMany.CalculateAsync(
 032                sources, new[] { target });
 033            if (routes == null)
 034            {
 035                throw new Exception("Could not calculate routes.");
 36            }
 37
 038            var manyToOne = new Result<Path>[sources.Count];
 039            for (var s = 0; s < manyToOne.Length; s++)
 040            {
 041                manyToOne[s] = routes[s][0];
 042            }
 43
 044            return manyToOne;
 45        }
 46        else
 047        {
 048            var routes = await routerOneToMany.CalculateAsync(sourcesUndirected, new[] { target.sp }, cancellationToken)
 049            if (routes == null)
 050            {
 051                throw new Exception("Could not calculate routes.");
 52            }
 53
 054            var manyToOne = new Result<Path>[sources.Count];
 055            for (var s = 0; s < manyToOne.Length; s++)
 056            {
 057                manyToOne[s] = routes[s][0];
 058            }
 59
 060            return manyToOne;
 61        }
 062    }
 63
 64    /// <summary>
 65    /// Calculates the routes.
 66    /// </summary>
 67    /// <param name="routerManyToOne">The router.</param>
 68    /// <param name="cancellationToken"></param>
 69    /// <returns>The routes.</returns>
 70    public static async Task<IReadOnlyList<Result<Route>>> Calculate(this IRouterManyToOne routerManyToOne, Cancellation
 071    {
 072        return (await routerManyToOne.Paths(cancellationToken)).Select(x => routerManyToOne.Settings.RouteBuilder.Build(
 073            routerManyToOne.Settings.Profile, x)).ToArray();
 074    }
 75
 76    /// <summary>
 77    /// Calculates the weights.
 78    /// </summary>
 79    /// <param name="routerManyToOne">The router.</param>
 80    /// <returns>The weights.</returns>
 81    public static Task<Result<IReadOnlyList<double?>>> Calculate(this IRouterWeights<IRouterManyToOne> routerManyToOne)
 082    {
 083        return Task.FromResult(new Result<IReadOnlyList<double?>>("Not implemented"));
 84        //
 85        // var profileHandler = routerManyToOne.Router.Network.GetCostFunctionFor(
 86        //     routerManyToOne.Router.Settings.Profile);
 87        // return routerManyToOne.Router.Paths().Select(x => x.Weight(profileHandler.GetForwardWeight)).ToArray();
 088    }
 89}

Methods/Properties

Paths()
Calculate()
Calculate(...)