Skip to content

Commit f5382dd

Browse files
committed
Use ArrayPool instead of MemoryPool
1 parent 7b6e51c commit f5382dd

File tree

1 file changed

+40
-27
lines changed

1 file changed

+40
-27
lines changed

BencodeNET/Parsing/BNumberParser.cs

Lines changed: 40 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -45,21 +45,28 @@ public override BNumber Parse(BencodeReader reader)
4545
if (reader.ReadChar() != 'i')
4646
throw InvalidBencodeException<BNumber>.UnexpectedChar('i', reader.PreviousChar, startPosition);
4747

48-
using var digits = MemoryPool<char>.Shared.Rent(BNumber.MaxDigits);
49-
var digitCount = 0;
50-
for (var c = reader.ReadChar(); c != default && c != 'e'; c = reader.ReadChar())
48+
var digits = ArrayPool<char>.Shared.Rent(BNumber.MaxDigits);
49+
try
5150
{
52-
digits.Memory.Span[digitCount++] = c;
53-
}
51+
var digitCount = 0;
52+
for (var c = reader.ReadChar(); c != default && c != 'e'; c = reader.ReadChar())
53+
{
54+
digits[digitCount++] = c;
55+
}
5456

55-
if (digitCount == 0)
56-
throw NoDigitsException(startPosition);
57+
if (digitCount == 0)
58+
throw NoDigitsException(startPosition);
5759

58-
// Last read character should be 'e'
59-
if (reader.PreviousChar != 'e')
60-
throw InvalidBencodeException<BNumber>.MissingEndChar(startPosition);
60+
// Last read character should be 'e'
61+
if (reader.PreviousChar != 'e')
62+
throw InvalidBencodeException<BNumber>.MissingEndChar(startPosition);
6163

62-
return ParseNumber(digits.Memory.Span.Slice(0, digitCount), startPosition);
64+
return ParseNumber(digits[..digitCount], startPosition);
65+
}
66+
finally
67+
{
68+
ArrayPool<char>.Shared.Return(digits);
69+
}
6370
}
6471

6572
/// <summary>
@@ -80,24 +87,30 @@ public override async ValueTask<BNumber> ParseAsync(PipeBencodeReader reader, Ca
8087
if (await reader.ReadCharAsync(cancellationToken).ConfigureAwait(false) != 'i')
8188
throw InvalidBencodeException<BNumber>.UnexpectedChar('i', reader.PreviousChar, startPosition);
8289

83-
using var memoryOwner = MemoryPool<char>.Shared.Rent(BNumber.MaxDigits);
84-
var digits = memoryOwner.Memory;
85-
var digitCount = 0;
86-
for (var c = await reader.ReadCharAsync(cancellationToken).ConfigureAwait(false);
87-
c != default && c != 'e';
88-
c = await reader.ReadCharAsync(cancellationToken).ConfigureAwait(false))
90+
var digits = ArrayPool<char>.Shared.Rent(BNumber.MaxDigits);
91+
try
8992
{
90-
digits.Span[digitCount++] = c;
93+
var digitCount = 0;
94+
for (var c = await reader.ReadCharAsync(cancellationToken).ConfigureAwait(false);
95+
c != default && c != 'e';
96+
c = await reader.ReadCharAsync(cancellationToken).ConfigureAwait(false))
97+
{
98+
digits[digitCount++] = c;
99+
}
100+
101+
if (digitCount == 0)
102+
throw NoDigitsException(startPosition);
103+
104+
// Last read character should be 'e'
105+
if (reader.PreviousChar != 'e')
106+
throw InvalidBencodeException<BNumber>.MissingEndChar(startPosition);
107+
108+
return ParseNumber(digits.AsSpan()[..digitCount], startPosition);
109+
}
110+
finally
111+
{
112+
ArrayPool<char>.Shared.Return(digits);
91113
}
92-
93-
if (digitCount == 0)
94-
throw NoDigitsException(startPosition);
95-
96-
// Last read character should be 'e'
97-
if (reader.PreviousChar != 'e')
98-
throw InvalidBencodeException<BNumber>.MissingEndChar(startPosition);
99-
100-
return ParseNumber(digits.Span.Slice(0, digitCount), startPosition);
101114
}
102115

103116
private BNumber ParseNumber(in ReadOnlySpan<char> digits, long startPosition)

0 commit comments

Comments
 (0)