Skip to content

Commit

Permalink
StreamHelpers: Remove ThreadStatic buffer and use stack allocated spa…
Browse files Browse the repository at this point in the history
…ns instead
  • Loading branch information
kristiker authored Jun 27, 2024
1 parent 31a8b0c commit 829c6b6
Showing 1 changed file with 21 additions and 30 deletions.
51 changes: 21 additions & 30 deletions SteamKit2/SteamKit2/Util/StreamHelpers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,69 +7,60 @@ namespace SteamKit2
{
internal static class StreamHelpers
{
[ThreadStatic]
static byte[]? data;

[MemberNotNull(nameof(data))]
static void EnsureInitialized()
{
data ??= new byte[ 8 ];
}

public static short ReadInt16(this Stream stream)
{
EnsureInitialized();
Span<byte> data = stackalloc byte[2];

stream.Read( data, 0, 2 );
return BitConverter.ToInt16( data, 0 );
stream.Read( data );
return BitConverter.ToInt16( data );
}

public static ushort ReadUInt16(this Stream stream)
{
EnsureInitialized();
Span<byte> data = stackalloc byte[2];

stream.Read( data, 0, 2 );
return BitConverter.ToUInt16( data, 0);
stream.Read( data );
return BitConverter.ToUInt16( data );
}

public static int ReadInt32(this Stream stream)
{
EnsureInitialized();
Span<byte> data = stackalloc byte[4];

stream.Read( data, 0, 4 );
return BitConverter.ToInt32( data, 0 );
stream.Read( data );
return BitConverter.ToInt32( data );
}

public static long ReadInt64(this Stream stream)
{
EnsureInitialized();
Span<byte> data = stackalloc byte[8];

stream.Read( data, 0, 8 );
return BitConverter.ToInt64( data, 0 );
stream.Read( data );
return BitConverter.ToInt64( data );
}

public static uint ReadUInt32(this Stream stream)
{
EnsureInitialized();
Span<byte> data = stackalloc byte[4];

stream.Read(data, 0, 4);
return BitConverter.ToUInt32( data, 0);
stream.Read( data );
return BitConverter.ToUInt32( data );
}

public static ulong ReadUInt64(this Stream stream)
{
EnsureInitialized();
Span<byte> data = stackalloc byte[8];

stream.Read( data, 0, 8 );
return BitConverter.ToUInt64( data, 0 );
stream.Read( data );
return BitConverter.ToUInt64( data );
}

public static float ReadFloat( this Stream stream )
{
EnsureInitialized();
Span<byte> data = stackalloc byte[4];

stream.Read( data, 0, 4 );
return BitConverter.ToSingle( data, 0 );
stream.Read( data );
return BitConverter.ToSingle( data );
}

public static string ReadNullTermString( this Stream stream, Encoding encoding )
Expand Down

0 comments on commit 829c6b6

Please sign in to comment.