Skip to content

Commit 6bc57fd

Browse files
committed
add document comment
1 parent a2e2218 commit 6bc57fd

File tree

2 files changed

+34
-19
lines changed

2 files changed

+34
-19
lines changed

PooledStream.Test/TestPooledMemoryStream.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public void TestWriteMiddle()
4747
public void TestReadOnly()
4848
{
4949
var data = new byte[] { 1, 2, 3, 4 };
50-
using (var stm = new PooledMemoryStream(ArrayPool<byte>.Shared, data, 0, data.Length))
50+
using (var stm = new PooledMemoryStream(ArrayPool<byte>.Shared, data))
5151
{
5252
Assert.True(stm.CanRead);
5353
Assert.False(stm.CanWrite);

PooledStream/PooledMemoryStream.cs

Lines changed: 33 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,20 @@ namespace PooledStream
55
using System.Buffers;
66
public class PooledMemoryStream : Stream
77
{
8-
ArrayPool<byte> m_Pool;
9-
byte[] _currentbuffer = null;
10-
bool _CanWrite = false;
11-
long _Length = 0;
12-
long _Position = 0;
13-
bool _FromPool = false;
8+
/// <summary>create writable memory stream with default parameters</summary>
9+
/// <remarks>buffer is allocated from ArrayPool<byte>.Shared</remarks>
1410
public PooledMemoryStream()
1511
: this(ArrayPool<byte>.Shared)
1612
{
1713
}
14+
/// <summary>create writable memory stream with specified ArrayPool</summary>
15+
/// <remarks>buffer is allocated from ArrayPool</remarks>
1816
public PooledMemoryStream(ArrayPool<byte> pool)
1917
: this(pool, 4096)
2018
{
21-
m_Pool = pool;
2219
}
20+
/// <summary>create writable memory stream with ensuring buffer length</summary>
21+
/// <remarks>buffer is allocated from ArrayPool</remarks>
2322
public PooledMemoryStream(ArrayPool<byte> pool, int capacity)
2423
{
2524
m_Pool = pool;
@@ -28,12 +27,15 @@ public PooledMemoryStream(ArrayPool<byte> pool, int capacity)
2827
_Length = 0;
2928
_CanWrite = true;
3029
}
31-
public PooledMemoryStream(ArrayPool<byte> pool, byte[] data, int offset, int length)
30+
/// <summary>create readonly MemoryStream without buffer copy</summary>
31+
/// <remarks>data will be read from 'data' parameter</summary>
32+
public PooledMemoryStream(ArrayPool<byte> pool, byte[] data)
3233
{
3334
m_Pool = pool;
3435
_currentbuffer = data;
35-
_Length = length;
36+
_Length = data.Length;
3637
_CanWrite = false;
38+
_FromPool = false;
3739
}
3840
public override bool CanRead
3941
{
@@ -65,13 +67,20 @@ public override void Flush()
6567
public override int Read(byte[] buffer, int offset, int count)
6668
{
6769
int readlen = count > (int)(_Length - _Position) ? (int)(_Length - _Position) : count;
68-
Buffer.BlockCopy(_currentbuffer
69-
, (int)_Position
70-
, buffer, offset
71-
, readlen)
72-
;
73-
_Position += readlen;
74-
return readlen;
70+
if (readlen > 0)
71+
{
72+
Buffer.BlockCopy(_currentbuffer
73+
, (int)_Position
74+
, buffer, offset
75+
, readlen)
76+
;
77+
_Position += readlen;
78+
return readlen;
79+
}
80+
else
81+
{
82+
return 0;
83+
}
7584
}
7685

7786
public override long Seek(long offset, SeekOrigin origin)
@@ -91,7 +100,7 @@ public override long Seek(long offset, SeekOrigin origin)
91100
default:
92101
throw new InvalidOperationException("unknown SeekOrigin");
93102
}
94-
if(_Position < 0 || _Position > _Length)
103+
if (_Position < 0 || _Position > _Length)
95104
{
96105
_Position = oldValue;
97106
throw new IndexOutOfRangeException();
@@ -178,10 +187,16 @@ public byte[] ToArray()
178187
return ret;
179188
}
180189
/// <summary>Create ArraySegment for current stream data without allocation buffer</summary>
181-
/// <remarks>after disposing stream, manupilating buffer(read or write) may cause undefined behavior</remarks>
190+
/// <remarks>After disposing stream, manupilating returned value(read or write) may cause undefined behavior</remarks>
182191
public ArraySegment<byte> ToUnsafeArraySegment()
183192
{
184193
return new ArraySegment<byte>(_currentbuffer, 0, (int)_Length);
185194
}
195+
ArrayPool<byte> m_Pool;
196+
byte[] _currentbuffer = null;
197+
bool _CanWrite = false;
198+
long _Length = 0;
199+
long _Position = 0;
200+
bool _FromPool = false;
186201
}
187202
}

0 commit comments

Comments
 (0)