1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-14 14:24:10 +02:00

Compression interface change

This commit is contained in:
Brian Fiete 2021-12-05 12:08:03 -08:00
parent b0aa27c82c
commit e29a785fee
2 changed files with 28 additions and 22 deletions

View file

@ -6,44 +6,48 @@ namespace utils
class Compression class Compression
{ {
[CallingConvention(.Stdcall), CLink] [CallingConvention(.Stdcall), CLink]
extern static Span<uint8> Compression_Compress(void* ptr, int size); extern static bool Compression_Compress(void* ptr, int size, void** outPtr, int* outSize);
[CallingConvention(.Stdcall), CLink] [CallingConvention(.Stdcall), CLink]
extern static Span<uint8> Compression_Decompress(void* ptr, int size); extern static bool Compression_Decompress(void* ptr, int size, void** outPtr, int* outSize);
public static Result<void> Compress(Span<uint8> inData, List<uint8> outData) public static Result<void> Compress(Span<uint8> inData, List<uint8> outData)
{ {
var outSpan = Compression_Compress(inData.Ptr, inData.Length); void* outPtr = null;
if ((outSpan.Length == 0) && (inData.Length != 0)) int outSize = 0;
if (!Compression_Compress(inData.Ptr, inData.Length, &outPtr, &outSize))
return .Err; return .Err;
outData.AddRange(outSpan); outData.AddRange(.((.)outPtr, outSize));
return .Ok; return .Ok;
} }
public static Result<void> Compress(Span<uint8> inData, String outData) public static Result<void> Compress(Span<uint8> inData, String outData)
{ {
var outSpan = Compression_Compress(inData.Ptr, inData.Length); void* outPtr = null;
if ((outSpan.Length == 0) && (inData.Length != 0)) int outSize = 0;
if (!Compression_Compress(inData.Ptr, inData.Length, &outPtr, &outSize))
return .Err; return .Err;
outData.Insert(outData.Length, StringView((.)outSpan.Ptr, outSpan.Length)); outData.Insert(outData.Length, StringView((.)outPtr, outSize));
return .Ok; return .Ok;
} }
public static Result<void> Decompress(Span<uint8> inData, List<uint8> outData) public static Result<void> Decompress(Span<uint8> inData, List<uint8> outData)
{ {
var outSpan = Compression_Decompress(inData.Ptr, inData.Length); void* outPtr = null;
if (outSpan == default) int outSize = 0;
if (!Compression_Decompress(inData.Ptr, inData.Length, &outPtr, &outSize))
return .Err; return .Err;
outData.AddRange(outSpan); outData.AddRange(.((.)outPtr, outSize));
return .Ok; return .Ok;
} }
public static Result<void> Decompress(Span<uint8> inData, String outData) public static Result<void> Decompress(Span<uint8> inData, String outData)
{ {
var outSpan = Compression_Decompress(inData.Ptr, inData.Length); void* outPtr = null;
if (outSpan == default) int outSize = 0;
if (!Compression_Decompress(inData.Ptr, inData.Length, &outPtr, &outSize))
return .Err; return .Err;
outData.Insert(outData.Length, StringView((.)outSpan.Ptr, outSpan.Length)); outData.Insert(outData.Length, StringView((.)outPtr, outSize));
return .Ok; return .Ok;
} }
} }

View file

@ -102,22 +102,24 @@ bool Compression::Decompress(Span<uint8> inData, Array<uint8>& outData)
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
BF_EXPORT Span<uint8> BF_CALLTYPE Compression_Compress(void* ptr, int size) BF_EXPORT bool BF_CALLTYPE Compression_Compress(void* ptr, intptr size, void** outPtr, intptr* outSize)
{ {
auto& outData = *gCompression_TLDataReturn.Get(); auto& outData = *gCompression_TLDataReturn.Get();
outData.Reserve(128); outData.Reserve(128);
if (!Compression::Compress(Span<uint8>((uint8*)ptr, size), outData)) if (!Compression::Compress(Span<uint8>((uint8*)ptr, size), outData))
return Span<uint8>(); return false;
uint8* outPtr = outData.mVals; *outPtr = outData.mVals;
return Span<uint8>(outPtr, outData.mSize); *outSize = outData.mSize;
return true;
} }
BF_EXPORT Span<uint8> BF_CALLTYPE Compression_Decompress(void* ptr, int size) BF_EXPORT bool BF_CALLTYPE Compression_Decompress(void* ptr, intptr size, void** outPtr, intptr* outSize)
{ {
auto& outData = *gCompression_TLDataReturn.Get(); auto& outData = *gCompression_TLDataReturn.Get();
outData.Reserve(128); outData.Reserve(128);
if (!Compression::Decompress(Span<uint8>((uint8*)ptr, size), outData)) if (!Compression::Decompress(Span<uint8>((uint8*)ptr, size), outData))
return Span<uint8>(); return false;
uint8* outPtr = outData.mVals; *outPtr = outData.mVals;
return Span<uint8>(outPtr, outData.mSize); *outSize = outData.mSize;
return true;
} }