<< protected with "checked", where needed.
This commit is contained in:
1 parent
262590ed6e
commit
39d63d1d65
7 files changed
+27
-27
No files matched your search
@@ -37,7 +37,7 @@ namespace Recyclable.Collections.Benchmarks.POC
|
|||||||
[GlobalSetup]
|
[GlobalSetup]
|
||||||
public void Setup()
|
public void Setup()
|
||||||
{
|
{
|
||||||
_cutoff = BlockSize << 4;
|
_cutoff = checked((long)BlockSize << 4);
|
||||||
_increment = Vector128.Create(-BlockSize, 1L);
|
_increment = Vector128.Create(-BlockSize, 1L);
|
||||||
_lastCaseIndex = 0;
|
_lastCaseIndex = 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ namespace Recyclable.Collections.Benchmarks.POC
|
|||||||
int result = 1;
|
int result = 1;
|
||||||
while (result < value)
|
while (result < value)
|
||||||
{
|
{
|
||||||
result <<= 1;
|
result = checked(result << 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ namespace Recyclable.Collections
|
|||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public static long DivMod(long number, int divider, out long remainder)
|
public static long DivMod(long number, int divider, out long remainder)
|
||||||
{
|
{
|
||||||
if (number >= divider << 4)
|
if (number >= checked((long)divider << 4))
|
||||||
{
|
{
|
||||||
return Math.DivRem(number, divider, out remainder);
|
return Math.DivRem(number, divider, out remainder);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ namespace Recyclable.Collections
|
|||||||
// TODO: Measure performance
|
// TODO: Measure performance
|
||||||
// T[] newMemoryBlock = RecyclableListHelpers<T>._arrayPool.Rent(_capacity <<= 1);
|
// T[] newMemoryBlock = RecyclableListHelpers<T>._arrayPool.Rent(_capacity <<= 1);
|
||||||
T[] oldMemoryBlock = list._memoryBlock;
|
T[] oldMemoryBlock = list._memoryBlock;
|
||||||
list._memoryBlock = (list._capacity <<= 1) < RecyclableDefaults.MinPooledArrayLength
|
list._memoryBlock = checked(list._capacity <<= 1) < RecyclableDefaults.MinPooledArrayLength
|
||||||
? new T[list._capacity]
|
? new T[list._capacity]
|
||||||
: RecyclableArrayPool<T>.RentShared(list._capacity);
|
: RecyclableArrayPool<T>.RentShared(list._capacity);
|
||||||
|
|
||||||
|
|||||||
@@ -192,7 +192,7 @@ namespace Recyclable.Collections
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return requiredBlockCount << minBlockSizePow2Shift;
|
return checked(requiredBlockCount << minBlockSizePow2Shift);
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma warning disable CA2208
|
#pragma warning disable CA2208
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ namespace Recyclable.Collections
|
|||||||
long index = Array.IndexOf(list._memoryBlocks[blockIndex], itemToFind, 0, list._blockSize);
|
long index = Array.IndexOf(list._memoryBlocks[blockIndex], itemToFind, 0, list._blockSize);
|
||||||
if (index >= 0 && (!context._isItemFound || index < context.FoundItemIndex))
|
if (index >= 0 && (!context._isItemFound || index < context.FoundItemIndex))
|
||||||
{
|
{
|
||||||
ExchangeFoundItemIndexIfLower(context, blockIndex, ((long)blockIndex << list._blockSizePow2BitShift) + index);
|
ExchangeFoundItemIndexIfLower(context, blockIndex, checked((long)blockIndex << list._blockSizePow2BitShift) + index);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if (context._isItemFound)
|
else if (context._isItemFound)
|
||||||
@@ -41,7 +41,7 @@ namespace Recyclable.Collections
|
|||||||
index = Array.IndexOf(list._memoryBlocks[blockIndex + 1], itemToFind, 0, list._blockSize);
|
index = Array.IndexOf(list._memoryBlocks[blockIndex + 1], itemToFind, 0, list._blockSize);
|
||||||
if (index >= 0)
|
if (index >= 0)
|
||||||
{
|
{
|
||||||
ExchangeFoundItemIndexIfLower(context, blockIndex + 1, ((long)(blockIndex + 1) << list._blockSizePow2BitShift) + index);
|
ExchangeFoundItemIndexIfLower(context, blockIndex + 1, checked((long)(blockIndex + 1) << list._blockSizePow2BitShift) + index);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if (context._isItemFound)
|
else if (context._isItemFound)
|
||||||
@@ -56,7 +56,7 @@ namespace Recyclable.Collections
|
|||||||
index = Array.IndexOf(list._memoryBlocks[blockIndex + 2], itemToFind, 0, list._blockSize);
|
index = Array.IndexOf(list._memoryBlocks[blockIndex + 2], itemToFind, 0, list._blockSize);
|
||||||
if (index >= 0 && (!context._isItemFound || index < context.FoundItemIndex))
|
if (index >= 0 && (!context._isItemFound || index < context.FoundItemIndex))
|
||||||
{
|
{
|
||||||
ExchangeFoundItemIndexIfLower(context, blockIndex + 2, ((long)(blockIndex + 2) << list._blockSizePow2BitShift) + index);
|
ExchangeFoundItemIndexIfLower(context, blockIndex + 2, checked((long)(blockIndex + 2) << list._blockSizePow2BitShift) + index);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if (context._isItemFound)
|
else if (context._isItemFound)
|
||||||
@@ -71,7 +71,7 @@ namespace Recyclable.Collections
|
|||||||
index = Array.IndexOf(list._memoryBlocks[blockIndex + 3], itemToFind, 0, list._blockSize);
|
index = Array.IndexOf(list._memoryBlocks[blockIndex + 3], itemToFind, 0, list._blockSize);
|
||||||
if (!context._isItemFound && index >= 0)
|
if (!context._isItemFound && index >= 0)
|
||||||
{
|
{
|
||||||
ExchangeFoundItemIndexIfLower(context, blockIndex + 3, ((long)(blockIndex + 3) << list._blockSizePow2BitShift) + index);
|
ExchangeFoundItemIndexIfLower(context, blockIndex + 3, checked((long)(blockIndex + 3) << list._blockSizePow2BitShift) + index);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -81,7 +81,7 @@ namespace Recyclable.Collections
|
|||||||
index = Array.IndexOf(list._memoryBlocks[blockIndex + 4], itemToFind, 0, list._blockSize);
|
index = Array.IndexOf(list._memoryBlocks[blockIndex + 4], itemToFind, 0, list._blockSize);
|
||||||
if (!context._isItemFound && index >= 0 && (!context._isItemFound || index < context.FoundItemIndex))
|
if (!context._isItemFound && index >= 0 && (!context._isItemFound || index < context.FoundItemIndex))
|
||||||
{
|
{
|
||||||
ExchangeFoundItemIndexIfLower(context, blockIndex + 4, ((long)(blockIndex + 4) << list._blockSizePow2BitShift) + index);
|
ExchangeFoundItemIndexIfLower(context, blockIndex + 4, checked((long)(blockIndex + 4) << list._blockSizePow2BitShift) + index);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -91,7 +91,7 @@ namespace Recyclable.Collections
|
|||||||
index = Array.IndexOf(list._memoryBlocks[blockIndex + 5], itemToFind, 0, list._blockSize);
|
index = Array.IndexOf(list._memoryBlocks[blockIndex + 5], itemToFind, 0, list._blockSize);
|
||||||
if (!context._isItemFound && index >= 0 && (!context._isItemFound || index < context.FoundItemIndex))
|
if (!context._isItemFound && index >= 0 && (!context._isItemFound || index < context.FoundItemIndex))
|
||||||
{
|
{
|
||||||
ExchangeFoundItemIndexIfLower(context, blockIndex + 5, ((long)(blockIndex + 5) << list._blockSizePow2BitShift) + index);
|
ExchangeFoundItemIndexIfLower(context, blockIndex + 5, checked((long)(blockIndex + 5) << list._blockSizePow2BitShift) + index);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -101,7 +101,7 @@ namespace Recyclable.Collections
|
|||||||
index = Array.IndexOf(list._memoryBlocks[blockIndex + 6], itemToFind, 0, list._blockSize);
|
index = Array.IndexOf(list._memoryBlocks[blockIndex + 6], itemToFind, 0, list._blockSize);
|
||||||
if (!context._isItemFound && index >= 0 && (!context._isItemFound || index < context.FoundItemIndex))
|
if (!context._isItemFound && index >= 0 && (!context._isItemFound || index < context.FoundItemIndex))
|
||||||
{
|
{
|
||||||
ExchangeFoundItemIndexIfLower(context, blockIndex + 6, ((long)(blockIndex + 6) << list._blockSizePow2BitShift) + index);
|
ExchangeFoundItemIndexIfLower(context, blockIndex + 6, checked((long)(blockIndex + 6) << list._blockSizePow2BitShift) + index);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -111,7 +111,7 @@ namespace Recyclable.Collections
|
|||||||
index = Array.IndexOf(list._memoryBlocks[blockIndex + 7], itemToFind, 0, list._blockSize);
|
index = Array.IndexOf(list._memoryBlocks[blockIndex + 7], itemToFind, 0, list._blockSize);
|
||||||
if (!context._isItemFound && index >= 0 && (!context._isItemFound || index < context.FoundItemIndex))
|
if (!context._isItemFound && index >= 0 && (!context._isItemFound || index < context.FoundItemIndex))
|
||||||
{
|
{
|
||||||
ExchangeFoundItemIndexIfLower(context, blockIndex + 7, ((long)(blockIndex + 7) << list._blockSizePow2BitShift) + index);
|
ExchangeFoundItemIndexIfLower(context, blockIndex + 7, checked((long)(blockIndex + 7) << list._blockSizePow2BitShift) + index);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -157,7 +157,7 @@ namespace Recyclable.Collections
|
|||||||
long index = Array.IndexOf(list._memoryBlocks[blockIndex], itemToFind, 0, list._blockSize);
|
long index = Array.IndexOf(list._memoryBlocks[blockIndex], itemToFind, 0, list._blockSize);
|
||||||
if (!context._isItemFound && index >= 0)
|
if (!context._isItemFound && index >= 0)
|
||||||
{
|
{
|
||||||
ExchangeFoundItemIndexIfLower(context, blockIndex, ((long)blockIndex << list._blockSizePow2BitShift) + index);
|
ExchangeFoundItemIndexIfLower(context, blockIndex, checked((long)blockIndex << list._blockSizePow2BitShift) + index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
@@ -214,8 +214,8 @@ namespace Recyclable.Collections
|
|||||||
// & WAS SLOWER
|
// & WAS SLOWER
|
||||||
// int blockSize = _blockSize;
|
// int blockSize = _blockSize;
|
||||||
// & WAS SLOWER
|
// & WAS SLOWER
|
||||||
// while ((blockIndex << list._blockSizePow2BitShift) + itemIndex > step)
|
// while (checked((long)blockIndex << list._blockSizePow2BitShift) + itemIndex > step)
|
||||||
//long blockSize = list._blockSize << 1;
|
//long blockSize = checked((long)list._blockSize << 1);
|
||||||
int lastBlockWithData = list._lastBlockWithData - BlocksForEachTask;
|
int lastBlockWithData = list._lastBlockWithData - BlocksForEachTask;
|
||||||
while (blockIndex < lastBlockWithData)
|
while (blockIndex < lastBlockWithData)
|
||||||
{
|
{
|
||||||
@@ -265,7 +265,7 @@ namespace Recyclable.Collections
|
|||||||
int itemIndex = Array.IndexOf(list._memoryBlocks[list._lastBlockWithData], item, 0, list._nextItemIndex > 0 ? list._nextItemIndex : list._blockSize);
|
int itemIndex = Array.IndexOf(list._memoryBlocks[list._lastBlockWithData], item, 0, list._nextItemIndex > 0 ? list._nextItemIndex : list._blockSize);
|
||||||
if (!context._isItemFound && itemIndex >= 0)
|
if (!context._isItemFound && itemIndex >= 0)
|
||||||
{
|
{
|
||||||
ExchangeFoundItemIndexIfLower(context, blockIndex, ((long)blockIndex << list._blockSizePow2BitShift) + itemIndex);
|
ExchangeFoundItemIndexIfLower(context, blockIndex, checked((long)blockIndex << list._blockSizePow2BitShift) + itemIndex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -307,7 +307,7 @@ namespace Recyclable.Collections
|
|||||||
itemIndex = Array.IndexOf(memoryBlocksSpan[blockIndex], item, 0, list._blockSize);
|
itemIndex = Array.IndexOf(memoryBlocksSpan[blockIndex], item, 0, list._blockSize);
|
||||||
if (itemIndex >= 0)
|
if (itemIndex >= 0)
|
||||||
{
|
{
|
||||||
return itemIndex + ((long)blockIndex << list._blockSizePow2BitShift);
|
return itemIndex + checked((long)blockIndex << list._blockSizePow2BitShift);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (blockIndex + 1 < list._lastBlockWithData)
|
if (blockIndex + 1 < list._lastBlockWithData)
|
||||||
@@ -315,7 +315,7 @@ namespace Recyclable.Collections
|
|||||||
itemIndex = Array.IndexOf(memoryBlocksSpan[blockIndex + 1], item, 0, list._blockSize);
|
itemIndex = Array.IndexOf(memoryBlocksSpan[blockIndex + 1], item, 0, list._blockSize);
|
||||||
if (itemIndex >= 0)
|
if (itemIndex >= 0)
|
||||||
{
|
{
|
||||||
return itemIndex + ((long)(blockIndex + 1)<< list._blockSizePow2BitShift);
|
return itemIndex + checked((long)(blockIndex + 1)<< list._blockSizePow2BitShift);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (blockIndex + 2 < list._lastBlockWithData)
|
if (blockIndex + 2 < list._lastBlockWithData)
|
||||||
@@ -323,7 +323,7 @@ namespace Recyclable.Collections
|
|||||||
itemIndex = Array.IndexOf(memoryBlocksSpan[blockIndex + 2], item, 0, list._blockSize);
|
itemIndex = Array.IndexOf(memoryBlocksSpan[blockIndex + 2], item, 0, list._blockSize);
|
||||||
if (itemIndex >= 0)
|
if (itemIndex >= 0)
|
||||||
{
|
{
|
||||||
return itemIndex + ((long)(blockIndex + 2)<< list._blockSizePow2BitShift);
|
return itemIndex + checked((long)(blockIndex + 2)<< list._blockSizePow2BitShift);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (blockIndex + 3 < list._lastBlockWithData)
|
if (blockIndex + 3 < list._lastBlockWithData)
|
||||||
@@ -331,7 +331,7 @@ namespace Recyclable.Collections
|
|||||||
itemIndex = Array.IndexOf(memoryBlocksSpan[blockIndex + 3], item, 0, list._blockSize);
|
itemIndex = Array.IndexOf(memoryBlocksSpan[blockIndex + 3], item, 0, list._blockSize);
|
||||||
if (itemIndex >= 0)
|
if (itemIndex >= 0)
|
||||||
{
|
{
|
||||||
return itemIndex + ((long)(blockIndex + 3)<< list._blockSizePow2BitShift);
|
return itemIndex + checked((long)(blockIndex + 3)<< list._blockSizePow2BitShift);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -342,7 +342,7 @@ namespace Recyclable.Collections
|
|||||||
? Array.IndexOf(memoryBlocksSpan[list._lastBlockWithData], item, 0, list._nextItemIndex)
|
? Array.IndexOf(memoryBlocksSpan[list._lastBlockWithData], item, 0, list._nextItemIndex)
|
||||||
: Array.IndexOf(memoryBlocksSpan[list._lastBlockWithData], item, 0, list._blockSize);
|
: Array.IndexOf(memoryBlocksSpan[list._lastBlockWithData], item, 0, list._blockSize);
|
||||||
|
|
||||||
return itemIndex >= 0 ? itemIndex + ((long)list._lastBlockWithData << list._blockSizePow2BitShift) : RecyclableDefaults.ItemNotFoundIndexLong;
|
return itemIndex >= 0 ? itemIndex + checked((long)list._lastBlockWithData << list._blockSizePow2BitShift) : RecyclableDefaults.ItemNotFoundIndexLong;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -183,7 +183,7 @@ namespace Recyclable.CollectionsTests
|
|||||||
{
|
{
|
||||||
// Prepare
|
// Prepare
|
||||||
using var list = new RecyclableList<long>();
|
using var list = new RecyclableList<long>();
|
||||||
itemsCount <<= 1;
|
itemsCount = checked(itemsCount << 1);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
if (testCase.Contains("Array[", StringComparison.OrdinalIgnoreCase))
|
if (testCase.Contains("Array[", StringComparison.OrdinalIgnoreCase))
|
||||||
@@ -275,7 +275,7 @@ namespace Recyclable.CollectionsTests
|
|||||||
// Prepare
|
// Prepare
|
||||||
using var list = new RecyclableList<long>();
|
using var list = new RecyclableList<long>();
|
||||||
testData = testData.Concat(testData.Reverse());
|
testData = testData.Concat(testData.Reverse());
|
||||||
itemsCount <<= 1;
|
itemsCount = checked(itemsCount << 1);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
foreach (var index in testData)
|
foreach (var index in testData)
|
||||||
@@ -340,7 +340,7 @@ namespace Recyclable.CollectionsTests
|
|||||||
{
|
{
|
||||||
// Prepare
|
// Prepare
|
||||||
using var list = new RecyclableList<long>();
|
using var list = new RecyclableList<long>();
|
||||||
itemsCount <<= 1;
|
itemsCount = checked(itemsCount << 1);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
list.AddRange(testData);
|
list.AddRange(testData);
|
||||||
@@ -416,7 +416,7 @@ namespace Recyclable.CollectionsTests
|
|||||||
{
|
{
|
||||||
// Prepare
|
// Prepare
|
||||||
testData = testData.Concat(testData.Reverse());
|
testData = testData.Concat(testData.Reverse());
|
||||||
itemsCount <<= 1;
|
itemsCount = checked(itemsCount << 1);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
using var list = new RecyclableList<long>(testData, itemsCount);
|
using var list = new RecyclableList<long>(testData, itemsCount);
|
||||||
@@ -1633,7 +1633,7 @@ namespace Recyclable.CollectionsTests
|
|||||||
{
|
{
|
||||||
// Prepare
|
// Prepare
|
||||||
using var list = new RecyclableList<long>(testData, itemsCount);
|
using var list = new RecyclableList<long>(testData, itemsCount);
|
||||||
var expectedCapacity = (int)BitOperations.RoundUpToPowerOf2((uint)itemsCount << 1);
|
var expectedCapacity = (int)BitOperations.RoundUpToPowerOf2(checked((uint)itemsCount << 1));
|
||||||
expectedCapacity = expectedCapacity >= RecyclableDefaults.InitialCapacity ? expectedCapacity : RecyclableDefaults.InitialCapacity;
|
expectedCapacity = expectedCapacity >= RecyclableDefaults.InitialCapacity ? expectedCapacity : RecyclableDefaults.InitialCapacity;
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
|
|||||||
Reference in new issue
Block a user