< Summary

Class:Itinero.Routing.DataStructures.PathTree
Assembly:Itinero
File(s):/home/runner/work/routing2/routing2/src/Itinero/Routing/DataStructures/PathTree.cs
Covered lines:41
Uncovered lines:86
Coverable lines:127
Total lines:225
Line coverage:32.2% (41 of 127)
Covered branches:2
Total branches:12
Branch coverage:16.6% (2 of 12)
Tag:224_14471318300

Metrics

MethodBranch coverage Cyclomatic complexity Line coverage
.ctor()100%1100%
Add(...)50%272.72%
Add(...)0%20%
Add(...)0%20%
Add(...)0%20%
Add(...)0%20%
Add(...)50%281.25%
Get(...)100%1100%
Get(...)100%10%
Get(...)100%10%
Get(...)100%10%
Get(...)100%10%
Get(...)100%1100%
Clear()100%1100%

File(s)

/home/runner/work/routing2/routing2/src/Itinero/Routing/DataStructures/PathTree.cs

#LineLine coverage
 1namespace Itinero.Routing.DataStructures;
 2
 3/// <summary>
 4/// Represents a tree of paths by linking their segments together.
 5/// </summary>
 6internal sealed class PathTree
 7{
 8    // TODO: this entire path tree idea can be faster by storing raw structs.
 9
 10    /// <summary>
 11    /// Creates a new path tree.
 12    /// </summary>
 4413    public PathTree()
 4414    {
 15        // TODO: perhaps we can reuse arrays somehow.
 4416        _data = new uint[1024];
 4417    }
 18
 19    private uint[] _data;
 20    private uint _pointer;
 21
 22    /// <summary>
 23    /// Adds a new segment.
 24    /// </summary>
 25    /// <returns></returns>
 26    public uint Add(uint data0, uint data1)
 4327    {
 4328        var id = _pointer;
 4329        if (_data.Length <= _pointer + 2)
 030        {
 031            System.Array.Resize(ref _data, _data.Length * 2);
 032        }
 33
 4334        _data[_pointer + 0] = data0;
 4335        _data[_pointer + 1] = data1;
 4336        _pointer += 2;
 4337        return id;
 4338    }
 39
 40    /// <summary>
 41    /// Adds a new segment.
 42    /// </summary>
 43    /// <returns></returns>
 44    public uint Add(uint data0, uint data1, uint data2)
 045    {
 046        var id = _pointer;
 047        if (_data.Length <= _pointer + 3)
 048        {
 049            System.Array.Resize(ref _data, _data.Length * 2);
 050        }
 51
 052        _data[_pointer + 0] = data0;
 053        _data[_pointer + 1] = data1;
 054        _data[_pointer + 2] = data2;
 055        _pointer += 3;
 056        return id;
 057    }
 58
 59    /// <summary>
 60    /// Adds a new segment.
 61    /// </summary>
 62    /// <returns></returns>
 63    public uint Add(uint data0, uint data1, uint data2, uint data3)
 064    {
 065        var id = _pointer;
 066        if (_data.Length <= _pointer + 4)
 067        {
 068            System.Array.Resize(ref _data, _data.Length * 2);
 069        }
 70
 071        _data[_pointer + 0] = data0;
 072        _data[_pointer + 1] = data1;
 073        _data[_pointer + 2] = data2;
 074        _data[_pointer + 3] = data3;
 075        _pointer += 4;
 076        return id;
 077    }
 78
 79    /// <summary>
 80    /// Adds a new segment.
 81    /// </summary>
 82    /// <returns></returns>
 83    public uint Add(uint data0, uint data1, uint data2, uint data3, uint data4)
 084    {
 085        var id = _pointer;
 086        if (_data.Length <= _pointer + 5)
 087        {
 088            System.Array.Resize(ref _data, _data.Length * 2);
 089        }
 90
 091        _data[_pointer + 0] = data0;
 092        _data[_pointer + 1] = data1;
 093        _data[_pointer + 2] = data2;
 094        _data[_pointer + 3] = data3;
 095        _data[_pointer + 4] = data4;
 096        _pointer += 5;
 097        return id;
 098    }
 99
 100    /// <summary>
 101    /// Adds a new segment.
 102    /// </summary>
 103    /// <returns></returns>
 104    public uint Add(uint data0, uint data1, uint data2, uint data3, uint data4, uint data5)
 0105    {
 0106        var id = _pointer;
 0107        if (_data.Length <= _pointer + 6)
 0108        {
 0109            System.Array.Resize(ref _data, _data.Length * 2);
 0110        }
 111
 0112        _data[_pointer + 0] = data0;
 0113        _data[_pointer + 1] = data1;
 0114        _data[_pointer + 2] = data2;
 0115        _data[_pointer + 3] = data3;
 0116        _data[_pointer + 4] = data4;
 0117        _data[_pointer + 5] = data5;
 0118        _pointer += 6;
 0119        return id;
 0120    }
 121
 122    /// <summary>
 123    /// Adds a new segment.
 124    /// </summary>
 125    /// <returns></returns>
 126    public uint Add(uint data0, uint data1, uint data2, uint data3, uint data4, uint data5, uint data6)
 95127    {
 95128        var id = _pointer;
 95129        if (_data.Length <= _pointer + 7)
 0130        {
 0131            System.Array.Resize(ref _data, _data.Length * 2);
 0132        }
 133
 95134        _data[_pointer + 0] = data0;
 95135        _data[_pointer + 1] = data1;
 95136        _data[_pointer + 2] = data2;
 95137        _data[_pointer + 3] = data3;
 95138        _data[_pointer + 4] = data4;
 95139        _data[_pointer + 5] = data5;
 95140        _data[_pointer + 6] = data6;
 95141        _pointer += 7;
 95142        return id;
 95143    }
 144
 145    /// <summary>
 146    /// Gets the data at the given pointer.
 147    /// </summary>
 148    public void Get(uint pointer, out uint data0, out uint data1)
 58149    {
 58150        data0 = _data[pointer + 0];
 58151        data1 = _data[pointer + 1];
 58152    }
 153
 154    /// <summary>
 155    /// Gets the data at the given pointer.
 156    /// </summary>
 157    public void Get(uint pointer, out uint data0, out uint data1, out uint data2)
 0158    {
 0159        data0 = _data[pointer + 0];
 0160        data1 = _data[pointer + 1];
 0161        data2 = _data[pointer + 2];
 0162    }
 163
 164    /// <summary>
 165    /// Gets the data at the given pointer.
 166    /// </summary>
 167    public void Get(uint pointer, out uint data0, out uint data1, out uint data2,
 168        out uint data3)
 0169    {
 0170        data0 = _data[pointer + 0];
 0171        data1 = _data[pointer + 1];
 0172        data2 = _data[pointer + 2];
 0173        data3 = _data[pointer + 3];
 0174    }
 175
 176    /// <summary>
 177    /// Gets the data at the given pointer.
 178    /// </summary>
 179    public void Get(uint pointer, out uint data0, out uint data1, out uint data2,
 180        out uint data3, out uint data4)
 0181    {
 0182        data0 = _data[pointer + 0];
 0183        data1 = _data[pointer + 1];
 0184        data2 = _data[pointer + 2];
 0185        data3 = _data[pointer + 3];
 0186        data4 = _data[pointer + 4];
 0187    }
 188
 189    /// <summary>
 190    /// Gets the data at the given pointer.
 191    /// </summary>
 192    public void Get(uint pointer, out uint data0, out uint data1, out uint data2,
 193        out uint data3, out uint data4, out uint data5)
 0194    {
 0195        data0 = _data[pointer + 0];
 0196        data1 = _data[pointer + 1];
 0197        data2 = _data[pointer + 2];
 0198        data3 = _data[pointer + 3];
 0199        data4 = _data[pointer + 4];
 0200        data5 = _data[pointer + 5];
 0201    }
 202
 203    /// <summary>
 204    /// Gets the data at the given pointer.
 205    /// </summary>
 206    public void Get(uint pointer, out uint data0, out uint data1, out uint data2,
 207        out uint data3, out uint data4, out uint data5, out uint data6)
 176208    {
 176209        data0 = _data[pointer + 0];
 176210        data1 = _data[pointer + 1];
 176211        data2 = _data[pointer + 2];
 176212        data3 = _data[pointer + 3];
 176213        data4 = _data[pointer + 4];
 176214        data5 = _data[pointer + 5];
 176215        data6 = _data[pointer + 6];
 176216    }
 217
 218    /// <summary>
 219    /// Clears all data.
 220    /// </summary>
 221    public void Clear()
 44222    {
 44223        _pointer = 0;
 44224    }
 225}