@@ -866,6 +866,24 @@ size_t ZSTD_sizeof_DDict(const ZSTD_DDict* ddict);
|
|||||||
|
|
||||||
<BR></pre>
|
<BR></pre>
|
||||||
|
|
||||||
|
<pre><b>typedef struct {
|
||||||
|
unsigned int matchPos; </b>/* Match pos in dst */<b>
|
||||||
|
</b>/* If seqDef.offset > 3, then this is seqDef.offset - 3<b>
|
||||||
|
* If seqDef.offset < 3, then this is the corresponding repeat offset
|
||||||
|
* But if seqDef.offset < 3 and litLength == 0, this is the
|
||||||
|
* repeat offset before the corresponding repeat offset
|
||||||
|
* And if seqDef.offset == 3 and litLength == 0, this is the
|
||||||
|
* most recent repeat offset - 1
|
||||||
|
*/
|
||||||
|
unsigned int offset;
|
||||||
|
unsigned int litLength; </b>/* Literal length */<b>
|
||||||
|
unsigned int matchLength; </b>/* Match length */<b>
|
||||||
|
</b>/* 0 when seq not rep and seqDef.offset otherwise<b>
|
||||||
|
* when litLength == 0 this will be <= 4, otherwise <= 3 like normal
|
||||||
|
*/
|
||||||
|
unsigned int rep;
|
||||||
|
} ZSTD_Sequence;
|
||||||
|
</b></pre><BR>
|
||||||
<pre><b>typedef struct {
|
<pre><b>typedef struct {
|
||||||
unsigned windowLog; </b>/**< largest match distance : larger == more compression, more memory needed during decompression */<b>
|
unsigned windowLog; </b>/**< largest match distance : larger == more compression, more memory needed during decompression */<b>
|
||||||
unsigned chainLog; </b>/**< fully searched segment : larger == more compression, slower, more memory (useless for fast) */<b>
|
unsigned chainLog; </b>/**< fully searched segment : larger == more compression, slower, more memory (useless for fast) */<b>
|
||||||
@@ -1001,6 +1019,15 @@ size_t ZSTD_sizeof_DDict(const ZSTD_DDict* ddict);
|
|||||||
or an error code (if srcSize is too small)
|
or an error code (if srcSize is too small)
|
||||||
</p></pre><BR>
|
</p></pre><BR>
|
||||||
|
|
||||||
|
<pre><b>size_t ZSTD_getSequences(ZSTD_CCtx* zc, ZSTD_Sequence* outSeqs,
|
||||||
|
size_t outSeqsSize, const void* src, size_t srcSize);
|
||||||
|
</b><p> Extract sequences from the sequence store
|
||||||
|
zc can be used to insert custom compression params.
|
||||||
|
This function invokes ZSTD_compress2
|
||||||
|
@return : number of sequences extracted
|
||||||
|
|
||||||
|
</p></pre><BR>
|
||||||
|
|
||||||
<a name="Chapter16"></a><h2>Memory management</h2><pre></pre>
|
<a name="Chapter16"></a><h2>Memory management</h2><pre></pre>
|
||||||
|
|
||||||
<pre><b>size_t ZSTD_estimateCCtxSize(int compressionLevel);
|
<pre><b>size_t ZSTD_estimateCCtxSize(int compressionLevel);
|
||||||
|
|||||||
@@ -247,20 +247,6 @@ void ZSTD_wildcopy(void* dst, const void* src, ptrdiff_t length, ZSTD_overlap_e
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*! ZSTD_wildcopy8() :
|
|
||||||
* The same as ZSTD_wildcopy(), but it can only overwrite 8 bytes, and works for
|
|
||||||
* overlapping buffers that are at least 8 bytes apart.
|
|
||||||
*/
|
|
||||||
MEM_STATIC void ZSTD_wildcopy8(void* dst, const void* src, ptrdiff_t length)
|
|
||||||
{
|
|
||||||
const BYTE* ip = (const BYTE*)src;
|
|
||||||
BYTE* op = (BYTE*)dst;
|
|
||||||
BYTE* const oend = (BYTE*)op + length;
|
|
||||||
do {
|
|
||||||
COPY8(op, ip);
|
|
||||||
} while (op < oend);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*-*******************************************
|
/*-*******************************************
|
||||||
* Private declarations
|
* Private declarations
|
||||||
|
|||||||
+19
-20
@@ -88,7 +88,7 @@ static UTIL_time_t g_displayClock = UTIL_TIME_INITIALIZER;
|
|||||||
#endif
|
#endif
|
||||||
#define DEBUGOUTPUT(...) { if (DEBUG) DISPLAY(__VA_ARGS__); }
|
#define DEBUGOUTPUT(...) { if (DEBUG) DISPLAY(__VA_ARGS__); }
|
||||||
|
|
||||||
#define EXM_THROW_INT(errorNum, ...) { \
|
#define RETURN_ERROR_INT(errorNum, ...) { \
|
||||||
DEBUGOUTPUT("%s: %i: \n", __FILE__, __LINE__); \
|
DEBUGOUTPUT("%s: %i: \n", __FILE__, __LINE__); \
|
||||||
DISPLAYLEVEL(1, "Error %i : ", errorNum); \
|
DISPLAYLEVEL(1, "Error %i : ", errorNum); \
|
||||||
DISPLAYLEVEL(1, __VA_ARGS__); \
|
DISPLAYLEVEL(1, __VA_ARGS__); \
|
||||||
@@ -401,9 +401,9 @@ BMK_benchMemAdvancedNoAlloc(
|
|||||||
BMK_initCCtxArgs cctxprep;
|
BMK_initCCtxArgs cctxprep;
|
||||||
BMK_initDCtxArgs dctxprep;
|
BMK_initDCtxArgs dctxprep;
|
||||||
|
|
||||||
cbp.benchFn = local_defaultCompress;
|
cbp.benchFn = local_defaultCompress; /* ZSTD_compress2 */
|
||||||
cbp.benchPayload = cctx;
|
cbp.benchPayload = cctx;
|
||||||
cbp.initFn = local_initCCtx;
|
cbp.initFn = local_initCCtx; /* BMK_initCCtx */
|
||||||
cbp.initPayload = &cctxprep;
|
cbp.initPayload = &cctxprep;
|
||||||
cbp.errorFn = ZSTD_isError;
|
cbp.errorFn = ZSTD_isError;
|
||||||
cbp.blockCount = nbBlocks;
|
cbp.blockCount = nbBlocks;
|
||||||
@@ -534,8 +534,8 @@ BMK_benchMemAdvancedNoAlloc(
|
|||||||
if (u==srcSize-1) { /* should never happen */
|
if (u==srcSize-1) { /* should never happen */
|
||||||
DISPLAY("no difference detected\n");
|
DISPLAY("no difference detected\n");
|
||||||
}
|
}
|
||||||
}
|
} /* for (u=0; u<srcSize; u++) */
|
||||||
}
|
} /* if ((adv->mode == BMK_both) && (crcOrig!=crcCheck)) */
|
||||||
} /* CRC Checking */
|
} /* CRC Checking */
|
||||||
|
|
||||||
if (displayLevel == 1) { /* hidden display mode -q, used by python speed benchmark */
|
if (displayLevel == 1) { /* hidden display mode -q, used by python speed benchmark */
|
||||||
@@ -754,8 +754,7 @@ static int BMK_loadFiles(void* buffer, size_t bufferSize,
|
|||||||
size_t pos = 0, totalSize = 0;
|
size_t pos = 0, totalSize = 0;
|
||||||
unsigned n;
|
unsigned n;
|
||||||
for (n=0; n<nbFiles; n++) {
|
for (n=0; n<nbFiles; n++) {
|
||||||
FILE* f;
|
U64 fileSize = UTIL_getFileSize(fileNamesTable[n]); /* last file may be shortened */
|
||||||
U64 fileSize = UTIL_getFileSize(fileNamesTable[n]);
|
|
||||||
if (UTIL_isDirectory(fileNamesTable[n])) {
|
if (UTIL_isDirectory(fileNamesTable[n])) {
|
||||||
DISPLAYLEVEL(2, "Ignoring %s directory... \n", fileNamesTable[n]);
|
DISPLAYLEVEL(2, "Ignoring %s directory... \n", fileNamesTable[n]);
|
||||||
fileSizes[n] = 0;
|
fileSizes[n] = 0;
|
||||||
@@ -766,20 +765,20 @@ static int BMK_loadFiles(void* buffer, size_t bufferSize,
|
|||||||
fileSizes[n] = 0;
|
fileSizes[n] = 0;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
f = fopen(fileNamesTable[n], "rb");
|
{ FILE* const f = fopen(fileNamesTable[n], "rb");
|
||||||
if (f==NULL) EXM_THROW_INT(10, "impossible to open file %s", fileNamesTable[n]);
|
if (f==NULL) RETURN_ERROR_INT(10, "impossible to open file %s", fileNamesTable[n]);
|
||||||
DISPLAYUPDATE(2, "Loading %s... \r", fileNamesTable[n]);
|
DISPLAYUPDATE(2, "Loading %s... \r", fileNamesTable[n]);
|
||||||
if (fileSize > bufferSize-pos) fileSize = bufferSize-pos, nbFiles=n; /* buffer too small - stop after this file */
|
if (fileSize > bufferSize-pos) fileSize = bufferSize-pos, nbFiles=n; /* buffer too small - stop after this file */
|
||||||
{ size_t const readSize = fread(((char*)buffer)+pos, 1, (size_t)fileSize, f);
|
{ size_t const readSize = fread(((char*)buffer)+pos, 1, (size_t)fileSize, f);
|
||||||
if (readSize != (size_t)fileSize) EXM_THROW_INT(11, "could not read %s", fileNamesTable[n]);
|
if (readSize != (size_t)fileSize) RETURN_ERROR_INT(11, "could not read %s", fileNamesTable[n]);
|
||||||
pos += readSize;
|
pos += readSize;
|
||||||
}
|
}
|
||||||
fileSizes[n] = (size_t)fileSize;
|
fileSizes[n] = (size_t)fileSize;
|
||||||
totalSize += (size_t)fileSize;
|
totalSize += (size_t)fileSize;
|
||||||
fclose(f);
|
fclose(f);
|
||||||
}
|
} }
|
||||||
|
|
||||||
if (totalSize == 0) EXM_THROW_INT(12, "no data to bench");
|
if (totalSize == 0) RETURN_ERROR_INT(12, "no data to bench");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -205,7 +205,6 @@ BMK_benchOutcome_t BMK_benchMemAdvanced(const void* srcBuffer, size_t srcSize,
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* BENCH_ZSTD_H_3242387 */
|
#endif /* BENCH_ZSTD_H_3242387 */
|
||||||
|
|
||||||
#if defined (__cplusplus)
|
#if defined (__cplusplus)
|
||||||
|
|||||||
Reference in New Issue
Block a user