You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
115 lines
3.5 KiB
115 lines
3.5 KiB
using System; |
|
|
|
namespace MessagePack.LZ4 |
|
{ |
|
public static partial class LZ4Codec |
|
{ |
|
#if NETSTANDARD |
|
|
|
public static int Encode(byte[] input, int inputOffset, int inputLength, byte[] output, int outputOffset, int outputLength) |
|
{ |
|
if (IntPtr.Size == 4) |
|
{ |
|
return LZ4Codec.Encode32Unsafe(input, inputOffset, inputLength, output, outputOffset, outputLength); |
|
} |
|
else |
|
{ |
|
return LZ4Codec.Encode64Unsafe(input, inputOffset, inputLength, output, outputOffset, outputLength); |
|
} |
|
} |
|
|
|
public static int Decode(byte[] input, int inputOffset, int inputLength, byte[] output, int outputOffset, int outputLength) |
|
{ |
|
if (IntPtr.Size == 4) |
|
{ |
|
return LZ4Codec.Decode32Unsafe(input, inputOffset, inputLength, output, outputOffset, outputLength); |
|
} |
|
else |
|
{ |
|
return LZ4Codec.Decode64Unsafe(input, inputOffset, inputLength, output, outputOffset, outputLength); |
|
} |
|
} |
|
|
|
#else |
|
|
|
// use 'Safe' code for Unity because in IL2CPP gots strange behaviour. |
|
|
|
public static int Encode(byte[] input, int inputOffset, int inputLength, byte[] output, int outputOffset, int outputLength) |
|
{ |
|
if (IntPtr.Size == 4) |
|
{ |
|
return LZ4Codec.Encode32Safe(input, inputOffset, inputLength, output, outputOffset, outputLength); |
|
} |
|
else |
|
{ |
|
return LZ4Codec.Encode64Safe(input, inputOffset, inputLength, output, outputOffset, outputLength); |
|
} |
|
} |
|
|
|
public static int Decode(byte[] input, int inputOffset, int inputLength, byte[] output, int outputOffset, int outputLength) |
|
{ |
|
if (IntPtr.Size == 4) |
|
{ |
|
return LZ4Codec.Decode32Safe(input, inputOffset, inputLength, output, outputOffset, outputLength); |
|
} |
|
else |
|
{ |
|
return LZ4Codec.Decode64Safe(input, inputOffset, inputLength, output, outputOffset, outputLength); |
|
} |
|
} |
|
|
|
#endif |
|
|
|
internal static class HashTablePool |
|
{ |
|
[ThreadStatic] |
|
static ushort[] ushortPool; |
|
|
|
[ThreadStatic] |
|
static uint[] uintPool; |
|
|
|
[ThreadStatic] |
|
static int[] intPool; |
|
|
|
public static ushort[] GetUShortHashTablePool() |
|
{ |
|
if (ushortPool == null) |
|
{ |
|
ushortPool = new ushort[HASH64K_TABLESIZE]; |
|
} |
|
else |
|
{ |
|
Array.Clear(ushortPool, 0, ushortPool.Length); |
|
} |
|
return ushortPool; |
|
} |
|
|
|
public static uint[] GetUIntHashTablePool() |
|
{ |
|
if (uintPool == null) |
|
{ |
|
uintPool = new uint[HASH_TABLESIZE]; |
|
} |
|
else |
|
{ |
|
Array.Clear(uintPool, 0, uintPool.Length); |
|
} |
|
return uintPool; |
|
} |
|
|
|
public static int[] GetIntHashTablePool() |
|
{ |
|
if (intPool == null) |
|
{ |
|
intPool = new int[HASH_TABLESIZE]; |
|
} |
|
else |
|
{ |
|
Array.Clear(intPool, 0, intPool.Length); |
|
} |
|
return intPool; |
|
} |
|
} |
|
} |
|
} |
|
|
|
|