< Summary

Class:Itinero.Profiles.EdgeTypesMap.ProfilesEdgeTypeMap
Assembly:Itinero
File(s):/home/runner/work/routing2/routing2/src/Itinero/Profiles/EdgeTypesMap/ProfilesEdgeTypeMap.cs
Covered lines:0
Uncovered lines:21
Coverable lines:21
Total lines:50
Line coverage:0% (0 of 21)
Covered branches:0
Total branches:2
Branch coverage:0% (0 of 2)
Tag:224_14471318300

Metrics

MethodBranch coverage Cyclomatic complexity Line coverage
.ctor(...)100%10%
Map(...)100%10%
GenerateGuidFromHash(...)0%20%

File(s)

/home/runner/work/routing2/routing2/src/Itinero/Profiles/EdgeTypesMap/ProfilesEdgeTypeMap.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using System.IO;
 4using System.Linq;
 5using System.Security.Cryptography;
 6using Itinero.Indexes;
 7using Itinero.Profiles;
 8using Itinero.Profiles.EdgeTypesMap;
 9// ReSharper disable PossibleMultipleEnumeration
 10
 11namespace Itinero.Profiles.EdgeTypesMap;
 12
 13/// <summary>
 14/// An edge types map based using profiles.
 15/// </summary>
 16internal class ProfilesEdgeTypeMap : AttributeSetMap
 17{
 18    private readonly ProfileEdgeTypeSetMinimizer _profileEdgeTypeSetMinimizer;
 19
 20    public ProfilesEdgeTypeMap(IEnumerable<Profile> profiles)
 021        : base(GenerateGuidFromHash(profiles))
 022    {
 023        var sorted = profiles.ToArray();
 024        Array.Sort(sorted, (x, y) =>
 025            string.Compare(x.Name, y.Name, StringComparison.Ordinal));
 26
 027        _profileEdgeTypeSetMinimizer = new ProfileEdgeTypeSetMinimizer(sorted, "highway", "oneway", "access", "surface")
 028    }
 29
 30    public override IEnumerable<(string key, string value)> Map(IEnumerable<(string key, string value)> attributes)
 031    {
 032        return _profileEdgeTypeSetMinimizer.MinimizeAttributes(attributes);
 033    }
 34
 35    private static Guid GenerateGuidFromHash(IEnumerable<Profile> profiles)
 036    {
 37        // build a byte array with all hashes of each profile.
 038        var memoryStream = new MemoryStream();
 039        foreach (var t in profiles)
 040        {
 041            memoryStream.Write(
 042                BitConverter.GetBytes(t.GetHashCode()), 0, 4);
 043        }
 44
 45        // calculate md5 from byte array.
 046        using var md5 = MD5.Create();
 047        var hash = md5.ComputeHash(memoryStream.ToArray());
 048        return new Guid(hash);
 049    }
 50}