Skip to content

Commit b997777

Browse files
authored
buffer (#188)
* buffer * bkrd sched * tests
1 parent e0dc839 commit b997777

File tree

7 files changed

+38
-34
lines changed

7 files changed

+38
-34
lines changed

BitFaster.Caching.UnitTests/BoundedBufferTests.cs renamed to BitFaster.Caching.UnitTests/Buffers/BoundedBufferTests.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@
44
using System.Linq;
55
using System.Text;
66
using System.Threading.Tasks;
7+
using BitFaster.Caching.Buffers;
78
using FluentAssertions;
89
using Xunit;
910

10-
namespace BitFaster.Caching.UnitTests
11+
namespace BitFaster.Caching.UnitTests.Buffers
1112
{
1213
public class BoundedBufferTests
1314
{
@@ -47,7 +48,7 @@ public void WhenBufferHas15ItemCountIs15()
4748
buffer.TryAdd(0).Should().Be(BufferStatus.Success);
4849
buffer.TryTake(out var _).Should().Be(BufferStatus.Success);
4950

50-
for (int i = 0; i < 15; i++)
51+
for (var i = 0; i < 15; i++)
5152
{
5253
buffer.TryAdd(0).Should().Be(BufferStatus.Success);
5354
}
@@ -59,7 +60,7 @@ public void WhenBufferHas15ItemCountIs15()
5960
[Fact]
6061
public void WhenBufferIsFullTryAddIsFalse()
6162
{
62-
for (int i = 0; i < 16; i++)
63+
for (var i = 0; i < 16; i++)
6364
{
6465
buffer.TryAdd(i).Should().Be(BufferStatus.Success);
6566
}

BitFaster.Caching.UnitTests/StripedBufferTests.cs renamed to BitFaster.Caching.UnitTests/Buffers/StripedBufferTests.cs

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@
33
using System.Linq;
44
using System.Text;
55
using System.Threading.Tasks;
6+
using BitFaster.Caching.Buffers;
67
using FluentAssertions;
78
using Xunit;
89

9-
namespace BitFaster.Caching.UnitTests
10+
namespace BitFaster.Caching.UnitTests.Buffers
1011
{
1112
public class StripedBufferTests
1213
{
@@ -17,9 +18,9 @@ public class StripedBufferTests
1718
[Fact]
1819
public void WhenBufferIsFullTryAddReturnsFull()
1920
{
20-
for (int i = 0; i < stripeCount; i++)
21+
for (var i = 0; i < stripeCount; i++)
2122
{
22-
for (int j = 0; j < bufferSize; j++)
23+
for (var j = 0; j < bufferSize; j++)
2324
{
2425
buffer.TryAdd(1).Should().Be(BufferStatus.Success);
2526
}
@@ -38,9 +39,9 @@ public void WhenBufferIsEmptyDrainReturnsZero()
3839
[Fact]
3940
public void WhenBufferIsFullDrainReturnsItemCount()
4041
{
41-
for (int i = 0; i < stripeCount; i++)
42+
for (var i = 0; i < stripeCount; i++)
4243
{
43-
for (int j = 0; j < bufferSize; j++)
44+
for (var j = 0; j < bufferSize; j++)
4445
{
4546
buffer.TryAdd(1);
4647
}
@@ -53,9 +54,9 @@ public void WhenBufferIsFullDrainReturnsItemCount()
5354
[Fact]
5455
public void WhenDrainBufferIsSmallerThanStripedBufferDrainReturnsBufferItemCount()
5556
{
56-
for (int i = 0; i < stripeCount; i++)
57+
for (var i = 0; i < stripeCount; i++)
5758
{
58-
for (int j = 0; j < bufferSize; j++)
59+
for (var j = 0; j < bufferSize; j++)
5960
{
6061
buffer.TryAdd(1);
6162
}
@@ -68,7 +69,7 @@ public void WhenDrainBufferIsSmallerThanStripedBufferDrainReturnsBufferItemCount
6869
[Fact]
6970
public void WhenBufferIsPartFullDrainReturnsItems()
7071
{
71-
for (int j = 0; j < bufferSize; j++)
72+
for (var j = 0; j < bufferSize; j++)
7273
{
7374
buffer.TryAdd(1);
7475
}
@@ -80,9 +81,9 @@ public void WhenBufferIsPartFullDrainReturnsItems()
8081
[Fact]
8182
public void WhenBufferIsClearedDrainReturns0()
8283
{
83-
for (int i = 0; i < stripeCount; i++)
84+
for (var i = 0; i < stripeCount; i++)
8485
{
85-
for (int j = 0; j < bufferSize; j++)
86+
for (var j = 0; j < bufferSize; j++)
8687
{
8788
buffer.TryAdd(1);
8889
}

BitFaster.Caching/BoundedBuffer.cs renamed to BitFaster.Caching/Buffers/BoundedBuffer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
using System.Text;
77
using System.Threading;
88

9-
namespace BitFaster.Caching
9+
namespace BitFaster.Caching.Buffers
1010
{
1111
/// <summary>
1212
/// Provides a multi-producer, multi-consumer thread-safe ring buffer. When the buffer is full,

BitFaster.Caching/BufferStatus.cs renamed to BitFaster.Caching/Buffers/BufferStatus.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
using System.Collections.Generic;
33
using System.Text;
44

5-
namespace BitFaster.Caching
5+
namespace BitFaster.Caching.Buffers
66
{
77
public enum BufferStatus
88
{

BitFaster.Caching/StripedBuffer.cs renamed to BitFaster.Caching/Buffers/StripedBuffer.cs

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
using System.Threading;
1010
using BitFaster.Caching.Lfu;
1111

12-
namespace BitFaster.Caching
12+
namespace BitFaster.Caching.Buffers
1313
{
1414
/// <summary>
1515
/// Provides a striped bounded buffer. Add operations use thread ID to index into
@@ -26,25 +26,25 @@ public class StripedBuffer<T>
2626
public StripedBuffer(int stripeCount, int bufferSize)
2727
{
2828
stripeCount = BitOps.CeilingPowerOfTwo(stripeCount);
29-
this.buffers = new BoundedBuffer<T>[stripeCount];
29+
buffers = new BoundedBuffer<T>[stripeCount];
3030

31-
for (int i = 0; i < stripeCount; i++)
31+
for (var i = 0; i < stripeCount; i++)
3232
{
33-
this.buffers[i] = new BoundedBuffer<T>(bufferSize);
33+
buffers[i] = new BoundedBuffer<T>(bufferSize);
3434
}
3535
}
3636

3737
public int DrainTo(T[] outputBuffer)
3838
{
39-
int count = 0;
39+
var count = 0;
4040

41-
for (int i = 0; i < buffers.Length; i++)
41+
for (var i = 0; i < buffers.Length; i++)
4242
{
43-
BufferStatus status = BufferStatus.Full;
43+
var status = BufferStatus.Full;
4444

4545
while (count < outputBuffer.Length & status != BufferStatus.Empty)
4646
{
47-
status = buffers[i].TryTake(out T item);
47+
status = buffers[i].TryTake(out var item);
4848

4949
if (status == BufferStatus.Success)
5050
{
@@ -79,15 +79,15 @@ public BufferStatus TryAdd(T item)
7979
// }
8080
//#endif
8181

82-
ulong z = Mix64((ulong)Environment.CurrentManagedThreadId);
83-
int inc = (int)(z >> 32) | 1;
84-
int h = (int)z;
82+
var z = Mix64((ulong)Environment.CurrentManagedThreadId);
83+
var inc = (int)(z >> 32) | 1;
84+
var h = (int)z;
8585

86-
int mask = buffers.Length - 1;
86+
var mask = buffers.Length - 1;
8787

88-
BufferStatus result = BufferStatus.Empty;
88+
var result = BufferStatus.Empty;
8989

90-
for (int i = 0; i < MaxAttempts; i++)
90+
for (var i = 0; i < MaxAttempts; i++)
9191
{
9292
result = buffers[h & mask].TryAdd(item);
9393

@@ -104,19 +104,19 @@ public BufferStatus TryAdd(T item)
104104

105105
public void Clear()
106106
{
107-
for (int i = 0; i < this.buffers.Length; i++)
107+
for (var i = 0; i < buffers.Length; i++)
108108
{
109-
this.buffers[i].Clear();
109+
buffers[i].Clear();
110110
}
111111
}
112112

113113
// Computes Stafford variant 13 of 64-bit mix function.
114114
// http://zimbry.blogspot.com/2011/09/better-bit-mixing-improving-on.html
115115
private static ulong Mix64(ulong z)
116116
{
117-
z = (z ^ (z >> 30)) * 0xbf58476d1ce4e5b9L;
118-
z = (z ^ (z >> 27)) * 0x94d049bb133111ebL;
119-
return z ^ (z >> 31);
117+
z = (z ^ z >> 30) * 0xbf58476d1ce4e5b9L;
118+
z = (z ^ z >> 27) * 0x94d049bb133111ebL;
119+
return z ^ z >> 31;
120120
}
121121
}
122122
}

BitFaster.Caching/Lfu/ConcurrentLfu.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
using System.Runtime.InteropServices;
1919
using System.Threading;
2020
using System.Threading.Tasks;
21+
using BitFaster.Caching.Buffers;
2122
using BitFaster.Caching.Lru;
2223
using BitFaster.Caching.Scheduler;
2324

BitFaster.Caching/Scheduler/BackgroundThreadScheduler.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using System.Text;
55
using System.Threading;
66
using System.Threading.Tasks;
7+
using BitFaster.Caching.Buffers;
78

89
namespace BitFaster.Caching.Scheduler
910
{

0 commit comments

Comments
 (0)