]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
Merge branch 'dev' into LegacyDictBuilder
authorYann Collet <cyan@fb.com>
Sun, 26 Mar 2017 21:39:13 +0000 (14:39 -0700)
committerYann Collet <cyan@fb.com>
Sun, 26 Mar 2017 21:39:13 +0000 (14:39 -0700)
1  2 
lib/dictBuilder/zdict.c

index 2c87084ac6dbade50d053855db6881c608c08918,6bc42526af2db821b9c7bcb78f4f491c2103d965..cd2e3a2f52c708927c4ad0e06f461310ae674b57
@@@ -361,24 -361,11 +361,24 @@@ static dictItem ZDICT_analyzePos
  }
  
  
 -/*! ZDICT_tryMerge() :
 - *  check if dictItem can be merged, do it if possible
 - *  @return : id of destination elt, 0 if not merged
 - */
 -static U32 ZDICT_tryMerge(dictItem* table, dictItem elt, U32 eltNbToSkip)
 +static int isIncluded(const void* in, const void* container, size_t length)
 +{
 +    const char* const ip = (const char*) in;
 +    const char* const into = (const char*) container;
 +    size_t u;
 +
-     for (u=0; u<length; u++) {
++    for (u=0; u<length; u++) {  /* works because end of buffer is a noisy guard band */
 +        if (ip[u] != into[u]) break;
 +    }
 +
 +    return u==length;
 +}
 +
 +/*! ZDICT_checkMerge
 +    check if dictItem can be merged, do it if possible
 +    @return : id of destination elt, 0 if not merged
 +*/
- static U32 ZDICT_checkMerge(dictItem* table, dictItem elt, U32 eltNbToSkip, const void* buffer)
++static U32 ZDICT_tryMerge(dictItem* table, dictItem elt, U32 eltNbToSkip, const void* buffer)
  {
      const U32 tableSize = table->pos;
      const U32 eltEnd = elt.pos + elt.length;
@@@ -449,14 -423,14 +449,14 @@@ static void ZDICT_removeDictItem(dictIt
  }
  
  
 -static void ZDICT_insertDictItem(dictItem* table, U32 maxSize, dictItem elt)
 +static void ZDICT_insertDictItem(dictItem* table, U32 maxSize, dictItem elt, const void* buffer)
  {
      /* merge if possible */
-     U32 mergeId = ZDICT_checkMerge(table, elt, 0, buffer);
 -    U32 mergeId = ZDICT_tryMerge(table, elt, 0);
 -    if (mergeId) {  /* recursive : re-merge the newly merged elt */
++    U32 mergeId = ZDICT_tryMerge(table, elt, 0, buffer);
 +    if (mergeId) {
          U32 newMerge = 1;
          while (newMerge) {
-             newMerge = ZDICT_checkMerge(table, table[mergeId], mergeId, buffer);
 -            newMerge = ZDICT_tryMerge(table, table[mergeId], mergeId);  /* merge existing elt */
++            newMerge = ZDICT_tryMerge(table, table[mergeId], mergeId, buffer);
              if (newMerge) ZDICT_removeDictItem(table, mergeId);
              mergeId = newMerge;
          }