< Summary

Information
Class: Trailblazer.Pathing.NavigationOverlayTransaction
Assembly: Trailblazer
File(s): /home/runner/work/Trailblazer/Trailblazer/src/Trailblazer/Pathing/Map/Overlay/NavigationOverlayTransaction.cs
Line coverage
100%
Covered lines: 25
Uncovered lines: 0
Coverable lines: 25
Total lines: 65
Line coverage: 100%
Branch coverage
100%
Covered branches: 6
Total branches: 6
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.cctor()100%11100%
.ctor(...)100%66100%
get_Maps()100%11100%
get_MapSpan()100%11100%
Compare(...)100%11100%

File(s)

/home/runner/work/Trailblazer/Trailblazer/src/Trailblazer/Pathing/Map/Overlay/NavigationOverlayTransaction.cs

#LineLine coverage
 1//=======================================================================
 2// NavigationOverlayTransaction.cs
 3//=======================================================================
 4// MIT License, Copyright (c) 2024-present David Oravsky (mrdav30)
 5// See LICENSE file in the project root for full license information.
 6//=======================================================================
 7
 8using System;
 9using System.Collections.Generic;
 10using System.Collections.ObjectModel;
 11
 12namespace Trailblazer.Pathing;
 13
 14/// <summary>
 15/// Defines the minimum atomic semantic-overlay publication unit across one or more maps.
 16/// </summary>
 17public sealed class NavigationOverlayTransaction
 18{
 119    private static readonly IComparer<NavigationMapOverlayDelta> MapComparer = new MapDeltaComparer();
 20    private readonly NavigationMapOverlayDelta[] _maps;
 21    private readonly ReadOnlyCollection<NavigationMapOverlayDelta> _mapView;
 22
 23    /// <summary>Initializes and canonically orders an immutable multi-map overlay transaction.</summary>
 32124    public NavigationOverlayTransaction(ReadOnlySpan<NavigationMapOverlayDelta> maps)
 25    {
 32126        SwiftThrowHelper.ThrowIfArgument(
 32127            maps.IsEmpty,
 32128            nameof(maps),
 32129            "An overlay transaction must contain at least one map delta.");
 30
 32131        _maps = maps.ToArray();
 142832        for (int i = 0; i < _maps.Length; i++)
 39333            SwiftThrowHelper.ThrowIfNull(_maps[i], nameof(maps));
 34
 32135        Array.Sort(_maps, MapComparer);
 32136        long descriptorBytes = 32L;
 142637        for (int i = 0; i < _maps.Length; i++)
 38        {
 39339            SwiftThrowHelper.ThrowIfArgument(
 39340                i > 0 && string.Equals(_maps[i - 1].MapId, _maps[i].MapId, StringComparison.Ordinal),
 39341                nameof(maps),
 39342                "Map overlay ids must be unique within one transaction.");
 39243            descriptorBytes = NavigationByteCount.SaturatingAdd(
 39244                descriptorBytes,
 39245                _maps[i].EstimatedDescriptorBytes);
 46        }
 47
 32048        _mapView = Array.AsReadOnly(_maps);
 32049        EstimatedDescriptorBytes = descriptorBytes;
 32050    }
 51
 52    /// <summary>Gets canonically ordered, unique per-map deltas.</summary>
 553    public IReadOnlyList<NavigationMapOverlayDelta> Maps => _mapView;
 54
 3578755    internal ReadOnlySpan<NavigationMapOverlayDelta> MapSpan => _maps;
 56
 57    /// <summary>Gets a deterministic conservative byte count for submission admission.</summary>
 58    public long EstimatedDescriptorBytes { get; }
 59
 60    private sealed class MapDeltaComparer : IComparer<NavigationMapOverlayDelta>
 61    {
 62        public int Compare(NavigationMapOverlayDelta? left, NavigationMapOverlayDelta? right) =>
 21663            string.CompareOrdinal(left!.MapId, right!.MapId);
 64    }
 65}