diff options
author | vnugent <public@vaughnnugent.com> | 2023-08-14 11:43:35 -0400 |
---|---|---|
committer | vnugent <public@vaughnnugent.com> | 2023-08-14 11:43:35 -0400 |
commit | 3f5eb61fc7166674a5424d5f8e8c23a775c27614 (patch) | |
tree | 55a759d2cb0906251ac2dd5aec5e8551b7fb7594 /lib/Net.Compression/VNLib.Net.Compression/CompressionExtensions.cs | |
parent | 692398494aa9dc49738da3a12e0b884ee4e56287 (diff) |
Compression api exposed and tests updated
Diffstat (limited to 'lib/Net.Compression/VNLib.Net.Compression/CompressionExtensions.cs')
-rw-r--r-- | lib/Net.Compression/VNLib.Net.Compression/CompressionExtensions.cs | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/lib/Net.Compression/VNLib.Net.Compression/CompressionExtensions.cs b/lib/Net.Compression/VNLib.Net.Compression/CompressionExtensions.cs new file mode 100644 index 0000000..0a4f7aa --- /dev/null +++ b/lib/Net.Compression/VNLib.Net.Compression/CompressionExtensions.cs @@ -0,0 +1,75 @@ +/* +* Copyright (c) 2023 Vaughn Nugent +* +* Library: VNLib +* Package: VNLib.Net.Compression +* File: CompressionExtensions.cs +* +* CompressionExtensions.cs is part of VNLib.Net.Compression which is part of +* the larger VNLib collection of libraries and utilities. +* +* VNLib.Net.Compression is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published +* by the Free Software Foundation, either version 2 of the License, +* or (at your option) any later version. +* +* VNLib.Net.Compression is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with VNLib.Net.Compression. If not, see http://www.gnu.org/licenses/. +*/ + +using System; +using System.Buffers; + +using VNLib.Net.Http; + +namespace VNLib.Net.Compression +{ + internal static class CompressionExtensions + { + /// <summary> + /// Compresses a block using the compressor context pointer provided + /// </summary> + /// <param name="nativeLib"></param> + /// <param name="comp">A pointer to the compressor context</param> + /// <param name="output">A buffer to write the result to</param> + /// <param name="input">The input block of memory to compress</param> + /// <param name="finalBlock">A value that indicates if a flush is requested</param> + /// <returns>The results of the compression operation</returns> + public static unsafe CompressionResult CompressBlock(this LibraryWrapper nativeLib, IntPtr comp, Memory<byte> output, ReadOnlyMemory<byte> input, bool finalBlock) + { + //get pointers to the input and output buffers + using MemoryHandle inPtr = input.Pin(); + using MemoryHandle outPtr = output.Pin(); + + //Create the operation struct + CompressionOperation operation; + CompressionOperation* op = &operation; + + op->flush = finalBlock ? 1 : 0; + op->bytesRead = 0; + op->bytesWritten = 0; + + //Configure the input and output buffers + op->inputBuffer = inPtr.Pointer; + op->inputSize = input.Length; + + op->outputBuffer = outPtr.Pointer; + op->outputSize = output.Length; + + //Call the native compress function + nativeLib!.CompressBlock(comp, &operation); + + //Return the number of bytes written + return new() + { + BytesRead = op->bytesRead, + BytesWritten = op->bytesWritten + }; + } + } +}
\ No newline at end of file |