diff options
author | Conrad Meyer <cem@FreeBSD.org> | 2018-10-22 19:45:18 +0000 |
---|---|---|
committer | Conrad Meyer <cem@FreeBSD.org> | 2018-10-22 19:45:18 +0000 |
commit | 1767cc4987b68ace957ea34c20634485d4232611 (patch) | |
tree | 61ddbc2b340b4c1007a520df793f7222a1b4bb6f /lib/legacy/zstd_v06.c | |
parent | 653667f9dc9cc0169deeca1a82a60c2e91d5683a (diff) |
Diffstat (limited to 'lib/legacy/zstd_v06.c')
-rw-r--r-- | lib/legacy/zstd_v06.c | 78 |
1 files changed, 1 insertions, 77 deletions
diff --git a/lib/legacy/zstd_v06.c b/lib/legacy/zstd_v06.c index 62683f994a958..19116f108148c 100644 --- a/lib/legacy/zstd_v06.c +++ b/lib/legacy/zstd_v06.c @@ -839,16 +839,6 @@ MEM_STATIC BITv06_DStream_status BITv06_reloadDStream(BITv06_DStream_t* bitD); MEM_STATIC unsigned BITv06_endOfDStream(const BITv06_DStream_t* bitD); -/* Start by invoking BITv06_initDStream(). -* A chunk of the bitStream is then stored into a local register. -* Local register size is 64-bits on 64-bits systems, 32-bits on 32-bits systems (size_t). -* You can then retrieve bitFields stored into the local register, **in reverse order**. -* Local register is explicitly reloaded from memory by the BITv06_reloadDStream() method. -* A reload guarantee a minimum of ((8*sizeof(bitD->bitContainer))-7) bits when its result is BITv06_DStream_unfinished. -* Otherwise, it can be less than that, so proceed accordingly. -* Checking if DStream has reached its end can be performed with BITv06_endOfDStream(). -*/ - /*-**************************************** * unsafe API @@ -861,7 +851,7 @@ MEM_STATIC size_t BITv06_readBitsFast(BITv06_DStream_t* bitD, unsigned nbBits); /*-************************************************************** * Internal functions ****************************************************************/ -MEM_STATIC unsigned BITv06_highbit32 (register U32 val) +MEM_STATIC unsigned BITv06_highbit32 ( U32 val) { # if defined(_MSC_VER) /* Visual */ unsigned long r=0; @@ -929,13 +919,6 @@ MEM_STATIC size_t BITv06_initDStream(BITv06_DStream_t* bitD, const void* srcBuff } -/*! BITv06_lookBits() : - * Provides next n bits from local register. - * local register is not modified. - * On 32-bits, maxNbBits==24. - * On 64-bits, maxNbBits==56. - * @return : value extracted - */ MEM_STATIC size_t BITv06_lookBits(const BITv06_DStream_t* bitD, U32 nbBits) { U32 const bitMask = sizeof(bitD->bitContainer)*8 - 1; @@ -955,11 +938,6 @@ MEM_STATIC void BITv06_skipBits(BITv06_DStream_t* bitD, U32 nbBits) bitD->bitsConsumed += nbBits; } -/*! BITv06_readBits() : - * Read (consume) next n bits from local register and update. - * Pay attention to not read more than nbBits contained into local register. - * @return : extracted value. - */ MEM_STATIC size_t BITv06_readBits(BITv06_DStream_t* bitD, U32 nbBits) { size_t const value = BITv06_lookBits(bitD, nbBits); @@ -976,11 +954,6 @@ MEM_STATIC size_t BITv06_readBitsFast(BITv06_DStream_t* bitD, U32 nbBits) return value; } -/*! BITv06_reloadDStream() : -* Refill `BITv06_DStream_t` from src buffer previously defined (see BITv06_initDStream() ). -* This function is safe, it guarantees it will not read beyond src buffer. -* @return : status of `BITv06_DStream_t` internal register. - if status == unfinished, internal register is filled with >= (sizeof(bitD->bitContainer)*8 - 7) bits */ MEM_STATIC BITv06_DStream_status BITv06_reloadDStream(BITv06_DStream_t* bitD) { if (bitD->bitsConsumed > (sizeof(bitD->bitContainer)*8)) /* should never happen */ @@ -1103,55 +1076,6 @@ static void FSEv06_initDState(FSEv06_DState_t* DStatePtr, BITv06_DStream_t* static unsigned char FSEv06_decodeSymbol(FSEv06_DState_t* DStatePtr, BITv06_DStream_t* bitD); -/*! -Let's now decompose FSEv06_decompress_usingDTable() into its unitary components. -You will decode FSE-encoded symbols from the bitStream, -and also any other bitFields you put in, **in reverse order**. - -You will need a few variables to track your bitStream. They are : - -BITv06_DStream_t DStream; // Stream context -FSEv06_DState_t DState; // State context. Multiple ones are possible -FSEv06_DTable* DTablePtr; // Decoding table, provided by FSEv06_buildDTable() - -The first thing to do is to init the bitStream. - errorCode = BITv06_initDStream(&DStream, srcBuffer, srcSize); - -You should then retrieve your initial state(s) -(in reverse flushing order if you have several ones) : - errorCode = FSEv06_initDState(&DState, &DStream, DTablePtr); - -You can then decode your data, symbol after symbol. -For information the maximum number of bits read by FSEv06_decodeSymbol() is 'tableLog'. -Keep in mind that symbols are decoded in reverse order, like a LIFO stack (last in, first out). - unsigned char symbol = FSEv06_decodeSymbol(&DState, &DStream); - -You can retrieve any bitfield you eventually stored into the bitStream (in reverse order) -Note : maximum allowed nbBits is 25, for 32-bits compatibility - size_t bitField = BITv06_readBits(&DStream, nbBits); - -All above operations only read from local register (which size depends on size_t). -Refueling the register from memory is manually performed by the reload method. - endSignal = FSEv06_reloadDStream(&DStream); - -BITv06_reloadDStream() result tells if there is still some more data to read from DStream. -BITv06_DStream_unfinished : there is still some data left into the DStream. -BITv06_DStream_endOfBuffer : Dstream reached end of buffer. Its container may no longer be completely filled. -BITv06_DStream_completed : Dstream reached its exact end, corresponding in general to decompression completed. -BITv06_DStream_tooFar : Dstream went too far. Decompression result is corrupted. - -When reaching end of buffer (BITv06_DStream_endOfBuffer), progress slowly, notably if you decode multiple symbols per loop, -to properly detect the exact end of stream. -After each decoded symbol, check if DStream is fully consumed using this simple test : - BITv06_reloadDStream(&DStream) >= BITv06_DStream_completed - -When it's done, verify decompression is fully completed, by checking both DStream and the relevant states. -Checking if DStream has reached its end is performed by : - BITv06_endOfDStream(&DStream); -Check also the states. There might be some symbols left there, if some high probability ones (>50%) are possible. - FSEv06_endOfDState(&DState); -*/ - /* ***************************************** * FSE unsafe API |