< Summary

Information
Class: Trailblazer.Pathing.NavigationAutomaticSeamIndex
Assembly: Trailblazer
File(s): /home/runner/work/Trailblazer/Trailblazer/src/Trailblazer/Pathing/Graph/NavigationAutomaticSeamIndex.cs
Line coverage
100%
Covered lines: 282
Uncovered lines: 0
Coverable lines: 282
Total lines: 491
Line coverage: 100%
Branch coverage
100%
Covered branches: 66
Total branches: 66
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%11100%
get_PairCount()100%11100%
get_RetainedBytes()100%11100%
get_PersistentPageCount()100%11100%
TryGetPair(...)100%22100%
TryGetPairRecord(...)100%11100%
IsActive(...)100%44100%
GetDependencyRow(...)100%11100%
GetActiveRow(...)100%11100%
GetActiveEndpointEnumerator(...)100%11100%
GetStructuralLinks(...)100%22100%
Edit(...)100%11100%
CreateDependencyCursor(...)100%11100%
BeginDependencyRange(...)100%11100%
GetRow(...)100%22100%
.ctor(...)100%11100%
MoveNext()100%22100%
.ctor(...)100%11100%
get_RetainedBytes()100%11100%
get_PersistentPageCount()100%11100%
get_IsChanged()100%66100%
get_SealedAdditionalRetainedBytes()100%22100%
get_SealedAdditionalPersistentPages()100%22100%
SetPair(...)100%44100%
SetDependencyRow(...)100%11100%
SetActiveRow(...)100%11100%
SetStructuralLinks(...)100%66100%
Seal()100%22100%
ReplacePairPayload(...)100%1616100%
SetRow(...)100%66100%
ReplacePayload(...)100%44100%
GetPayloadSize(...)100%22100%
GetSealedTreeBytes(...)100%22100%
GetSealedTreePages(...)100%22100%

File(s)

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

#LineLine coverage
 1//=======================================================================
 2// NavigationAutomaticSeamIndex.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>Stores canonical seam geometry plus dependency, active-endpoint, and link incidence.</summary>
 11internal sealed class NavigationAutomaticSeamIndex
 12{
 13    internal const int PairNodeBytes = 104;
 14    internal const int AddressNodeBytes = 80;
 15    internal const int MapNodeBytes = 64;
 16    internal const int PairCursorShellBytes = 144;
 17    internal const int AddressCursorShellBytes = 96;
 18    internal const int MapCursorShellBytes = 64;
 19    internal const int LinkCursorShellBytes = 80;
 20    private const long BaseRetainedBytes = 96L;
 21
 122    internal static readonly NavigationAutomaticSeamIndex Empty = new(
 123        new NavigationSeamEditTree<NavigationAutomaticSeamPairKey, NavigationAutomaticSeamPairRecord>(PairNodeBytes),
 124        new NavigationSeamEditTree<NavigationCellAddress, NavigationPagedSequence<NavigationAutomaticSeamPair>>(AddressN
 125        new NavigationSeamEditTree<NavigationCellAddress, NavigationPagedSequence<NavigationAutomaticSeamPair>>(AddressN
 126        new NavigationSeamEditTree<NavigationAutomaticSeamMapKey, NavigationPagedSequence<NavigationStructuralLink>>(Map
 127        0, 0, 0, 0, 0, 0, 0, 0);
 28
 29    private readonly NavigationSeamEditTree<NavigationAutomaticSeamPairKey, NavigationAutomaticSeamPairRecord> _pairs;
 30    private readonly NavigationSeamEditTree<NavigationCellAddress, NavigationPagedSequence<NavigationAutomaticSeamPair>>
 31    private readonly NavigationSeamEditTree<NavigationCellAddress, NavigationPagedSequence<NavigationAutomaticSeamPair>>
 32    private readonly NavigationSeamEditTree<NavigationAutomaticSeamMapKey, NavigationPagedSequence<NavigationStructuralL
 33    private readonly long _pairBytes;
 34    private readonly long _dependencyRowBytes;
 35    private readonly long _activeRowBytes;
 36    private readonly long _linkRowBytes;
 37    private readonly int _pairPages;
 38    private readonly int _dependencyRowPages;
 39    private readonly int _activeRowPages;
 40    private readonly int _linkRowPages;
 41
 18142    private NavigationAutomaticSeamIndex(
 18143        NavigationSeamEditTree<NavigationAutomaticSeamPairKey, NavigationAutomaticSeamPairRecord> pairs,
 18144        NavigationSeamEditTree<NavigationCellAddress, NavigationPagedSequence<NavigationAutomaticSeamPair>> dependencies
 18145        NavigationSeamEditTree<NavigationCellAddress, NavigationPagedSequence<NavigationAutomaticSeamPair>> active,
 18146        NavigationSeamEditTree<NavigationAutomaticSeamMapKey, NavigationPagedSequence<NavigationStructuralLink>> links,
 18147        long pairBytes,
 18148        long dependencyRowBytes,
 18149        long activeRowBytes,
 18150        long linkRowBytes,
 18151        int pairPages,
 18152        int dependencyRowPages,
 18153        int activeRowPages,
 18154        int linkRowPages)
 55    {
 18156        _pairs = pairs;
 18157        _dependencies = dependencies;
 18158        _active = active;
 18159        _links = links;
 18160        _pairBytes = pairBytes;
 18161        _dependencyRowBytes = dependencyRowBytes;
 18162        _activeRowBytes = activeRowBytes;
 18163        _linkRowBytes = linkRowBytes;
 18164        _pairPages = pairPages;
 18165        _dependencyRowPages = dependencyRowPages;
 18166        _activeRowPages = activeRowPages;
 18167        _linkRowPages = linkRowPages;
 18168    }
 69
 4870    internal int PairCount => _pairs.Count;
 71
 103772    internal long RetainedBytes => checked(
 103773        BaseRetainedBytes
 103774        + _pairs.RetainedBytes
 103775        + _dependencies.RetainedBytes
 103776        + _active.RetainedBytes
 103777        + _links.RetainedBytes
 103778        + _pairBytes
 103779        + _dependencyRowBytes
 103780        + _activeRowBytes
 103781        + _linkRowBytes);
 82
 103783    internal int PersistentPageCount => checked(
 103784        _pairs.PersistentPageCount
 103785        + _dependencies.PersistentPageCount
 103786        + _active.PersistentPageCount
 103787        + _links.PersistentPageCount
 103788        + _pairPages
 103789        + _dependencyRowPages
 103790        + _activeRowPages
 103791        + _linkRowPages);
 92
 93    internal bool TryGetPair(
 94        NavigationCellAddress first,
 95        NavigationCellAddress second,
 96        out NavigationAutomaticSeamPair pair)
 97    {
 3228098        if (_pairs.TryGetValue(
 3228099                new NavigationAutomaticSeamPairKey(first, second),
 32280100                out NavigationAutomaticSeamPairRecord record))
 101        {
 7102            pair = record.Pair;
 7103            return true;
 104        }
 32273105        pair = null!;
 32273106        return false;
 107    }
 108
 109    internal bool TryGetPairRecord(
 110        NavigationAutomaticSeamPairKey key,
 6148111        out NavigationAutomaticSeamPairRecord record) => _pairs.TryGetValue(key, out record);
 112
 113    internal bool IsActive(NavigationAutomaticSeamRef seam) =>
 20005114        _pairs.TryGetValue(
 20005115            new NavigationAutomaticSeamPairKey(seam.Pair.First, seam.Pair.Second),
 20005116            out NavigationAutomaticSeamPairRecord record)
 20005117        && ReferenceEquals(record.Pair, seam.Pair)
 20005118        && record.IsActive;
 119
 120    internal NavigationPagedSequence<NavigationAutomaticSeamPair> GetDependencyRow(
 18203121        NavigationCellAddress address) => GetRow(_dependencies, address);
 122
 123    internal NavigationPagedSequence<NavigationAutomaticSeamPair> GetActiveRow(
 524496124        NavigationCellAddress address) => GetRow(_active, address);
 125
 126    internal EndpointEnumerator GetActiveEndpointEnumerator(NavigationCellAddress address) =>
 524067127        new(address, GetActiveRow(address));
 128
 129    internal NavigationPagedSequence<NavigationStructuralLink> GetStructuralLinks(string mapId) =>
 371130        _links.TryGetValue(
 371131            new NavigationAutomaticSeamMapKey(mapId),
 371132            out NavigationPagedSequence<NavigationStructuralLink> links)
 371133            ? links
 371134            : NavigationPagedSequence<NavigationStructuralLink>.Empty;
 135
 136    internal EditSession Edit(NavigationSeamEditToken ownershipToken) =>
 192137        new(this, ownershipToken);
 138
 139    internal NavigationSeamEditTree<NavigationCellAddress, NavigationPagedSequence<NavigationAutomaticSeamPair>>.Cursor
 140        CreateDependencyCursor(int maximumHeight) =>
 112141        _dependencies.CreateCursor(maximumHeight, AddressCursorShellBytes);
 142
 143    internal void BeginDependencyRange(
 144        NavigationSeamEditTree<NavigationCellAddress, NavigationPagedSequence<NavigationAutomaticSeamPair>>.Cursor curso
 145        string mapId)
 146    {
 112147        cursor.BeginAtLeast(
 112148            _dependencies,
 112149            new NavigationCellAddress(
 112150                mapId,
 112151                new GridForge.Spatial.VoxelIndex(int.MinValue, int.MinValue, int.MinValue)));
 112152    }
 153
 154    private static NavigationPagedSequence<NavigationAutomaticSeamPair> GetRow(
 155        NavigationSeamEditTree<NavigationCellAddress, NavigationPagedSequence<NavigationAutomaticSeamPair>> root,
 542699156        NavigationCellAddress address) => root.TryGetValue(address, out NavigationPagedSequence<NavigationAutomaticSeamP
 542699157            ? row
 542699158            : NavigationPagedSequence<NavigationAutomaticSeamPair>.Empty;
 159
 160    internal struct EndpointEnumerator
 161    {
 162        private readonly NavigationCellAddress _origin;
 163        private NavigationPagedSequence<NavigationAutomaticSeamPair>.Enumerator _pairs;
 164
 165        internal EndpointEnumerator(
 166            NavigationCellAddress origin,
 167            NavigationPagedSequence<NavigationAutomaticSeamPair> pairs)
 168        {
 540711169            _origin = origin;
 540711170            _pairs = pairs.GetEnumerator();
 540711171            Current = default;
 540711172        }
 173
 174        internal NavigationAutomaticSeamRef Current { get; private set; }
 175
 176        internal bool MoveNext()
 177        {
 646507178            if (!_pairs.MoveNext())
 179            {
 443038180                Current = default;
 443038181                return false;
 182            }
 203469183            NavigationAutomaticSeamPair pair = _pairs.Current;
 203469184            Current = new NavigationAutomaticSeamRef(
 203469185                pair,
 203469186                reverse: _origin.Equals(pair.Second));
 203469187            return true;
 188        }
 189    }
 190
 191    internal sealed class EditSession
 192    {
 193        private const long BaseRetainedBytes = 160L;
 194        private readonly NavigationAutomaticSeamIndex _source;
 195        private readonly NavigationSeamEditTree<NavigationAutomaticSeamPairKey, NavigationAutomaticSeamPairRecord>.Edito
 196        private readonly NavigationSeamEditTree<NavigationCellAddress, NavigationPagedSequence<NavigationAutomaticSeamPa
 197        private readonly NavigationSeamEditTree<NavigationCellAddress, NavigationPagedSequence<NavigationAutomaticSeamPa
 198        private readonly NavigationSeamEditTree<NavigationAutomaticSeamMapKey, NavigationPagedSequence<NavigationStructu
 199        private long _pairBytes;
 200        private long _dependencyRowBytes;
 201        private long _activeRowBytes;
 202        private long _linkRowBytes;
 203        private int _pairPages;
 204        private int _dependencyRowPages;
 205        private int _activeRowPages;
 206        private int _linkRowPages;
 207        private long _additionalPairBytes;
 208        private long _additionalDependencyRowBytes;
 209        private long _additionalActiveRowBytes;
 210        private long _additionalLinkRowBytes;
 211        private int _additionalPairPages;
 212        private int _additionalDependencyRowPages;
 213        private int _additionalActiveRowPages;
 214        private int _additionalLinkRowPages;
 215        private bool _sealed;
 216
 192217        internal EditSession(
 192218            NavigationAutomaticSeamIndex source,
 192219            NavigationSeamEditToken ownershipToken)
 220        {
 192221            _source = source;
 192222            _pairs = source._pairs.Edit(ownershipToken);
 192223            _dependencies = source._dependencies.Edit(ownershipToken);
 192224            _active = source._active.Edit(ownershipToken);
 192225            _links = source._links.Edit(ownershipToken);
 192226            _pairBytes = source._pairBytes;
 192227            _dependencyRowBytes = source._dependencyRowBytes;
 192228            _activeRowBytes = source._activeRowBytes;
 192229            _linkRowBytes = source._linkRowBytes;
 192230            _pairPages = source._pairPages;
 192231            _dependencyRowPages = source._dependencyRowPages;
 192232            _activeRowPages = source._activeRowPages;
 192233            _linkRowPages = source._linkRowPages;
 192234        }
 235
 117249236        internal long RetainedBytes => checked(
 117249237            BaseRetainedBytes
 117249238            + _pairs.RetainedBytes
 117249239            + _dependencies.RetainedBytes
 117249240            + _active.RetainedBytes
 117249241            + _links.RetainedBytes
 117249242            + _additionalPairBytes
 117249243            + _additionalDependencyRowBytes
 117249244            + _additionalActiveRowBytes
 117249245            + _additionalLinkRowBytes);
 246
 117246247        internal int PersistentPageCount => checked(
 117246248            1
 117246249            + _pairs.PersistentPageCount
 117246250            + _dependencies.PersistentPageCount
 117246251            + _active.PersistentPageCount
 117246252            + _links.PersistentPageCount
 117246253            + _additionalPairPages
 117246254            + _additionalDependencyRowPages
 117246255            + _additionalActiveRowPages
 117246256            + _additionalLinkRowPages);
 257
 258        internal bool IsChanged =>
 553259            _pairs.IsChanged || _dependencies.IsChanged || _active.IsChanged || _links.IsChanged;
 260
 182261        internal long SealedAdditionalRetainedBytes => !IsChanged
 182262            ? 0L
 182263            : checked(
 182264                NavigationAutomaticSeamIndex.BaseRetainedBytes
 182265                + GetSealedTreeBytes(_pairs, PairNodeBytes)
 182266                + GetSealedTreeBytes(_dependencies, AddressNodeBytes)
 182267                + GetSealedTreeBytes(_active, AddressNodeBytes)
 182268                + GetSealedTreeBytes(_links, MapNodeBytes)
 182269                + _additionalPairBytes
 182270                + _additionalDependencyRowBytes
 182271                + _additionalActiveRowBytes
 182272                + _additionalLinkRowBytes);
 273
 182274        internal int SealedAdditionalPersistentPages => !IsChanged
 182275            ? 0
 182276            : checked(
 182277                GetSealedTreePages(_pairs)
 182278                + GetSealedTreePages(_dependencies)
 182279                + GetSealedTreePages(_active)
 182280                + GetSealedTreePages(_links)
 182281                + _additionalPairPages
 182282                + _additionalDependencyRowPages
 182283                + _additionalActiveRowPages
 182284                + _additionalLinkRowPages);
 285
 286        internal void SetPair(
 287            NavigationAutomaticSeamPairKey key,
 288            NavigationAutomaticSeamPairRecord? record)
 289        {
 6126290            _pairs.TryGetValue(key, out NavigationAutomaticSeamPairRecord prior);
 6126291            _source._pairs.TryGetValue(key, out NavigationAutomaticSeamPairRecord shared);
 6126292            ReplacePairPayload(prior, record, shared);
 6126293            if (prior != null)
 294            {
 100295                _pairBytes -= NavigationAutomaticSeamPair.RetainedSize
 100296                    + NavigationAutomaticSeamPairRecord.RetainedSize;
 100297                _pairPages -= 2;
 298            }
 6126299            if (record == null)
 62300                _pairs.Remove(key);
 301            else
 302            {
 6064303                _pairs.Set(key, record);
 6064304                _pairBytes += NavigationAutomaticSeamPair.RetainedSize
 6064305                    + NavigationAutomaticSeamPairRecord.RetainedSize;
 6064306                _pairPages += 2;
 307            }
 6064308        }
 309
 310        internal void SetDependencyRow(
 311            NavigationCellAddress address,
 1562312            NavigationPagedSequence<NavigationAutomaticSeamPair> row) => SetRow(
 1562313                address,
 1562314                row,
 1562315                _source._dependencies,
 1562316                _dependencies,
 1562317                ref _dependencyRowBytes,
 1562318                ref _dependencyRowPages,
 1562319                ref _additionalDependencyRowBytes,
 1562320                ref _additionalDependencyRowPages);
 321
 322        internal void SetActiveRow(
 323            NavigationCellAddress address,
 441324            NavigationPagedSequence<NavigationAutomaticSeamPair> row) => SetRow(
 441325                address,
 441326                row,
 441327                _source._active,
 441328                _active,
 441329                ref _activeRowBytes,
 441330                ref _activeRowPages,
 441331                ref _additionalActiveRowBytes,
 441332                ref _additionalActiveRowPages);
 333
 334        internal void SetStructuralLinks(
 335            string mapId,
 336            NavigationPagedSequence<NavigationStructuralLink> row)
 337        {
 369338            var key = new NavigationAutomaticSeamMapKey(mapId);
 369339            _links.TryGetValue(key, out NavigationPagedSequence<NavigationStructuralLink> prior);
 369340            _source._links.TryGetValue(key, out NavigationPagedSequence<NavigationStructuralLink> shared);
 369341            prior ??= NavigationPagedSequence<NavigationStructuralLink>.Empty;
 369342            shared ??= NavigationPagedSequence<NavigationStructuralLink>.Empty;
 369343            ReplacePayload(
 369344                prior,
 369345                row,
 369346                shared,
 369347                row.RetainedBytes,
 369348                row.PersistentPageCount,
 369349                ref _additionalLinkRowBytes,
 369350                ref _additionalLinkRowPages);
 369351            _linkRowBytes = checked(_linkRowBytes - prior.RetainedBytes + row.RetainedBytes);
 369352            _linkRowPages = checked(
 369353                _linkRowPages - prior.PersistentPageCount + row.PersistentPageCount);
 369354            if (row.Count == 0)
 38355                _links.Remove(key);
 356            else
 331357                _links.Set(key, row);
 331358        }
 359
 360        internal NavigationAutomaticSeamIndex Seal()
 361        {
 190362            SwiftThrowHelper.ThrowIfTrue(
 190363                _sealed,
 190364                message: "The seam index edit is already sealed.");
 189365            _sealed = true;
 189366            if (!IsChanged)
 9367                return _source;
 180368            return new NavigationAutomaticSeamIndex(
 180369                _pairs.Seal(),
 180370                _dependencies.Seal(),
 180371                _active.Seal(),
 180372                _links.Seal(),
 180373                _pairBytes,
 180374                _dependencyRowBytes,
 180375                _activeRowBytes,
 180376                _linkRowBytes,
 180377                _pairPages,
 180378                _dependencyRowPages,
 180379                _activeRowPages,
 180380                _linkRowPages);
 381        }
 382
 383        private void ReplacePairPayload(
 384            NavigationAutomaticSeamPairRecord? prior,
 385            NavigationAutomaticSeamPairRecord? next,
 386            NavigationAutomaticSeamPairRecord? shared)
 387        {
 6126388            if (prior != null && !ReferenceEquals(prior, shared))
 389            {
 3390                _additionalPairBytes -= NavigationAutomaticSeamPairRecord.RetainedSize;
 3391                _additionalPairPages--;
 3392                if (shared == null || !ReferenceEquals(prior.Pair, shared.Pair))
 393                {
 2394                    _additionalPairBytes -= NavigationAutomaticSeamPair.RetainedSize;
 2395                    _additionalPairPages--;
 396                }
 397            }
 6126398            if (next == null || ReferenceEquals(next, shared))
 62399                return;
 6064400            _additionalPairBytes = checked(
 6064401                _additionalPairBytes + NavigationAutomaticSeamPairRecord.RetainedSize);
 6064402            _additionalPairPages++;
 6064403            if (shared == null || !ReferenceEquals(next.Pair, shared.Pair))
 404            {
 6039405                _additionalPairBytes = checked(
 6039406                    _additionalPairBytes + NavigationAutomaticSeamPair.RetainedSize);
 6039407                _additionalPairPages++;
 408            }
 6064409        }
 410
 411        private static void SetRow(
 412            NavigationCellAddress address,
 413            NavigationPagedSequence<NavigationAutomaticSeamPair> row,
 414            NavigationSeamEditTree<NavigationCellAddress, NavigationPagedSequence<NavigationAutomaticSeamPair>> source,
 415            NavigationSeamEditTree<NavigationCellAddress, NavigationPagedSequence<NavigationAutomaticSeamPair>>.Editor e
 416            ref long rowBytes,
 417            ref int rowPages,
 418            ref long additionalBytes,
 419            ref int additionalPages)
 420        {
 2003421            editor.TryGetValue(address, out NavigationPagedSequence<NavigationAutomaticSeamPair> prior);
 2003422            source.TryGetValue(address, out NavigationPagedSequence<NavigationAutomaticSeamPair> shared);
 2003423            prior ??= NavigationPagedSequence<NavigationAutomaticSeamPair>.Empty;
 2003424            shared ??= NavigationPagedSequence<NavigationAutomaticSeamPair>.Empty;
 2003425            ReplacePayload(
 2003426                prior,
 2003427                row,
 2003428                shared,
 2003429                row.RetainedBytes,
 2003430                row.PersistentPageCount,
 2003431                ref additionalBytes,
 2003432                ref additionalPages);
 2003433            rowBytes = checked(rowBytes - prior.RetainedBytes + row.RetainedBytes);
 2003434            rowPages = checked(rowPages - prior.PersistentPageCount + row.PersistentPageCount);
 2003435            if (row.Count == 0)
 115436                editor.Remove(address);
 437            else
 1888438                editor.Set(address, row);
 1888439        }
 440
 441        private static void ReplacePayload<T>(
 442            T prior,
 443            T next,
 444            T shared,
 445            long nextBytes,
 446            int nextPages,
 447            ref long bytes,
 448            ref int pages)
 449            where T : class
 450        {
 2372451            if (!ReferenceEquals(prior, shared))
 452            {
 3453                GetPayloadSize(prior, out long priorBytes, out int priorPages);
 3454                bytes -= priorBytes;
 3455                pages -= priorPages;
 456            }
 2372457            if (!ReferenceEquals(next, shared))
 458            {
 2371459                bytes = checked(bytes + nextBytes);
 2371460                pages = checked(pages + nextPages);
 461            }
 2372462        }
 463
 464        private static void GetPayloadSize<T>(T value, out long bytes, out int pages)
 465            where T : class
 466        {
 3467            if (value is NavigationPagedSequence<NavigationAutomaticSeamPair> seamRow)
 468            {
 2469                bytes = seamRow.RetainedBytes;
 2470                pages = seamRow.PersistentPageCount;
 2471                return;
 472            }
 1473            var linkRow = (NavigationPagedSequence<NavigationStructuralLink>)(object)value;
 1474            bytes = linkRow.RetainedBytes;
 1475            pages = linkRow.PersistentPageCount;
 1476        }
 477
 478        private static long GetSealedTreeBytes<TK, TV>(
 479            NavigationSeamEditTree<TK, TV>.Editor editor,
 480            int nodeBytes)
 481            where TK : struct, System.IComparable<TK>
 692482            where TV : class => editor.IsChanged
 692483                ? checked(32L + ((long)editor.OwnedNodeCount * nodeBytes))
 692484                : 0L;
 485
 486        private static int GetSealedTreePages<TK, TV>(
 487            NavigationSeamEditTree<TK, TV>.Editor editor)
 488            where TK : struct, System.IComparable<TK>
 692489            where TV : class => editor.IsChanged ? checked(1 + editor.OwnedNodeCount) : 0;
 490    }
 491}

Methods/Properties

.cctor()
.ctor(Trailblazer.Pathing.NavigationSeamEditTree`2<Trailblazer.Pathing.NavigationAutomaticSeamPairKey,Trailblazer.Pathing.NavigationAutomaticSeamPairRecord>,Trailblazer.Pathing.NavigationSeamEditTree`2<Trailblazer.Pathing.NavigationCellAddress,Trailblazer.Pathing.NavigationPagedSequence`1<Trailblazer.Pathing.NavigationAutomaticSeamPair>>,Trailblazer.Pathing.NavigationSeamEditTree`2<Trailblazer.Pathing.NavigationCellAddress,Trailblazer.Pathing.NavigationPagedSequence`1<Trailblazer.Pathing.NavigationAutomaticSeamPair>>,Trailblazer.Pathing.NavigationSeamEditTree`2<Trailblazer.Pathing.NavigationAutomaticSeamMapKey,Trailblazer.Pathing.NavigationPagedSequence`1<Trailblazer.Pathing.NavigationStructuralLink>>,System.Int64,System.Int64,System.Int64,System.Int64,System.Int32,System.Int32,System.Int32,System.Int32)
get_PairCount()
get_RetainedBytes()
get_PersistentPageCount()
TryGetPair(Trailblazer.Pathing.NavigationCellAddress,Trailblazer.Pathing.NavigationCellAddress,Trailblazer.Pathing.NavigationAutomaticSeamPair&)
TryGetPairRecord(Trailblazer.Pathing.NavigationAutomaticSeamPairKey,Trailblazer.Pathing.NavigationAutomaticSeamPairRecord&)
IsActive(Trailblazer.Pathing.NavigationAutomaticSeamRef)
GetDependencyRow(Trailblazer.Pathing.NavigationCellAddress)
GetActiveRow(Trailblazer.Pathing.NavigationCellAddress)
GetActiveEndpointEnumerator(Trailblazer.Pathing.NavigationCellAddress)
GetStructuralLinks(System.String)
Edit(Trailblazer.Pathing.NavigationSeamEditToken)
CreateDependencyCursor(System.Int32)
BeginDependencyRange(Trailblazer.Pathing.NavigationSeamEditTree`2/Cursor<Trailblazer.Pathing.NavigationCellAddress,Trailblazer.Pathing.NavigationPagedSequence`1<Trailblazer.Pathing.NavigationAutomaticSeamPair>>,System.String)
GetRow(Trailblazer.Pathing.NavigationSeamEditTree`2<Trailblazer.Pathing.NavigationCellAddress,Trailblazer.Pathing.NavigationPagedSequence`1<Trailblazer.Pathing.NavigationAutomaticSeamPair>>,Trailblazer.Pathing.NavigationCellAddress)
.ctor(Trailblazer.Pathing.NavigationCellAddress,Trailblazer.Pathing.NavigationPagedSequence`1<Trailblazer.Pathing.NavigationAutomaticSeamPair>)
MoveNext()
.ctor(Trailblazer.Pathing.NavigationAutomaticSeamIndex,Trailblazer.Pathing.NavigationSeamEditToken)
get_RetainedBytes()
get_PersistentPageCount()
get_IsChanged()
get_SealedAdditionalRetainedBytes()
get_SealedAdditionalPersistentPages()
SetPair(Trailblazer.Pathing.NavigationAutomaticSeamPairKey,Trailblazer.Pathing.NavigationAutomaticSeamPairRecord)
SetDependencyRow(Trailblazer.Pathing.NavigationCellAddress,Trailblazer.Pathing.NavigationPagedSequence`1<Trailblazer.Pathing.NavigationAutomaticSeamPair>)
SetActiveRow(Trailblazer.Pathing.NavigationCellAddress,Trailblazer.Pathing.NavigationPagedSequence`1<Trailblazer.Pathing.NavigationAutomaticSeamPair>)
SetStructuralLinks(System.String,Trailblazer.Pathing.NavigationPagedSequence`1<Trailblazer.Pathing.NavigationStructuralLink>)
Seal()
ReplacePairPayload(Trailblazer.Pathing.NavigationAutomaticSeamPairRecord,Trailblazer.Pathing.NavigationAutomaticSeamPairRecord,Trailblazer.Pathing.NavigationAutomaticSeamPairRecord)
SetRow(Trailblazer.Pathing.NavigationCellAddress,Trailblazer.Pathing.NavigationPagedSequence`1<Trailblazer.Pathing.NavigationAutomaticSeamPair>,Trailblazer.Pathing.NavigationSeamEditTree`2<Trailblazer.Pathing.NavigationCellAddress,Trailblazer.Pathing.NavigationPagedSequence`1<Trailblazer.Pathing.NavigationAutomaticSeamPair>>,Trailblazer.Pathing.NavigationSeamEditTree`2/Editor<Trailblazer.Pathing.NavigationCellAddress,Trailblazer.Pathing.NavigationPagedSequence`1<Trailblazer.Pathing.NavigationAutomaticSeamPair>>,System.Int64&,System.Int32&,System.Int64&,System.Int32&)
ReplacePayload(T,T,T,System.Int64,System.Int32,System.Int64&,System.Int32&)
GetPayloadSize(T,System.Int64&,System.Int32&)
GetSealedTreeBytes(Trailblazer.Pathing.NavigationSeamEditTree`2/Editor<TK,TV>,System.Int32)
GetSealedTreePages(Trailblazer.Pathing.NavigationSeamEditTree`2/Editor<TK,TV>)