Skip to content

Commit 184aab9

Browse files
committed
Cleanup how the processed variable is used and fix ExceptWith leaving uninitialized data
1 parent 0885656 commit 184aab9

1 file changed

Lines changed: 17 additions & 14 deletions

File tree

Exanite.Core/Collections/BitSet.cs

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -198,9 +198,9 @@ public void UnionWith(IReadOnlyBitSet other, BitSet results)
198198
var resultsSpan = results.chunks.AsSpan();
199199

200200
// Process the overlapping region
201-
var processed = 0;
202201
var overlapChunkCount = M.Min(selfSpan.Length, otherSpan.Length);
203202
{
203+
var processed = 0;
204204
if (Vector.IsHardwareAccelerated && overlapChunkCount >= Vector<ulong>.Count)
205205
{
206206
var selfVectorSpan = MemoryMarshal.Cast<ulong, Vector<ulong>>(selfSpan);
@@ -229,6 +229,7 @@ public void UnionWith(IReadOnlyBitSet other, BitSet results)
229229
var remainingOtherSpan = otherSpan[overlapChunkCount..];
230230
var remainingResultsSpan = resultsSpan[overlapChunkCount..];
231231
{
232+
var processed = 0;
232233
if (Vector.IsHardwareAccelerated && remainingOtherSpan.Length >= Vector<ulong>.Count)
233234
{
234235
var otherVectorSpan = MemoryMarshal.Cast<ulong, Vector<ulong>>(remainingOtherSpan);
@@ -244,8 +245,8 @@ public void UnionWith(IReadOnlyBitSet other, BitSet results)
244245

245246
for (var i = processed; i < remainingOtherSpan.Length; i++)
246247
{
247-
var otherChunk = otherSpan[i];
248-
resultsSpan[i] = otherChunk;
248+
var otherChunk = remainingOtherSpan[i];
249+
remainingResultsSpan[i] = otherChunk;
249250
}
250251
}
251252

@@ -271,8 +272,8 @@ public void IntersectWith(IReadOnlyBitSet other, BitSet results)
271272
var resultsSpan = results.chunks.AsSpan();
272273

273274
// Process the overlapping region
274-
var processed = 0;
275275
{
276+
var processed = 0;
276277
if (Vector.IsHardwareAccelerated && resultChunkCount >= Vector<ulong>.Count)
277278
{
278279
var selfVectorSpan = MemoryMarshal.Cast<ulong, Vector<ulong>>(selfSpan);
@@ -314,14 +315,14 @@ public void ExceptWith(IReadOnlyBitSet other, BitSet results)
314315
var selfSpan = Chunks;
315316
var otherSpan = other.Chunks;
316317

317-
var resultChunkCount = M.Max(selfSpan.Length, otherSpan.Length);
318+
var resultChunkCount = selfSpan.Length;
318319
results.EnsureCapacity(resultChunkCount);
319320
var resultsSpan = results.chunks.AsSpan();
320321

321322
// Process the overlapping region
322-
var processed = 0;
323323
var overlapChunkCount = M.Min(selfSpan.Length, otherSpan.Length);
324324
{
325+
var processed = 0;
325326
if (Vector.IsHardwareAccelerated && overlapChunkCount >= Vector<ulong>.Count)
326327
{
327328
var selfVectorSpan = MemoryMarshal.Cast<ulong, Vector<ulong>>(selfSpan);
@@ -350,6 +351,7 @@ public void ExceptWith(IReadOnlyBitSet other, BitSet results)
350351
var remainingSelfSpan = selfSpan[overlapChunkCount..];
351352
var remainingResultsSpan = resultsSpan[overlapChunkCount..];
352353
{
354+
var processed = 0;
353355
if (Vector.IsHardwareAccelerated && remainingSelfSpan.Length >= Vector<ulong>.Count)
354356
{
355357
var selfVectorSpan = MemoryMarshal.Cast<ulong, Vector<ulong>>(remainingSelfSpan);
@@ -365,8 +367,8 @@ public void ExceptWith(IReadOnlyBitSet other, BitSet results)
365367

366368
for (var i = processed; i < remainingSelfSpan.Length; i++)
367369
{
368-
var selfChunk = otherSpan[i];
369-
resultsSpan[i] = selfChunk;
370+
var selfChunk = remainingSelfSpan[i];
371+
remainingResultsSpan[i] = selfChunk;
370372
}
371373
}
372374

@@ -400,9 +402,9 @@ public void SymmetricExceptWith(IReadOnlyBitSet other, BitSet results)
400402
var resultsSpan = results.chunks.AsSpan();
401403

402404
// Process the overlapping region
403-
var processed = 0;
404405
var overlapChunkCount = M.Min(selfSpan.Length, otherSpan.Length);
405406
{
407+
var processed = 0;
406408
if (Vector.IsHardwareAccelerated && overlapChunkCount >= Vector<ulong>.Count)
407409
{
408410
var selfVectorSpan = MemoryMarshal.Cast<ulong, Vector<ulong>>(selfSpan);
@@ -431,6 +433,7 @@ public void SymmetricExceptWith(IReadOnlyBitSet other, BitSet results)
431433
var remainingOtherSpan = otherSpan[overlapChunkCount..];
432434
var remainingResultsSpan = resultsSpan[overlapChunkCount..];
433435
{
436+
var processed = 0;
434437
if (Vector.IsHardwareAccelerated && remainingOtherSpan.Length >= Vector<ulong>.Count)
435438
{
436439
var otherVectorSpan = MemoryMarshal.Cast<ulong, Vector<ulong>>(remainingOtherSpan);
@@ -446,8 +449,8 @@ public void SymmetricExceptWith(IReadOnlyBitSet other, BitSet results)
446449

447450
for (var i = processed; i < remainingOtherSpan.Length; i++)
448451
{
449-
var otherChunk = otherSpan[i];
450-
resultsSpan[i] = otherChunk;
452+
var otherChunk = remainingOtherSpan[i];
453+
remainingResultsSpan[i] = otherChunk;
451454
}
452455
}
453456

@@ -479,9 +482,9 @@ public bool IsSupersetOf(IReadOnlyBitSet other)
479482
var otherSpan = other.Chunks;
480483

481484
// Process the overlapping region
482-
var processed = 0;
483485
var overlapChunkCount = M.Min(selfSpan.Length, otherSpan.Length);
484486
{
487+
var processed = 0;
485488
if (Vector.IsHardwareAccelerated && overlapChunkCount >= Vector<ulong>.Count)
486489
{
487490
var selfVectorSpan = MemoryMarshal.Cast<ulong, Vector<ulong>>(selfSpan);
@@ -547,9 +550,9 @@ public bool Overlaps(IReadOnlyBitSet other)
547550
var otherSpan = other.Chunks;
548551

549552
// Process the overlapping region
550-
var processed = 0;
551553
var overlapChunkCount = M.Min(selfSpan.Length, otherSpan.Length);
552554
{
555+
var processed = 0;
553556
if (Vector.IsHardwareAccelerated && overlapChunkCount >= Vector<ulong>.Count)
554557
{
555558
var selfVectorSpan = MemoryMarshal.Cast<ulong, Vector<ulong>>(selfSpan);
@@ -596,9 +599,9 @@ public bool SetEquals(IReadOnlyBitSet other)
596599
}
597600

598601
// Process the overlapping region
599-
var processed = 0;
600602
var overlapChunkCount = M.Min(selfSpan.Length, otherSpan.Length);
601603
{
604+
var processed = 0;
602605
if (Vector.IsHardwareAccelerated && overlapChunkCount >= Vector<ulong>.Count)
603606
{
604607
var selfVectorSpan = MemoryMarshal.Cast<ulong, Vector<ulong>>(selfSpan);

0 commit comments

Comments
 (0)