Editor/Embedded/ZstdSharp/Unsafe/ZSTD_DCtx_s.cs

Unsafe C# struct mapping of ZSTD decompression context from Zstandard library, used in editor tooling. It declares pointers, buffers, enums and state fields needed to perform streaming decompression, dictionary handling, checksum flags and internal workspaces.

Native Interop
#nullable enable
using System;
using System.Collections.Generic;
using System.Linq;
namespace HumanoidRetargeter.EditorTools.Embedded.ZstdSharp.Unsafe;

    public unsafe struct ZSTD_DCtx_s
    {
        public ZSTD_seqSymbol* LLTptr;
        public ZSTD_seqSymbol* MLTptr;
        public ZSTD_seqSymbol* OFTptr;
        public uint* HUFptr;
        public ZSTD_entropyDTables_t entropy;
        /* space needed when building huffman tables */
        public fixed uint workspace[640];
        /* detect continuity */
        public void* previousDstEnd;
        /* start of current segment */
        public void* prefixStart;
        /* virtual start of previous segment if it was just before current one */
        public void* virtualStart;
        /* end of previous segment */
        public void* dictEnd;
        public nuint expected;
        public ZSTD_frameHeader fParams;
        public ulong processedCSize;
        public ulong decodedSize;
        /* used in ZSTD_decompressContinue(), store blockType between block header decoding and block decompression stages */
        public blockType_e bType;
        public ZSTD_dStage stage;
        public uint litEntropy;
        public uint fseEntropy;
        public XXH64_state_s xxhState;
        public nuint headerSize;
        public ZSTD_format_e format;
        /* User specified: if == 1, will ignore checksums in compressed frame. Default == 0 */
        public ZSTD_forceIgnoreChecksum_e forceIgnoreChecksum;
        /* if == 1, will validate checksum. Is == 1 if (fParams.checksumFlag == 1) and (forceIgnoreChecksum == 0). */
        public uint validateChecksum;
        public byte* litPtr;
        public ZSTD_customMem customMem;
        public nuint litSize;
        public nuint rleSize;
        public nuint staticSize;
        public int isFrameDecompression;
        /* dictionary */
        public ZSTD_DDict_s* ddictLocal;
        /* set by ZSTD_initDStream_usingDDict(), or ZSTD_DCtx_refDDict() */
        public ZSTD_DDict_s* ddict;
        public uint dictID;
        /* if == 1 : dictionary is "new" for working context, and presumed "cold" (not in cpu cache) */
        public int ddictIsCold;
        public ZSTD_dictUses_e dictUses;
        /* Hash set for multiple ddicts */
        public ZSTD_DDictHashSet* ddictSet;
        /* User specified: if == 1, will allow references to multiple DDicts. Default == 0 (disabled) */
        public ZSTD_refMultipleDDicts_e refMultipleDDicts;
        public int disableHufAsm;
        public int maxBlockSizeParam;
        /* streaming */
        public ZSTD_dStreamStage streamStage;
        public sbyte* inBuff;
        public nuint inBuffSize;
        public nuint inPos;
        public nuint maxWindowSize;
        public sbyte* outBuff;
        public nuint outBuffSize;
        public nuint outStart;
        public nuint outEnd;
        public nuint lhSize;
        public uint hostageByte;
        public int noForwardProgress;
        public ZSTD_bufferMode_e outBufferMode;
        public ZSTD_outBuffer_s expectedOutBuffer;
        /* workspace */
        public byte* litBuffer;
        public byte* litBufferEnd;
        public ZSTD_litLocation_e litBufferLocation;
        /* literal buffer can be split between storage within dst and within this scratch buffer */
        public fixed byte litExtraBuffer[65568];
        public fixed byte headerBuffer[18];
        public nuint oversizedDuration;
    }