< Summary

Class:Itinero.RouterDb
Assembly:Itinero
File(s):/home/runner/work/routing2/routing2/src/Itinero/RouterDb.cs
/home/runner/work/routing2/routing2/src/Itinero/RouterDb.Indexes.cs
/home/runner/work/routing2/routing2/src/Itinero/RouterDb.Meta.cs
/home/runner/work/routing2/routing2/src/Itinero/RouterDb.Mutation.cs
/home/runner/work/routing2/routing2/src/Itinero/RouterDb.Serialization.cs
Covered lines:82
Uncovered lines:14
Coverable lines:96
Total lines:273
Line coverage:85.4% (82 of 96)
Covered branches:12
Total branches:16
Branch coverage:75% (12 of 16)
Tag:224_14471318300

Metrics

MethodBranch coverage Cyclomatic complexity Line coverage
.ctor(...)100%6100%
.ctor(...)50%287.5%
get_Latest()100%1100%
get_ProfileConfiguration()100%1100%
GetEdgeType(...)100%10%
get_EdgeTypeMap()100%1100%
get_EdgeTypeCount()100%10%
GetEdgeTypeMap()100%1100%
get_TurnCostTypeCount()100%10%
GetTurnCostType(...)100%10%
GetTurnCostTypeMap()100%1100%
get_Meta()100%1100%
ReadAttributesFrom(...)50%271.42%
WriteAttributesTo(...)100%1100%
get_HasMutableNetwork()100%1100%
GetMutableNetwork()50%280%
SetAsMutable(...)50%283.33%
Itinero.Network.Mutation.IRouterDbMutable.Finish(...)100%1100%
ReadFrom(...)100%2100%
WriteTo(...)100%1100%

File(s)

/home/runner/work/routing2/routing2/src/Itinero/RouterDb.cs

#LineLine coverage
 1using System.Collections.Generic;
 2using System.IO;
 3using System.Linq;
 4using System.Runtime.CompilerServices;
 5using Itinero.Data;
 6using Itinero.Data.Usage;
 7using Itinero.Indexes;
 8using Itinero.IO;
 9using Itinero.Network;
 10using Itinero.Network.Mutation;
 11using Itinero.Network.Serialization;
 12using Itinero.Profiles;
 13
 14[assembly: InternalsVisibleTo("Itinero.Tests")]
 15[assembly: InternalsVisibleTo("Itinero.Tests.Benchmarks")]
 16[assembly: InternalsVisibleTo("Itinero.Tests.Functional")]
 17
 18namespace Itinero;
 19
 20/// <summary>
 21/// Represents a router db.
 22/// </summary>
 23/// <remarks>
 24/// This is mostly a wrapper around a RoutingNetwork.
 25/// If an update happens to the underlying routing network, this update will be presented here atomically.
 26/// In other words, to do route planning, use routerDb.getLatest() to get a consistent routing network
 27/// </remarks>
 28public sealed partial class RouterDb : IRouterDbMutable
 29{
 30    /// <summary>
 31    /// Creates a new router db.
 32    /// </summary>
 33    /// <param name="configuration">The configuration.</param>
 15134    public RouterDb(RouterDbConfiguration? configuration = null)
 15135    {
 15136        configuration ??= RouterDbConfiguration.Default();
 37
 15138        this.Latest = new RoutingNetwork(this, configuration.Zoom, configuration.MaxIslandSize);
 15139        _edgeTypeIndex = configuration.EdgeTypeIndex;
 15140        this.EdgeTypeMap = configuration.EdgeTypeMap ?? AttributeSetMap.Default();
 15141        _turnCostTypeIndex = configuration.TurnCostTypeIndex;
 15142        _turnCostTypeMap = configuration.TurnCostTypeMap ?? AttributeSetMap.Default();
 43
 15144        this.ProfileConfiguration = new RouterDbProfileConfiguration(this);
 15145    }
 46
 147    private RouterDb(Stream stream, RouterDbReadSettings settings)
 148    {
 49        // check version #.
 150        var version = stream.ReadVarInt32();
 151        if (version != 1)
 052        {
 053            throw new InvalidDataException("Unknown version #.");
 54        }
 55
 56        // read network.
 157        this.Latest = stream.ReadFrom(this);
 58
 59        // read edge type map data.
 160        _edgeTypeIndex = settings.EdgeTypeAttributeSetIndex;
 161        _edgeTypeIndex.ReadFrom(stream);
 162        _turnCostTypeIndex = settings.TurnCostAttributeSetIndex;
 163        _turnCostTypeIndex.ReadFrom(stream);
 64
 65        // read attributes.
 166        this.Meta = new List<(string key, string value)>(this.ReadAttributesFrom(stream));
 67
 168        this.EdgeTypeMap = AttributeSetMap.Default();
 169        _turnCostTypeMap = AttributeSetMap.Default();
 170        this.ProfileConfiguration = new RouterDbProfileConfiguration(this);
 171    }
 72
 73    /// <summary>
 74    /// Gets the latest.
 75    /// </summary>
 56876    public RoutingNetwork Latest { get; private set; }
 77}

/home/runner/work/routing2/routing2/src/Itinero/RouterDb.Indexes.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using Itinero.Indexes;
 4using Itinero.Profiles;
 5
 6namespace Itinero;
 7
 8public sealed partial class RouterDb
 9{
 10    private readonly AttributeSetIndex _edgeTypeIndex;
 11    private readonly AttributeSetIndex _turnCostTypeIndex;
 12    private readonly AttributeSetMap _turnCostTypeMap;
 13
 4714    internal RouterDbProfileConfiguration ProfileConfiguration { get; }
 15
 16    /// <summary>
 17    /// Gets the edge type attributes for the given id.
 18    /// </summary>
 19    /// <param name="id">The id.</param>
 20    /// <returns>The attributes.</returns>
 21    public IEnumerable<(string key, string value)> GetEdgeType(uint id)
 022    {
 023        return _edgeTypeIndex.GetById(id);
 024    }
 25
 26    /// <summary>
 27    /// The edge type map.
 28    /// </summary>
 139829    internal AttributeSetMap EdgeTypeMap { get; set; }
 30
 31    /// <summary>
 32    /// Gets the edge type count.
 33    /// </summary>
 034    public long EdgeTypeCount => _edgeTypeIndex.Count;
 35
 36    /// <summary>
 37    /// Gets the turn attributes for the given type.
 38    /// </summary>
 39    /// <returns>The attributes.</returns>
 40    internal (Guid id, Func<IEnumerable<(string key, string value)>, uint> func) GetEdgeTypeMap()
 113641    {
 113642        return (this.EdgeTypeMap.Id,
 113643            a =>
 10544            {
 10545                var m = this.EdgeTypeMap.Map(a);
 10546                return _edgeTypeIndex.Get(m);
 10547            }
 113648        );
 113649    }
 50
 51    /// <summary>
 52    /// Gets the turn cost type count.
 53    /// </summary>
 054    public long TurnCostTypeCount => _turnCostTypeIndex.Count;
 55
 56    /// <summary>
 57    /// Gets the turn attributes for the given type.
 58    /// </summary>
 59    /// <param name="id">The id or index.</param>
 60    /// <returns>The attributes.</returns>
 61    public IEnumerable<(string key, string value)> GetTurnCostType(uint id)
 062    {
 063        return _turnCostTypeIndex.GetById(id);
 064    }
 65
 66    internal (Guid id, Func<IEnumerable<(string key, string value)>, uint> func) GetTurnCostTypeMap()
 1167    {
 1168        return (_turnCostTypeMap.Id, a =>
 969        {
 970            var m = _turnCostTypeMap.Map(a);
 971            return _turnCostTypeIndex.Get(m);
 972        }
 1173        );
 1174    }
 75}

/home/runner/work/routing2/routing2/src/Itinero/RouterDb.Meta.cs

#LineLine coverage
 1using System.Collections.Generic;
 2using System.IO;
 3using System.Linq;
 4using Itinero.Network.Attributes;
 5
 6namespace Itinero;
 7
 8public sealed partial class RouterDb
 9{
 10    /// <summary>
 11    /// Gets or sets the meta-data attributes list.
 12    /// </summary>
 16013    public List<(string key, string value)> Meta { get; set; } = new();
 14
 15    private IEnumerable<(string key, string value)> ReadAttributesFrom(Stream stream)
 116    {
 117        var ver = stream.ReadByte();
 118        if (ver == 0)
 019        {
 020            return Enumerable.Empty<(string key, string value)>();
 21        }
 22
 123        return stream.ReadAttributesFrom();
 124    }
 25
 26    private void WriteAttributesTo(Stream stream)
 127    {
 128        stream.WriteByte(1);
 29
 130        this.Meta.WriteAttributesTo(stream);
 131    }
 32}

/home/runner/work/routing2/routing2/src/Itinero/RouterDb.Mutation.cs

#LineLine coverage
 1using System;
 2using Itinero.Network;
 3using Itinero.Network.Mutation;
 4
 5namespace Itinero;
 6
 7public sealed partial class RouterDb
 8{
 9    private RoutingNetworkMutator? _mutable;
 10
 11    /// <summary>
 12    /// Returns true if there is already a writer.
 13    /// </summary>
 314    public bool HasMutableNetwork => _mutable != null;
 15
 16    /// <summary>
 17    /// Gets a mutable version of the latest network.
 18    /// </summary>
 19    /// <returns>The mutable version.</returns>
 20    public RoutingNetworkMutator GetMutableNetwork()
 11921    {
 11922        if (_mutable != null) throw new InvalidOperationException($"Only one mutable version is allowed at one time." +
 023                                                $"Check {nameof(this.HasMutableNetwork)} to check for a current mutable.
 24
 11925        return this.Latest.GetAsMutable();
 11926    }
 27
 28    internal RoutingNetworkMutator SetAsMutable(RoutingNetworkMutator mutable)
 12229    {
 12230        if (_mutable != null) throw new InvalidOperationException($"Only one mutable version is allowed at one time." +
 031                                                                  $"Check {nameof(this.HasMutableNetwork)} to check for 
 32
 12233        _mutable = mutable;
 12234        return _mutable;
 12235    }
 36
 37    void IRouterDbMutable.Finish(RoutingNetwork newNetwork)
 11938    {
 11939        this.Latest = newNetwork;
 40
 11941        _mutable = null;
 11942    }
 43}

/home/runner/work/routing2/routing2/src/Itinero/RouterDb.Serialization.cs

#LineLine coverage
 1using System.IO;
 2using Itinero.IO;
 3using Itinero.Network.Serialization;
 4
 5namespace Itinero;
 6
 7public sealed partial class RouterDb
 8{
 9    /// <summary>
 10    /// Reads a router db from the given stream.
 11    /// </summary>
 12    /// <param name="stream">The stream.</param>
 13    /// <param name="settings">The settings.</param>
 14    /// <returns>The router db as read from the stream.</returns>
 15    public static RouterDb ReadFrom(Stream stream, RouterDbReadSettings? settings = null)
 116    {
 117        settings ??= new RouterDbReadSettings();
 18
 119        return new(stream, settings);
 120    }
 21
 22    /// <summary>
 23    /// Writes the router db to the given stream.
 24    /// </summary>
 25    /// <param name="stream">The stream.</param>
 26    public void WriteTo(Stream stream)
 127    {
 28        // write version #.
 129        stream.WriteVarInt32(1);
 30
 31        // write network.
 132        using (var mutable = this.GetMutableNetwork())
 133        {
 134            mutable.WriteTo(stream);
 135        }
 36
 37        // write edge type map data.
 138        _edgeTypeIndex.WriteTo(stream);
 39
 40        // write turn cost type map data.
 141        _turnCostTypeIndex.WriteTo(stream);
 42
 43        // write attributes.
 144        this.WriteAttributesTo(stream);
 145    }
 46}