diff --git a/BeefLibs/Beefy2D/src/utils/Compression.bf b/BeefLibs/Beefy2D/src/utils/Compression.bf index a680b9ea..6514b066 100644 --- a/BeefLibs/Beefy2D/src/utils/Compression.bf +++ b/BeefLibs/Beefy2D/src/utils/Compression.bf @@ -11,16 +11,12 @@ namespace utils [CallingConvention(.Stdcall), CLink] extern static Span Compression_Decompress(void* ptr, int size); - [CallingConvention(.Stdcall), CLink] - extern static void Compression_Free(void* ptr); - public static Result Compress(Span inData, List outData) { var outSpan = Compression_Compress(inData.Ptr, inData.Length); if ((outSpan.Length == 0) && (inData.Length != 0)) return .Err; outData.AddRange(outSpan); - Compression_Free(outSpan.Ptr); return .Ok; } @@ -30,27 +26,24 @@ namespace utils if ((outSpan.Length == 0) && (inData.Length != 0)) return .Err; outData.Insert(outData.Length, StringView((.)outSpan.Ptr, outSpan.Length)); - Compression_Free(outSpan.Ptr); return .Ok; } public static Result Decompress(Span inData, List outData) { var outSpan = Compression_Decompress(inData.Ptr, inData.Length); - if ((outSpan.Length == 0) && (inData.Length != 0)) + if (outSpan == default) return .Err; outData.AddRange(outSpan); - Compression_Free(outSpan.Ptr); return .Ok; } public static Result Decompress(Span inData, String outData) { var outSpan = Compression_Decompress(inData.Ptr, inData.Length); - if ((outSpan.Length == 0) && (inData.Length != 0)) + if (outSpan == default) return .Err; outData.Insert(outData.Length, StringView((.)outSpan.Ptr, outSpan.Length)); - Compression_Free(outSpan.Ptr); return .Ok; } } diff --git a/BeefySysLib/util/Compress.cpp b/BeefySysLib/util/Compress.cpp index 7040a226..5d0cab0a 100644 --- a/BeefySysLib/util/Compress.cpp +++ b/BeefySysLib/util/Compress.cpp @@ -6,6 +6,8 @@ USING_NS_BF; +static TLSingleton> gCompression_TLDataReturn; + bool Compression::Compress(Span inData, Array& outData) { outData.Reserve(128); @@ -65,7 +67,7 @@ bool Compression::Decompress(Span inData, Array& outData) zs.next_out = outData.mVals; zs.avail_out = outData.mAllocSize; - inflateInit(&zs, Z_BEST_COMPRESSION); + inflateInit(&zs); bool isDone = false; bool hadError = false; @@ -101,8 +103,9 @@ bool Compression::Decompress(Span inData, Array& outData) ////////////////////////////////////////////////////////////////////////// BF_EXPORT Span BF_CALLTYPE Compression_Compress(void* ptr, int size) -{ - Array outData; +{ + auto& outData = *gCompression_TLDataReturn.Get(); + outData.Reserve(128); if (!Compression::Compress(Span((uint8*)ptr, size), outData)) return Span(); uint8* outPtr = outData.mVals; @@ -112,15 +115,11 @@ BF_EXPORT Span BF_CALLTYPE Compression_Compress(void* ptr, int size) BF_EXPORT Span BF_CALLTYPE Compression_Decompress(void* ptr, int size) { - Array outData; + auto& outData = *gCompression_TLDataReturn.Get(); + outData.Reserve(128); if (!Compression::Decompress(Span((uint8*)ptr, size), outData)) return Span(); uint8* outPtr = outData.mVals; outData.mVals = NULL; return Span(outPtr, outData.mSize); } - -BF_EXPORT void BF_CALLTYPE Compression_Free(void* ptr) -{ - delete ptr; -}