forked from bit/DotRecastNetSim
35 lines
1000 B
C#
35 lines
1000 B
C#
|
using System;
|
|||
|
using DotRecast.Core;
|
|||
|
using DotRecast.Detour.Dynamic.Io;
|
|||
|
using K4os.Compression.LZ4;
|
|||
|
|
|||
|
namespace DotRecast.Recast.Demo;
|
|||
|
|
|||
|
public class DtVoxelTileLZ4DemoCompressor : IRcCompressor
|
|||
|
{
|
|||
|
public static readonly DtVoxelTileLZ4DemoCompressor Shared = new();
|
|||
|
|
|||
|
private DtVoxelTileLZ4DemoCompressor()
|
|||
|
{
|
|||
|
}
|
|||
|
|
|||
|
public byte[] Decompress(byte[] data)
|
|||
|
{
|
|||
|
int compressedSize = ByteUtils.GetIntBE(data, 0);
|
|||
|
return LZ4Pickler.Unpickle(data.AsSpan(4, compressedSize));
|
|||
|
}
|
|||
|
|
|||
|
public byte[] Decompress(byte[] buf, int offset, int len, int outputlen)
|
|||
|
{
|
|||
|
return LZ4Pickler.Unpickle(buf, offset, len);
|
|||
|
}
|
|||
|
|
|||
|
public byte[] Compress(byte[] data)
|
|||
|
{
|
|||
|
byte[] compressed = LZ4Pickler.Pickle(data, LZ4Level.L12_MAX);
|
|||
|
byte[] result = new byte[4 + compressed.Length];
|
|||
|
ByteUtils.PutInt(compressed.Length, result, 0, RcByteOrder.BIG_ENDIAN);
|
|||
|
Array.Copy(compressed, 0, result, 4, compressed.Length);
|
|||
|
return result;
|
|||
|
}
|
|||
|
}
|