< Summary

Information
Class: Trailblazer.Pathing.ResolvedChartVoxelState
Assembly: Trailblazer
File(s): /home/runner/work/Trailblazer/Trailblazer/src/Trailblazer/Pathing/Chart/ResolvedChartVoxelState.cs
Line coverage
100%
Covered lines: 57
Uncovered lines: 0
Coverable lines: 57
Total lines: 132
Line coverage: 100%
Branch coverage
100%
Covered branches: 24
Total branches: 24
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor()100%11100%
get_HasAnyOwners()100%11100%
AddOwner(...)100%66100%
RemoveOwner(...)100%44100%
ContainsOwner(...)100%11100%
AddChartOwnersTo(...)100%44100%
ResolveEffectiveCell()100%66100%
SetEffectiveContribution(...)100%11100%
HasHigherPrecedence(...)100%44100%
.ctor(...)100%11100%

File(s)

/home/runner/work/Trailblazer/Trailblazer/src/Trailblazer/Pathing/Chart/ResolvedChartVoxelState.cs

#LineLine coverage
 1using SwiftCollections;
 2using System;
 3using System.Collections.Generic;
 4
 5namespace Trailblazer.Pathing;
 6
 7/// <summary>
 8/// Tracks all authored chart cells that claim one voxel and resolves the winning effective cell.
 9/// </summary>
 10internal sealed class ResolvedChartVoxelState
 11{
 294112    private readonly SwiftDictionary<string, ChartContribution> _chartContributions =
 294113        new(4, StringComparer.Ordinal);
 14
 15    private int _effectivePriority;
 16
 17    private int _effectiveRegistrationOrder;
 18
 205019    public bool HasAnyOwners => _chartContributions.Count > 0;
 20
 21    public string? EffectiveChartOwner { get; private set; }
 22
 23    public NavigationChartCell EffectiveCell { get; private set; }
 24
 25    public void AddOwner(
 26        string chartName,
 27        NavigationChartCell cell,
 28        int priority,
 29        int registrationOrder)
 30    {
 296631        var contribution = new ChartContribution(cell, priority, registrationOrder);
 296632        _chartContributions[chartName] = contribution;
 33
 296634        if (EffectiveChartOwner == null
 296635            || string.Equals(chartName, EffectiveChartOwner, StringComparison.Ordinal)
 296636            || HasHigherPrecedence(
 296637                chartName,
 296638                priority,
 296639                registrationOrder,
 296640                EffectiveChartOwner,
 296641                _effectivePriority,
 296642                _effectiveRegistrationOrder))
 43        {
 296344            SetEffectiveContribution(chartName, contribution);
 45        }
 296646    }
 47
 48    public void RemoveOwner(string chartName)
 49    {
 192250        if (!_chartContributions.ContainsKey(chartName))
 151            return;
 52
 192153        _chartContributions.Remove(chartName);
 192154        if (string.Equals(chartName, EffectiveChartOwner, StringComparison.Ordinal))
 192055            ResolveEffectiveCell();
 192156    }
 57
 198558    public bool ContainsOwner(string chartName) => _chartContributions.ContainsKey(chartName);
 59
 60    public void AddChartOwnersTo(SwiftHashSet<string> destination)
 61    {
 496862        if (destination == null)
 163            return;
 64
 1992265        foreach (KeyValuePair<string, ChartContribution> pair in _chartContributions)
 499466            destination.Add(pair.Key);
 496767    }
 68
 69    private void ResolveEffectiveCell()
 70    {
 192071        EffectiveChartOwner = null;
 192072        EffectiveCell = NavigationChartCell.Empty;
 192073        _effectivePriority = 0;
 192074        _effectiveRegistrationOrder = 0;
 75
 386076        foreach (KeyValuePair<string, ChartContribution> pair in _chartContributions)
 77        {
 1078            if (EffectiveChartOwner == null
 1079                || HasHigherPrecedence(
 1080                    pair.Key,
 1081                    pair.Value.Priority,
 1082                    pair.Value.RegistrationOrder,
 1083                    EffectiveChartOwner,
 1084                    _effectivePriority,
 1085                    _effectiveRegistrationOrder))
 86            {
 987                SetEffectiveContribution(pair.Key, pair.Value);
 88            }
 89        }
 192090    }
 91
 92    private void SetEffectiveContribution(string chartName, ChartContribution contribution)
 93    {
 297294        EffectiveChartOwner = chartName;
 297295        EffectiveCell = contribution.Cell;
 297296        _effectivePriority = contribution.Priority;
 297297        _effectiveRegistrationOrder = contribution.RegistrationOrder;
 297298    }
 99
 100    private static bool HasHigherPrecedence(
 101        string candidateChartName,
 102        int candidatePriority,
 103        int candidateRegistrationOrder,
 104        string currentChartName,
 105        int currentPriority,
 106        int currentRegistrationOrder)
 107    {
 22108        if (candidatePriority != currentPriority)
 12109            return candidatePriority > currentPriority;
 110
 10111        if (candidateRegistrationOrder != currentRegistrationOrder)
 9112            return candidateRegistrationOrder > currentRegistrationOrder;
 113
 1114        return string.CompareOrdinal(candidateChartName, currentChartName) > 0;
 115    }
 116
 117    private readonly struct ChartContribution
 118    {
 119        public ChartContribution(NavigationChartCell cell, int priority, int registrationOrder)
 120        {
 2966121            Cell = cell;
 2966122            Priority = priority;
 2966123            RegistrationOrder = registrationOrder;
 2966124        }
 125
 126        public NavigationChartCell Cell { get; }
 127
 128        public int Priority { get; }
 129
 130        public int RegistrationOrder { get; }
 131    }
 132}