From b5b363ae9fbcdf6d6e6ac8907403803ca9235370 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?linus=20bj=C3=B6rnstam?= Date: Tue, 28 Apr 2026 21:48:45 +0200 Subject: [PATCH] Changed some formatting --- PersistentMap/BTreeFunctions.cs | 20 ++++++++++++-------- PersistentMap/KeyStrategies/IntScanner.cs | 14 +++++++------- PersistentMap/Nodes.cs | 8 ++++---- 3 files changed, 23 insertions(+), 19 deletions(-) diff --git a/PersistentMap/BTreeFunctions.cs b/PersistentMap/BTreeFunctions.cs index ca199fc..4a7a41e 100644 --- a/PersistentMap/BTreeFunctions.cs +++ b/PersistentMap/BTreeFunctions.cs @@ -10,9 +10,12 @@ namespace PersistentMap // Public API // --------------------------------------------------------- + /// TryGetValue tries to get the value at mapping key. If it finds the key it sets th + /// out var to value and returns true. public static bool TryGetValue(Node root, K key, TStrategy strategy, out V value) where TStrategy : IKeyStrategy { + // We always get a strategy to avoid branching already here long keyPrefix = strategy.UsesPrefixes ? strategy.GetPrefix(key) : 0; Node current = root; @@ -43,6 +46,7 @@ namespace PersistentMap { root = root.EnsureEditable(owner); + // Todo, this should really be made a tuple return value to not stress the GC var splitResult = InsertRecursive(root, key, value, strategy, owner, out countChanged); if (splitResult != null) @@ -212,7 +216,7 @@ namespace PersistentMap where TStrategy : IKeyStrategy { -if (typeof(K) == typeof(int)) + if (typeof(K) == typeof(int)) { Span keys = node.GetKeys(); ref K firstKeyRef = ref MemoryMarshal.GetReference(keys); @@ -391,13 +395,13 @@ if (typeof(K) == typeof(int)) right.SetCount(moveCount); if (insertIndex < splitPoint || (splitPoint == 0 && insertIndex == 0)) -{ - InsertIntoLeaf(left, insertIndex, key, value, strategy); -} -else -{ - InsertIntoLeaf(right, insertIndex - splitPoint, key, value, strategy); -} + { + InsertIntoLeaf(left, insertIndex, key, value, strategy); + } + else + { + InsertIntoLeaf(right, insertIndex - splitPoint, key, value, strategy); + } return new SplitResult(right, right.Keys[0]); } diff --git a/PersistentMap/KeyStrategies/IntScanner.cs b/PersistentMap/KeyStrategies/IntScanner.cs index 3c19856..325436d 100644 --- a/PersistentMap/KeyStrategies/IntScanner.cs +++ b/PersistentMap/KeyStrategies/IntScanner.cs @@ -44,7 +44,7 @@ public static class IntScanner { var vData = Avx2.LoadVector256(ptr + i); var vResult = Avx2.CompareGreaterThan(vData, vTarget); - + // MoveMask creates a 32-bit integer from the most significant bit of each byte. var mask = (uint)Avx2.MoveMask(vResult.AsByte()); @@ -73,7 +73,7 @@ public static class IntScanner fixed (int* ptr = keys) { var vData = Avx512F.LoadVector512(ptr + i); - + // Vector512 API is used directly here to cleanly get the mask var mask = Vector512.GreaterThanOrEqual(vData, vTarget); @@ -88,7 +88,7 @@ public static class IntScanner return LinearScan(keys.Slice(i), target) + i; } - [MethodImpl(MethodImplOptions.AggressiveInlining)] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static int FindFirstGreater(ReadOnlySpan keys, int target) { if (!Avx2.IsSupported || keys.Length < 8) @@ -107,7 +107,7 @@ public static class IntScanner return i; return keys.Length; } - + [MethodImpl(MethodImplOptions.AggressiveInlining)] private static unsafe int ScanAvx2Greater(ReadOnlySpan keys, int target) { @@ -122,7 +122,7 @@ public static class IntScanner { var vData = Avx2.LoadVector256(ptr + i); var vResult = Avx2.CompareGreaterThan(vData, vTarget); - + var mask = (uint)Avx2.MoveMask(vResult.AsByte()); if (mask != 0) @@ -135,7 +135,7 @@ public static class IntScanner return LinearScanGreater(keys.Slice(i), target) + i; } -[MethodImpl(MethodImplOptions.AggressiveInlining)] + [MethodImpl(MethodImplOptions.AggressiveInlining)] private static unsafe int ScanAvx512Greater(ReadOnlySpan keys, int target) { var vTarget = Vector512.Create(target); @@ -147,7 +147,7 @@ public static class IntScanner fixed (int* ptr = keys) { var vData = Avx512F.LoadVector512(ptr + i); - + // Use GreaterThan instead of GreaterThanOrEqual var mask = Vector512.GreaterThan(vData, vTarget); diff --git a/PersistentMap/Nodes.cs b/PersistentMap/Nodes.cs index 1e1d6ba..59075c4 100644 --- a/PersistentMap/Nodes.cs +++ b/PersistentMap/Nodes.cs @@ -90,10 +90,10 @@ public abstract class Node } [MethodImpl(MethodImplOptions.AggressiveInlining)] -public PrefixInternalNode AsPrefixInternal() -{ - return Unsafe.As>(this); -} + public PrefixInternalNode AsPrefixInternal() + { + return Unsafe.As>(this); + } } public sealed class LeafNode : Node