From 3a6d24b1d99df6233baf3370aacadd25a437e590 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 29 Nov 2025 13:36:01 +0000 Subject: [PATCH] Add ZStandard frame and dictionary types Co-authored-by: adamhathcock <527620+adamhathcock@users.noreply.github.com> --- .../ZStandard/Unsafe/ZSTD_ResetDirective.cs | 8 +++++++ .../Unsafe/ZSTD_dictContentType_e.cs | 13 ++++++++++++ .../ZStandard/Unsafe/ZSTD_dictLoadMethod_e.cs | 10 +++++++++ .../ZStandard/Unsafe/ZSTD_frameHeader.cs | 21 +++++++++++++++++++ .../ZStandard/Unsafe/ZSTD_frameType_e.cs | 7 +++++++ 5 files changed, 59 insertions(+) create mode 100644 src/SharpCompress/Compressors/ZStandard/Unsafe/ZSTD_ResetDirective.cs create mode 100644 src/SharpCompress/Compressors/ZStandard/Unsafe/ZSTD_dictContentType_e.cs create mode 100644 src/SharpCompress/Compressors/ZStandard/Unsafe/ZSTD_dictLoadMethod_e.cs create mode 100644 src/SharpCompress/Compressors/ZStandard/Unsafe/ZSTD_frameHeader.cs create mode 100644 src/SharpCompress/Compressors/ZStandard/Unsafe/ZSTD_frameType_e.cs diff --git a/src/SharpCompress/Compressors/ZStandard/Unsafe/ZSTD_ResetDirective.cs b/src/SharpCompress/Compressors/ZStandard/Unsafe/ZSTD_ResetDirective.cs new file mode 100644 index 00000000..df0bd035 --- /dev/null +++ b/src/SharpCompress/Compressors/ZStandard/Unsafe/ZSTD_ResetDirective.cs @@ -0,0 +1,8 @@ +namespace SharpCompress.Compressors.ZStandard.Unsafe; + +public enum ZSTD_ResetDirective +{ + ZSTD_reset_session_only = 1, + ZSTD_reset_parameters = 2, + ZSTD_reset_session_and_parameters = 3, +} diff --git a/src/SharpCompress/Compressors/ZStandard/Unsafe/ZSTD_dictContentType_e.cs b/src/SharpCompress/Compressors/ZStandard/Unsafe/ZSTD_dictContentType_e.cs new file mode 100644 index 00000000..18e7172f --- /dev/null +++ b/src/SharpCompress/Compressors/ZStandard/Unsafe/ZSTD_dictContentType_e.cs @@ -0,0 +1,13 @@ +namespace SharpCompress.Compressors.ZStandard.Unsafe; + +public enum ZSTD_dictContentType_e +{ + /// dictionary is "full" when starting with ZSTD_MAGIC_DICTIONARY, otherwise it is "rawContent" + ZSTD_dct_auto = 0, + + /// ensures dictionary is always loaded as rawContent, even if it starts with ZSTD_MAGIC_DICTIONARY + ZSTD_dct_rawContent = 1, + + /// refuses to load a dictionary if it does not respect Zstandard's specification + ZSTD_dct_fullDict = 2, +} diff --git a/src/SharpCompress/Compressors/ZStandard/Unsafe/ZSTD_dictLoadMethod_e.cs b/src/SharpCompress/Compressors/ZStandard/Unsafe/ZSTD_dictLoadMethod_e.cs new file mode 100644 index 00000000..5d1ee309 --- /dev/null +++ b/src/SharpCompress/Compressors/ZStandard/Unsafe/ZSTD_dictLoadMethod_e.cs @@ -0,0 +1,10 @@ +namespace SharpCompress.Compressors.ZStandard.Unsafe; + +public enum ZSTD_dictLoadMethod_e +{ + /// Copy dictionary content internally + ZSTD_dlm_byCopy = 0, + + /// Reference dictionary content -- the dictionary buffer must outlive its users + ZSTD_dlm_byRef = 1, +} diff --git a/src/SharpCompress/Compressors/ZStandard/Unsafe/ZSTD_frameHeader.cs b/src/SharpCompress/Compressors/ZStandard/Unsafe/ZSTD_frameHeader.cs new file mode 100644 index 00000000..3caa2787 --- /dev/null +++ b/src/SharpCompress/Compressors/ZStandard/Unsafe/ZSTD_frameHeader.cs @@ -0,0 +1,21 @@ +namespace SharpCompress.Compressors.ZStandard.Unsafe; + +public struct ZSTD_frameHeader +{ + /// if == ZSTD_CONTENTSIZE_UNKNOWN, it means this field is not available. 0 means "empty" + public ulong frameContentSize; + + /// can be very large, up to frameContentSize + public ulong windowSize; + public uint blockSizeMax; + + /// if == ZSTD_skippableFrame, frameContentSize is the size of skippable content + public ZSTD_frameType_e frameType; + public uint headerSize; + + /// for ZSTD_skippableFrame, contains the skippable magic variant [0-15] + public uint dictID; + public uint checksumFlag; + public uint _reserved1; + public uint _reserved2; +} diff --git a/src/SharpCompress/Compressors/ZStandard/Unsafe/ZSTD_frameType_e.cs b/src/SharpCompress/Compressors/ZStandard/Unsafe/ZSTD_frameType_e.cs new file mode 100644 index 00000000..a399748f --- /dev/null +++ b/src/SharpCompress/Compressors/ZStandard/Unsafe/ZSTD_frameType_e.cs @@ -0,0 +1,7 @@ +namespace SharpCompress.Compressors.ZStandard.Unsafe; + +public enum ZSTD_frameType_e +{ + ZSTD_frame, + ZSTD_skippableFrame, +}