Skip to content

Commit d4dfdaa

Browse files
authored
Merge pull request #168 from AArnott/fix167
Fix Sequence<T> to work for managed types T
2 parents 3f387f6 + a77dd5f commit d4dfdaa

File tree

3 files changed

+12
-1
lines changed

3 files changed

+12
-1
lines changed

src/Nerdbank.Streams.Tests/SequenceTests.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -486,6 +486,16 @@ public void Dispose_ClearsAndAllowsReuse()
486486
Assert.Equal(3, seq.AsReadOnlySequence.Length);
487487
}
488488

489+
[Fact]
490+
public void SequenceOfManagedType()
491+
{
492+
var seq = new Sequence<object>();
493+
seq.Write(new object[] { new object(), new object() });
494+
Assert.Equal(2, seq.Length);
495+
Assert.IsType<object>(seq.AsReadOnlySequence.First.Span[0]);
496+
Assert.IsType<object>(seq.AsReadOnlySequence.First.Span[1]);
497+
}
498+
489499
/// <summary>
490500
/// Adds a reference to an object in the sequence and returns a weak reference to it.
491501
/// </summary>

src/Nerdbank.Streams/Nerdbank.Streams.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
<PackageReference Include="System.Buffers" Version="4.5.0" />
2424
<PackageReference Include="System.IO.Pipelines" Version="4.5.3" />
2525
<PackageReference Include="System.Net.WebSockets" Version="4.3.0" />
26+
<PackageReference Include="System.Runtime.CompilerServices.Unsafe" Version="4.6.0" />
2627
<PackageReference Include="System.ValueTuple" Version="4.5.0" />
2728
</ItemGroup>
2829
<ItemGroup>

src/Nerdbank.Streams/Sequence`1.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ namespace Nerdbank.Streams
2323
[DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")]
2424
public class Sequence<T> : IBufferWriter<T>, IDisposable
2525
{
26-
private static readonly int DefaultLengthFromArrayPool = 1 + (4095 / Marshal.SizeOf<T>());
26+
private static readonly int DefaultLengthFromArrayPool = 1 + (4095 / Unsafe.SizeOf<T>());
2727

2828
private static readonly ReadOnlySequence<T> Empty = new ReadOnlySequence<T>(SequenceSegment.Empty, 0, SequenceSegment.Empty, 0);
2929

0 commit comments

Comments
 (0)