< Summary

Information
Class: Trailblazer.Pathing.MaintenanceWorkMeter
Assembly: Trailblazer
File(s): /home/runner/work/Trailblazer/Trailblazer/src/Trailblazer/Pathing/Graph/MaintenanceWorkMeter.cs
Line coverage
100%
Covered lines: 39
Uncovered lines: 0
Coverable lines: 39
Total lines: 89
Line coverage: 100%
Branch coverage
100%
Covered branches: 2
Total branches: 2
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

File(s)

/home/runner/work/Trailblazer/Trailblazer/src/Trailblazer/Pathing/Graph/MaintenanceWorkMeter.cs

#LineLine coverage
 1//=======================================================================
 2// MaintenanceWorkMeter.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
 8namespace Trailblazer.Pathing;
 9
 10/// <summary>Debits every deterministic maintenance producer against one fixed-step budget.</summary>
 11internal sealed class MaintenanceWorkMeter
 12{
 13    private readonly MaintenanceWorkBudget _budget;
 14    private int _consumedEnvelopes;
 15    private int _baselineAddresses;
 16    private int _overlaySlots;
 17    private int _componentNodes;
 18    private int _seamCandidateProbes;
 19    private int _explicitEdges;
 20    private int _dependencyEntries;
 21    private int _surfaceComponentEdges;
 22
 784823    internal MaintenanceWorkMeter(MaintenanceWorkBudget budget) => _budget = budget;
 24
 2025925    internal int ConsumedEnvelopes => _consumedEnvelopes;
 2905026    internal int BaselineAddresses => _baselineAddresses;
 7727    internal int OverlaySlots => _overlaySlots;
 7928    internal int ComponentNodes => _componentNodes;
 3998929    internal int SeamCandidateProbes => _seamCandidateProbes;
 12230    internal int ExplicitEdges => _explicitEdges;
 170631    internal int DependencyEntries => _dependencyEntries;
 143765632    internal int SurfaceComponentEdges => _surfaceComponentEdges;
 33
 2025034    internal int RemainingEnvelopes => _budget.MaxConsumedEnvelopes - ConsumedEnvelopes;
 2903635    internal int RemainingBaselineAddresses => _budget.MaxBaselineAddresses - BaselineAddresses;
 136    internal int RemainingOverlaySlots => _budget.MaxOverlaySlots - OverlaySlots;
 137    internal int RemainingComponentNodes => _budget.MaxComponentNodes - ComponentNodes;
 38    internal int RemainingSeamCandidateProbes =>
 3985839        _budget.MaxSeamCandidateProbes - SeamCandidateProbes;
 140    internal int RemainingExplicitEdges => _budget.MaxExplicitEdges - ExplicitEdges;
 141    internal int RemainingDependencyEntries => _budget.MaxDependencyEntries - DependencyEntries;
 42    internal int RemainingSurfaceComponentEdges =>
 143762043        _budget.MaxSurfaceComponentEdges - SurfaceComponentEdges;
 44
 45    internal void Reset()
 46    {
 2283747        _consumedEnvelopes = 0;
 2283748        _baselineAddresses = 0;
 2283749        _overlaySlots = 0;
 2283750        _componentNodes = 0;
 2283751        _seamCandidateProbes = 0;
 2283752        _explicitEdges = 0;
 2283753        _dependencyEntries = 0;
 2283754        _surfaceComponentEdges = 0;
 2283755    }
 56
 57    internal bool TryConsumeEnvelopes(int count) =>
 2026858        TryConsume(ref _consumedEnvelopes, count, _budget.MaxConsumedEnvelopes);
 59
 60    internal bool TryConsumeBaselineAddresses(int count) =>
 118561        TryConsume(ref _baselineAddresses, count, _budget.MaxBaselineAddresses);
 62
 63    internal bool TryConsumeOverlaySlots(int count) =>
 11434864        TryConsume(ref _overlaySlots, count, _budget.MaxOverlaySlots);
 65
 66    internal bool TryConsumeComponentNodes(int count) =>
 13062367        TryConsume(ref _componentNodes, count, _budget.MaxComponentNodes);
 68
 69    internal bool TryConsumeSeamCandidateProbes(int count) =>
 3985970        TryConsume(ref _seamCandidateProbes, count, _budget.MaxSeamCandidateProbes);
 71
 72    internal bool TryConsumeExplicitEdges(int count) =>
 23681173        TryConsume(ref _explicitEdges, count, _budget.MaxExplicitEdges);
 74
 75    internal bool TryConsumeDependencyEntries(int count) =>
 35529176        TryConsume(ref _dependencyEntries, count, _budget.MaxDependencyEntries);
 77
 78    internal bool TryConsumeSurfaceComponentEdges(int count) =>
 127894579        TryConsume(ref _surfaceComponentEdges, count, _budget.MaxSurfaceComponentEdges);
 80
 81    private static bool TryConsume(ref int consumed, int count, int maximum)
 82    {
 217733083        SwiftThrowHelper.ThrowIfArgumentOutOfRange(count < 0, count, nameof(count));
 217732984        if (count > maximum - consumed)
 1762785            return false;
 215970286        consumed += count;
 215970287        return true;
 88    }
 89}