mirror of
https://github.com/UglyToad/PdfPig.git
synced 2025-06-28 15:30:17 +08:00
Eliminate allocation in AsciiHexDecodeFilter
This commit is contained in:
parent
d85ea4f95d
commit
b498f5a076
@ -1,7 +1,7 @@
|
|||||||
namespace UglyToad.PdfPig.Filters
|
namespace UglyToad.PdfPig.Filters
|
||||||
{
|
{
|
||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using Core;
|
||||||
using Tokens;
|
using Tokens;
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
@ -34,48 +34,45 @@
|
|||||||
Span<byte> pair = stackalloc byte[2];
|
Span<byte> pair = stackalloc byte[2];
|
||||||
var index = 0;
|
var index = 0;
|
||||||
|
|
||||||
using (var memoryStream = new MemoryStream())
|
using var writer = new ArrayPoolBufferWriter<byte>(input.Length);
|
||||||
using (var binaryWriter = new BinaryWriter(memoryStream))
|
|
||||||
|
for (var i = 0; i < input.Length; i++)
|
||||||
{
|
{
|
||||||
for (var i = 0; i < input.Length; i++)
|
if (input[i] == '>')
|
||||||
{
|
{
|
||||||
if (input[i] == '>')
|
break;
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (IsWhitespace(input[i]) || input[i] == '<')
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
pair[index] = input[i];
|
|
||||||
index++;
|
|
||||||
|
|
||||||
if (index == 2)
|
|
||||||
{
|
|
||||||
WriteHexToByte(pair, binaryWriter);
|
|
||||||
|
|
||||||
index = 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (index > 0)
|
if (IsWhitespace(input[i]) || input[i] == '<')
|
||||||
{
|
{
|
||||||
if (index == 1)
|
continue;
|
||||||
{
|
|
||||||
pair[1] = (byte) '0';
|
|
||||||
}
|
|
||||||
|
|
||||||
WriteHexToByte(pair, binaryWriter);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
binaryWriter.Flush();
|
pair[index] = input[i];
|
||||||
return memoryStream.ToArray();
|
index++;
|
||||||
|
|
||||||
|
if (index == 2)
|
||||||
|
{
|
||||||
|
WriteHexToByte(pair, writer);
|
||||||
|
|
||||||
|
index = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (index > 0)
|
||||||
|
{
|
||||||
|
if (index == 1)
|
||||||
|
{
|
||||||
|
pair[1] = (byte)'0';
|
||||||
|
}
|
||||||
|
|
||||||
|
WriteHexToByte(pair, writer);
|
||||||
|
}
|
||||||
|
|
||||||
|
return writer.WrittenSpan.ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void WriteHexToByte(ReadOnlySpan<byte> hexBytes, BinaryWriter writer)
|
private static void WriteHexToByte(ReadOnlySpan<byte> hexBytes, ArrayPoolBufferWriter<byte> writer)
|
||||||
{
|
{
|
||||||
var first = ReverseHex[hexBytes[0]];
|
var first = ReverseHex[hexBytes[0]];
|
||||||
var second = ReverseHex[hexBytes[1]];
|
var second = ReverseHex[hexBytes[1]];
|
||||||
|
Loading…
Reference in New Issue
Block a user