| Commit message (Collapse) | Author | Age | Files | Lines |
|\
| |
| | |
conditional pattern analysis
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Pattern analysis (currently limited to long ranges of identical bytes)
is actually detrimental to performance
when `nbSearches` is low.
Reason is : `nbSearches` provides a built-in protection for these cases.
The problem with patterns is that they dramatically increase the number of candidates to visit.
But with a low nbSearches, the match finder just aborts early.
In such cases, pattern analysis adds some complexity without reducing total nb of candidates.
It actually increases compression ratio a little bit, by filtering only "good" candidates,
but at a measurable speed cost, so it's not a good trade-off.
This patch makes pattern analysis optional.
It's enabled for levels 8+ only.
|
|/
|
|
| |
no longer limited to level 9
|
| |
|
|
|
|
|
| |
which is more explicit than its value `3`.
reported by @terrelln
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The first byte used to be skipped
to avoid a infinite self-comparison.
This is no longer necessary, since init() ensures that index starts at 64K.
The first byte is also useless to search when each block is independent,
but it's no longer the case when blocks are linked.
Removing the first-byte-skip saves
about 10 bytes / MB on files compressed with -BD4 (linked blocks 64Kb),
which feels correct as each MB has 16 blocks of 64KB.
|
| |
|
|
|
|
| |
responsibility better handled one layer above (LZ4HC_compress_generic())
|
|
|
|
|
| |
nbSearches now transmitted directly as function parameter
easier to track and debug
|
|
|
|
| |
levels 11+
|
|
|
|
|
| |
saves stack space
clearer match finder interface (no more table to fill)
|
|
|
|
| |
used to be present for compatibility with binary tree matchfinder
|
|
|
|
| |
reduced size of LZ4HC state
|
| |
|
| |
|
|
|
|
| |
improving speed
|
| |
|
|
|
|
| |
tag interesting places
|
|
|
|
|
| |
sometimes, it's better to re-use same match but start it later,
in order to get shorter matchlength code
|
|
|
|
|
| |
even gained 2 bytes on calgary.tar...
added conditional traces `g_debuglog_enable`
|
|
|
|
|
|
|
| |
previous strategy would leave a few "bad choices"
on the ground they would be fixed later,
but that requires passing through each position to make the fix
and cannot give the end position of the last useful match.
|
|
|
|
| |
saving 20 bytes on calgary.tar
|
| |
|
|
|
|
| |
not a success yet
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
| |
reduce variable scope
remove one macro usage
|
| |
|
|
|
|
|
| |
separate initial and iterative search
renamed nb_matches
|
|
|
|
| |
llen integrated in opt[]
|
| |
|
| |
|
| |
|
|
|
|
| |
compilation when used with other libraries that define FORCE_INLINE
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The bug would make the bt search read one byte in an invalid memory region,
and make a branch decision based on its value.
Impact was small (missed compression opportunity).
It only happens in -BD mode, with extDict-prefix overlapping matches.
The bt match search is supposed to work also in extDict mode.
In which case, the match ptr can point into Dict.
When the match was overlapping Dict<->Prefix,
match[matchLength] would end up outside of Dict, in an invalid memory area.
The correction ensures that in such a case,
match[matchLength] ends up at intended location, inside prefix.
|
|
|
|
|
|
|
| |
This macro is susceptible to be triggered from user side
typically through compiler flag (-DLZ4_HEAPMODE=1).
In which case, it makes sense to prefix the macro
since we want to reduce potential side-effect on namespace.
|
|\ |
|
| |
| |
| |
| | |
removing a useless test
|
| | |
|
|/
|
|
| |
removing a useless test
|
|
|
|
|
| |
previous version would use argument to also change target member.
Now, only values are transferred
|
| |
|
| |
|
|
|
|
|
| |
Limits compression level to 10,
to remain compatible with Hash Chain.
|
| |
|
| |
|
| |
|