1
0
mirror of https://github.com/facebook/zstd.git synced 2025-03-06 16:56:49 +02:00

added or updated code comments

as suggested by @terrelln,
to make the code of the optimal parser a bit more understandable.
This commit is contained in:
Yann Collet 2024-02-05 18:32:25 -08:00
parent 887f5b62ae
commit b88c593d8f
2 changed files with 15 additions and 9 deletions

View File

@ -162,7 +162,7 @@ typedef struct {
int price; /* price from beginning of segment to this position */
U32 off; /* offset of previous match */
U32 mlen; /* length of previous match */
U32 litlen; /* nb of literals after previous match */
U32 litlen; /* nb of literals since previous match */
U32 rep[ZSTD_REP_NUM]; /* offset history after previous match */
} ZSTD_optimal_t;

View File

@ -1129,13 +1129,20 @@ ZSTD_compressBlock_opt_generic(ZSTD_matchState_t* ms,
continue;
}
/* Match found: let's store this solution, and eventually find more candidates.
* During this forward pass, @opt is used to store stretches,
* defined as "a match followed by N literals".
* Note how this is different from a Sequence, which is "N literals followed by a match".
* Storing stretches allows us to store different match predecessors
* for each literal position part of a literals run. */
/* initialize opt[0] */
opt[0].mlen = 0; /* there are only literals so far */
opt[0].litlen = litlen;
/* No need to include the actual price of the literals before the segment
/* No need to include the actual price of the literals before the first match
* because it is static for the duration of the forward pass, and is included
* in every subsequent price. We include the literal length as the cost variation
* of litlen depends on the value of litlen.
* in every subsequent price. But, we include the literal length because
* the cost variation of litlen depends on the value of litlen.
*/
opt[0].price = LL_PRICE(litlen);
ZSTD_STATIC_ASSERT(sizeof(opt[0].rep[0]) == sizeof(rep[0]));
@ -1353,11 +1360,10 @@ _shortestPath: /* cur, last_pos, best_mlen, best_off have to be set */
cur -= lastStretch.litlen;
}
/* let's write the shortest path solution
* solution is stored in @opt,
* in reverse order,
* starting from @storeEnd (==cur+1)
* (effectively partially overwriting @opt).
/* Let's write the shortest path solution.
* It is stored in @opt in reverse order,
* starting from @storeEnd (==cur+2),
* effectively partially @opt overwriting.
* Content is changed too:
* - So far, @opt stored stretches, aka a match followed by literals
* - Now, it will store sequences, aka literals followed by a match