SetupBlockArrayPooling method removed for better performance.
This commit is contained in:
1 parent
56f79c4f21
commit
4b2722f15a
2 files changed
+86
-57
No files matched your search
@@ -195,13 +195,6 @@ namespace Recyclable.Collections
|
|||||||
return requiredBlockCount << minBlockSizePow2Shift;
|
return requiredBlockCount << minBlockSizePow2Shift;
|
||||||
}
|
}
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
|
|
||||||
public static void SetupBlockArrayPooling(RecyclableLongList<T> list, int blockSize)
|
|
||||||
{
|
|
||||||
list._blockSize = blockSize;
|
|
||||||
list._blockSizePow2BitShift = (byte)(31 - BitOperations.LeadingZeroCount((uint)blockSize));
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma warning disable CA2208
|
#pragma warning disable CA2208
|
||||||
public static void ThrowIndexOutOfRangeException(in string message) => throw new ArgumentOutOfRangeException("index", message);
|
public static void ThrowIndexOutOfRangeException(in string message) => throw new ArgumentOutOfRangeException("index", message);
|
||||||
#pragma warning restore CA2208
|
#pragma warning restore CA2208
|
||||||
|
|||||||
@@ -67,10 +67,14 @@ namespace Recyclable.Collections
|
|||||||
|
|
||||||
public RecyclableLongList(in T[] source, int minBlockSize = RecyclableDefaults.BlockSize)
|
public RecyclableLongList(in T[] source, int minBlockSize = RecyclableDefaults.BlockSize)
|
||||||
{
|
{
|
||||||
minBlockSize = checked((int)BitOperations.RoundUpToPowerOf2((uint)minBlockSize));
|
if (!BitOperations.IsPow2(minBlockSize))
|
||||||
|
{
|
||||||
|
minBlockSize = checked((int)BitOperations.RoundUpToPowerOf2((uint)minBlockSize));
|
||||||
|
}
|
||||||
|
|
||||||
Helpers.SetupBlockArrayPooling(this, minBlockSize);
|
_blockSizePow2BitShift = (byte)(31 - BitOperations.LeadingZeroCount((uint)minBlockSize));
|
||||||
_capacity = Helpers.Resize(this, minBlockSize, _blockSizePow2BitShift, checked((long)BitOperations.RoundUpToPowerOf2((ulong)source.LongLength)));
|
_capacity = RecyclableLongList<T>.Helpers.Resize(this, minBlockSize, _blockSizePow2BitShift, checked((long)BitOperations.RoundUpToPowerOf2((ulong)source.LongLength)));
|
||||||
|
_blockSize = minBlockSize;
|
||||||
_blockSizeMinus1 = minBlockSize - 1;
|
_blockSizeMinus1 = minBlockSize - 1;
|
||||||
|
|
||||||
zRecyclableLongListAddRange.AddRange(this, source);
|
zRecyclableLongListAddRange.AddRange(this, source);
|
||||||
@@ -78,10 +82,14 @@ namespace Recyclable.Collections
|
|||||||
|
|
||||||
public RecyclableLongList(in Array source, int minBlockSize = RecyclableDefaults.BlockSize)
|
public RecyclableLongList(in Array source, int minBlockSize = RecyclableDefaults.BlockSize)
|
||||||
{
|
{
|
||||||
minBlockSize = checked((int)BitOperations.RoundUpToPowerOf2((uint)minBlockSize));
|
if (!BitOperations.IsPow2(minBlockSize))
|
||||||
|
{
|
||||||
|
minBlockSize = checked((int)BitOperations.RoundUpToPowerOf2((uint)minBlockSize));
|
||||||
|
}
|
||||||
|
|
||||||
Helpers.SetupBlockArrayPooling(this, minBlockSize);
|
_blockSizePow2BitShift = (byte)(31 - BitOperations.LeadingZeroCount((uint)minBlockSize));
|
||||||
_capacity = Helpers.Resize(this, minBlockSize, _blockSizePow2BitShift, checked((long)BitOperations.RoundUpToPowerOf2((ulong)source.LongLength)));
|
_capacity = RecyclableLongList<T>.Helpers.Resize(this, minBlockSize, _blockSizePow2BitShift, checked((long)BitOperations.RoundUpToPowerOf2((ulong)source.LongLength)));
|
||||||
|
_blockSize = minBlockSize;
|
||||||
_blockSizeMinus1 = minBlockSize - 1;
|
_blockSizeMinus1 = minBlockSize - 1;
|
||||||
|
|
||||||
zRecyclableLongListAddRange.AddRange(this, source);
|
zRecyclableLongListAddRange.AddRange(this, source);
|
||||||
@@ -89,10 +97,14 @@ namespace Recyclable.Collections
|
|||||||
|
|
||||||
public RecyclableLongList(IReadOnlyList<T> source, int minBlockSize = RecyclableDefaults.BlockSize)
|
public RecyclableLongList(IReadOnlyList<T> source, int minBlockSize = RecyclableDefaults.BlockSize)
|
||||||
{
|
{
|
||||||
minBlockSize = checked((int)BitOperations.RoundUpToPowerOf2((uint)minBlockSize));
|
if (!BitOperations.IsPow2(minBlockSize))
|
||||||
|
{
|
||||||
|
minBlockSize = checked((int)BitOperations.RoundUpToPowerOf2((uint)minBlockSize));
|
||||||
|
}
|
||||||
|
|
||||||
Helpers.SetupBlockArrayPooling(this, minBlockSize);
|
_blockSizePow2BitShift = (byte)(31 - BitOperations.LeadingZeroCount((uint)minBlockSize));
|
||||||
_capacity = Helpers.Resize(this, minBlockSize, _blockSizePow2BitShift, BitOperations.RoundUpToPowerOf2((uint)source.Count));
|
_capacity = RecyclableLongList<T>.Helpers.Resize(this, minBlockSize, _blockSizePow2BitShift, checked((long)BitOperations.RoundUpToPowerOf2((ulong)source.Count)));
|
||||||
|
_blockSize = minBlockSize;
|
||||||
_blockSizeMinus1 = minBlockSize - 1;
|
_blockSizeMinus1 = minBlockSize - 1;
|
||||||
|
|
||||||
zRecyclableLongListAddRange.AddRange(this, source);
|
zRecyclableLongListAddRange.AddRange(this, source);
|
||||||
@@ -100,10 +112,14 @@ namespace Recyclable.Collections
|
|||||||
|
|
||||||
public RecyclableLongList(ReadOnlySpan<T> source, int minBlockSize = RecyclableDefaults.BlockSize)
|
public RecyclableLongList(ReadOnlySpan<T> source, int minBlockSize = RecyclableDefaults.BlockSize)
|
||||||
{
|
{
|
||||||
minBlockSize = checked((int)BitOperations.RoundUpToPowerOf2((uint)minBlockSize));
|
if (!BitOperations.IsPow2(minBlockSize))
|
||||||
|
{
|
||||||
|
minBlockSize = checked((int)BitOperations.RoundUpToPowerOf2((uint)minBlockSize));
|
||||||
|
}
|
||||||
|
|
||||||
Helpers.SetupBlockArrayPooling(this, minBlockSize);
|
_blockSizePow2BitShift = (byte)(31 - BitOperations.LeadingZeroCount((uint)minBlockSize));
|
||||||
_capacity = Helpers.Resize(this, minBlockSize, _blockSizePow2BitShift, checked((long)BitOperations.RoundUpToPowerOf2((ulong)source.Length)));
|
_capacity = RecyclableLongList<T>.Helpers.Resize(this, minBlockSize, _blockSizePow2BitShift, checked((long)BitOperations.RoundUpToPowerOf2((ulong)source.Length)));
|
||||||
|
_blockSize = minBlockSize;
|
||||||
_blockSizeMinus1 = minBlockSize - 1;
|
_blockSizeMinus1 = minBlockSize - 1;
|
||||||
|
|
||||||
zRecyclableLongListAddRange.AddRange(this, source);
|
zRecyclableLongListAddRange.AddRange(this, source);
|
||||||
@@ -111,10 +127,14 @@ namespace Recyclable.Collections
|
|||||||
|
|
||||||
public RecyclableLongList(RecyclableList<T> source, int minBlockSize = RecyclableDefaults.BlockSize)
|
public RecyclableLongList(RecyclableList<T> source, int minBlockSize = RecyclableDefaults.BlockSize)
|
||||||
{
|
{
|
||||||
minBlockSize = checked((int)BitOperations.RoundUpToPowerOf2((uint)minBlockSize));
|
if (!BitOperations.IsPow2(minBlockSize))
|
||||||
|
{
|
||||||
|
minBlockSize = checked((int)BitOperations.RoundUpToPowerOf2((uint)minBlockSize));
|
||||||
|
}
|
||||||
|
|
||||||
Helpers.SetupBlockArrayPooling(this, minBlockSize);
|
_blockSizePow2BitShift = (byte)(31 - BitOperations.LeadingZeroCount((uint)minBlockSize));
|
||||||
_capacity = Helpers.Resize(this, minBlockSize, _blockSizePow2BitShift, BitOperations.RoundUpToPowerOf2((uint)source.Count));
|
_capacity = RecyclableLongList<T>.Helpers.Resize(this, minBlockSize, _blockSizePow2BitShift, checked((long)BitOperations.RoundUpToPowerOf2((ulong)source.Count)));
|
||||||
|
_blockSize = minBlockSize;
|
||||||
_blockSizeMinus1 = minBlockSize - 1;
|
_blockSizeMinus1 = minBlockSize - 1;
|
||||||
|
|
||||||
zRecyclableLongListAddRange.AddRange(this, source);
|
zRecyclableLongListAddRange.AddRange(this, source);
|
||||||
@@ -122,10 +142,14 @@ namespace Recyclable.Collections
|
|||||||
|
|
||||||
public RecyclableLongList(RecyclableLongList<T> source, int minBlockSize = RecyclableDefaults.BlockSize)
|
public RecyclableLongList(RecyclableLongList<T> source, int minBlockSize = RecyclableDefaults.BlockSize)
|
||||||
{
|
{
|
||||||
minBlockSize = checked((int)BitOperations.RoundUpToPowerOf2((uint)minBlockSize));
|
if (!BitOperations.IsPow2(minBlockSize))
|
||||||
|
{
|
||||||
|
minBlockSize = checked((int)BitOperations.RoundUpToPowerOf2((uint)minBlockSize));
|
||||||
|
}
|
||||||
|
|
||||||
Helpers.SetupBlockArrayPooling(this, minBlockSize);
|
_blockSizePow2BitShift = (byte)(31 - BitOperations.LeadingZeroCount((uint)minBlockSize));
|
||||||
_capacity = Helpers.Resize(this, minBlockSize, _blockSizePow2BitShift, checked((long)BitOperations.RoundUpToPowerOf2((ulong)source.Count)));
|
_capacity = RecyclableLongList<T>.Helpers.Resize(this, minBlockSize, _blockSizePow2BitShift, checked((long)BitOperations.RoundUpToPowerOf2((ulong)source.Count)));
|
||||||
|
_blockSize = minBlockSize;
|
||||||
_blockSizeMinus1 = minBlockSize - 1;
|
_blockSizeMinus1 = minBlockSize - 1;
|
||||||
|
|
||||||
zRecyclableLongListAddRange.AddRange(this, source);
|
zRecyclableLongListAddRange.AddRange(this, source);
|
||||||
@@ -133,10 +157,14 @@ namespace Recyclable.Collections
|
|||||||
|
|
||||||
public RecyclableLongList(Span<T> source, int minBlockSize = RecyclableDefaults.BlockSize)
|
public RecyclableLongList(Span<T> source, int minBlockSize = RecyclableDefaults.BlockSize)
|
||||||
{
|
{
|
||||||
minBlockSize = checked((int)BitOperations.RoundUpToPowerOf2((uint)minBlockSize));
|
if (!BitOperations.IsPow2(minBlockSize))
|
||||||
|
{
|
||||||
|
minBlockSize = checked((int)BitOperations.RoundUpToPowerOf2((uint)minBlockSize));
|
||||||
|
}
|
||||||
|
|
||||||
Helpers.SetupBlockArrayPooling(this, minBlockSize);
|
_blockSizePow2BitShift = (byte)(31 - BitOperations.LeadingZeroCount((uint)minBlockSize));
|
||||||
_capacity = Helpers.Resize(this, minBlockSize, _blockSizePow2BitShift, checked((long)BitOperations.RoundUpToPowerOf2((ulong)source.Length)));
|
_capacity = RecyclableLongList<T>.Helpers.Resize(this, minBlockSize, _blockSizePow2BitShift, checked((long)BitOperations.RoundUpToPowerOf2((ulong)source.Length)));
|
||||||
|
_blockSize = minBlockSize;
|
||||||
_blockSizeMinus1 = minBlockSize - 1;
|
_blockSizeMinus1 = minBlockSize - 1;
|
||||||
|
|
||||||
zRecyclableLongListAddRange.AddRange(this, source);
|
zRecyclableLongListAddRange.AddRange(this, source);
|
||||||
@@ -144,10 +172,14 @@ namespace Recyclable.Collections
|
|||||||
|
|
||||||
public RecyclableLongList(List<T> source, int minBlockSize = RecyclableDefaults.BlockSize)
|
public RecyclableLongList(List<T> source, int minBlockSize = RecyclableDefaults.BlockSize)
|
||||||
{
|
{
|
||||||
minBlockSize = checked((int)BitOperations.RoundUpToPowerOf2((uint)minBlockSize));
|
if (!BitOperations.IsPow2(minBlockSize))
|
||||||
|
{
|
||||||
|
minBlockSize = checked((int)BitOperations.RoundUpToPowerOf2((uint)minBlockSize));
|
||||||
|
}
|
||||||
|
|
||||||
Helpers.SetupBlockArrayPooling(this, minBlockSize);
|
_blockSizePow2BitShift = (byte)(31 - BitOperations.LeadingZeroCount((uint)minBlockSize));
|
||||||
_capacity = Helpers.Resize(this, minBlockSize, _blockSizePow2BitShift, BitOperations.RoundUpToPowerOf2((uint)source.Count));
|
_capacity = RecyclableLongList<T>.Helpers.Resize(this, minBlockSize, _blockSizePow2BitShift, checked((long)BitOperations.RoundUpToPowerOf2((ulong)source.Count)));
|
||||||
|
_blockSize = minBlockSize;
|
||||||
_blockSizeMinus1 = minBlockSize - 1;
|
_blockSizeMinus1 = minBlockSize - 1;
|
||||||
|
|
||||||
zRecyclableLongListAddRange.AddRange(this, source);
|
zRecyclableLongListAddRange.AddRange(this, source);
|
||||||
@@ -155,10 +187,14 @@ namespace Recyclable.Collections
|
|||||||
|
|
||||||
public RecyclableLongList(ICollection source, int minBlockSize = RecyclableDefaults.BlockSize)
|
public RecyclableLongList(ICollection source, int minBlockSize = RecyclableDefaults.BlockSize)
|
||||||
{
|
{
|
||||||
minBlockSize = checked((int)BitOperations.RoundUpToPowerOf2((uint)minBlockSize));
|
if (!BitOperations.IsPow2(minBlockSize))
|
||||||
|
{
|
||||||
|
minBlockSize = checked((int)BitOperations.RoundUpToPowerOf2((uint)minBlockSize));
|
||||||
|
}
|
||||||
|
|
||||||
Helpers.SetupBlockArrayPooling(this, minBlockSize);
|
_blockSizePow2BitShift = (byte)(31 - BitOperations.LeadingZeroCount((uint)minBlockSize));
|
||||||
_capacity = Helpers.Resize(this, minBlockSize, _blockSizePow2BitShift, BitOperations.RoundUpToPowerOf2((uint)source.Count));
|
_capacity = RecyclableLongList<T>.Helpers.Resize(this, minBlockSize, _blockSizePow2BitShift, checked((long)BitOperations.RoundUpToPowerOf2((ulong)source.Count)));
|
||||||
|
_blockSize = minBlockSize;
|
||||||
_blockSizeMinus1 = minBlockSize - 1;
|
_blockSizeMinus1 = minBlockSize - 1;
|
||||||
|
|
||||||
zRecyclableLongListAddRange.AddRange(this, source);
|
zRecyclableLongListAddRange.AddRange(this, source);
|
||||||
@@ -166,46 +202,46 @@ namespace Recyclable.Collections
|
|||||||
|
|
||||||
public RecyclableLongList(ICollection<T> source, int minBlockSize = RecyclableDefaults.BlockSize)
|
public RecyclableLongList(ICollection<T> source, int minBlockSize = RecyclableDefaults.BlockSize)
|
||||||
{
|
{
|
||||||
minBlockSize = checked((int)BitOperations.RoundUpToPowerOf2((uint)minBlockSize));
|
if (!BitOperations.IsPow2(minBlockSize))
|
||||||
|
{
|
||||||
|
minBlockSize = checked((int)BitOperations.RoundUpToPowerOf2((uint)minBlockSize));
|
||||||
|
}
|
||||||
|
|
||||||
Helpers.SetupBlockArrayPooling(this, minBlockSize);
|
_blockSizePow2BitShift = (byte)(31 - BitOperations.LeadingZeroCount((uint)minBlockSize));
|
||||||
_capacity = Helpers.Resize(this, minBlockSize, _blockSizePow2BitShift, BitOperations.RoundUpToPowerOf2((uint)source.Count));
|
_capacity = RecyclableLongList<T>.Helpers.Resize(this, minBlockSize, _blockSizePow2BitShift, checked((long)BitOperations.RoundUpToPowerOf2((ulong)source.Count)));
|
||||||
|
_blockSize = minBlockSize;
|
||||||
_blockSizeMinus1 = minBlockSize - 1;
|
_blockSizeMinus1 = minBlockSize - 1;
|
||||||
|
|
||||||
zRecyclableLongListAddRange.AddRange(this, source);
|
zRecyclableLongListAddRange.AddRange(this, source);
|
||||||
}
|
}
|
||||||
|
|
||||||
public RecyclableLongList(IEnumerable source, int minBlockSize = RecyclableDefaults.BlockSize, long? initialCapacity = default)
|
public RecyclableLongList(IEnumerable source, int minBlockSize = RecyclableDefaults.BlockSize, long initialCapacity = RecyclableDefaults.InitialCapacity)
|
||||||
{
|
{
|
||||||
Helpers.SetupBlockArrayPooling(this, minBlockSize = checked((int)BitOperations.RoundUpToPowerOf2((uint)minBlockSize)));
|
if (!BitOperations.IsPow2(minBlockSize))
|
||||||
if (initialCapacity > 0)
|
|
||||||
{
|
{
|
||||||
_capacity = Helpers.Resize(this, minBlockSize, _blockSizePow2BitShift, checked((int)BitOperations.RoundUpToPowerOf2((uint)initialCapacity.Value)));
|
minBlockSize = checked((int)BitOperations.RoundUpToPowerOf2((uint)minBlockSize));
|
||||||
_blockSizeMinus1 = minBlockSize - 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_blockSizeMinus1 = _blockSize - 1;
|
|
||||||
_memoryBlocks = _emptyMemoryBlocksArray;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_blockSizePow2BitShift = (byte)(31 - BitOperations.LeadingZeroCount((uint)minBlockSize));
|
||||||
|
_capacity = RecyclableLongList<T>.Helpers.Resize(this, minBlockSize, _blockSizePow2BitShift, checked((long)BitOperations.RoundUpToPowerOf2((ulong)initialCapacity)));
|
||||||
|
_blockSize = minBlockSize;
|
||||||
|
_blockSizeMinus1 = minBlockSize - 1;
|
||||||
|
|
||||||
zRecyclableLongListAddRange.AddRange(this, source);
|
zRecyclableLongListAddRange.AddRange(this, source);
|
||||||
}
|
}
|
||||||
|
|
||||||
public RecyclableLongList(IEnumerable<T> source, int minBlockSize = RecyclableDefaults.BlockSize, long? initialCapacity = default)
|
public RecyclableLongList(IEnumerable<T> source, int minBlockSize = RecyclableDefaults.BlockSize, long initialCapacity = RecyclableDefaults.InitialCapacity)
|
||||||
{
|
{
|
||||||
Helpers.SetupBlockArrayPooling(this, minBlockSize = checked((int)BitOperations.RoundUpToPowerOf2((uint)minBlockSize)));
|
if (!BitOperations.IsPow2(minBlockSize))
|
||||||
if (initialCapacity > 0)
|
|
||||||
{
|
{
|
||||||
_capacity = Helpers.Resize(this, minBlockSize, _blockSizePow2BitShift, checked((int)BitOperations.RoundUpToPowerOf2((uint)initialCapacity.Value)));
|
minBlockSize = checked((int)BitOperations.RoundUpToPowerOf2((uint)minBlockSize));
|
||||||
_blockSizeMinus1 = minBlockSize - 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_blockSizeMinus1 = _blockSize - 1;
|
|
||||||
_memoryBlocks = _emptyMemoryBlocksArray;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_blockSizePow2BitShift = (byte)(31 - BitOperations.LeadingZeroCount((uint)minBlockSize));
|
||||||
|
_capacity = RecyclableLongList<T>.Helpers.Resize(this, minBlockSize, _blockSizePow2BitShift, checked((long)BitOperations.RoundUpToPowerOf2((ulong)initialCapacity)));
|
||||||
|
_blockSize = minBlockSize;
|
||||||
|
_blockSizeMinus1 = minBlockSize - 1;
|
||||||
|
|
||||||
zRecyclableLongListAddRange.AddRange(this, source);
|
zRecyclableLongListAddRange.AddRange(this, source);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user