mirror of
https://github.com/facebook/zstd.git
synced 2025-08-07 06:23:00 +03:00
added ZSTD_compress_usingDict()
This commit is contained in:
@@ -2180,3 +2180,41 @@ size_t ZSTD_compress(void* dst, size_t maxDstSize, const void* src, size_t srcSi
|
|||||||
free(ctxBody.workSpace); /* can't free ctxBody, since it's on stack; free heap content */
|
free(ctxBody.workSpace); /* can't free ctxBody, since it's on stack; free heap content */
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size_t ZSTD_compress_usingDict(ZSTD_CCtx* ctx,
|
||||||
|
void* dst, size_t maxDstSize,
|
||||||
|
const void* src, size_t srcSize,
|
||||||
|
const void* dict, size_t dictSize,
|
||||||
|
int compressionLevel)
|
||||||
|
{
|
||||||
|
BYTE* const ostart = (BYTE*)dst;
|
||||||
|
BYTE* op = ostart;
|
||||||
|
size_t oSize;
|
||||||
|
|
||||||
|
/* Header */
|
||||||
|
oSize = ZSTD_compressBegin_advanced(ctx, dst, maxDstSize, ZSTD_getParams(compressionLevel, srcSize+dictSize));
|
||||||
|
if (ZSTD_isError(oSize)) return oSize;
|
||||||
|
op += oSize;
|
||||||
|
maxDstSize -= oSize;
|
||||||
|
|
||||||
|
if (dict)
|
||||||
|
{
|
||||||
|
oSize = ZSTD_compress_insertDictionary(ctx, dict, dictSize);
|
||||||
|
if (ZSTD_isError(oSize)) return oSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* body (compression) */
|
||||||
|
oSize = ZSTD_compressContinue(ctx, op, maxDstSize, src, srcSize);
|
||||||
|
if (ZSTD_isError(oSize)) return oSize;
|
||||||
|
op += oSize;
|
||||||
|
maxDstSize -= oSize;
|
||||||
|
|
||||||
|
/* Close frame */
|
||||||
|
oSize = ZSTD_compressEnd(ctx, op, maxDstSize);
|
||||||
|
if (ZSTD_isError(oSize)) return oSize;
|
||||||
|
op += oSize;
|
||||||
|
|
||||||
|
return (op - ostart);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -98,9 +98,17 @@ ZSTDLIB_API size_t ZSTD_compress_advanced (ZSTD_CCtx* ctx,
|
|||||||
const void* src, size_t srcSize,
|
const void* src, size_t srcSize,
|
||||||
ZSTD_parameters params);
|
ZSTD_parameters params);
|
||||||
|
|
||||||
|
/** ZSTD_compress_usingDict
|
||||||
|
* Same as ZSTD_compressCCtx(), using a Dictionary content as prefix */
|
||||||
|
ZSTDLIB_API size_t ZSTD_compress_usingDict(ZSTD_CCtx* ctx,
|
||||||
|
void* dst, size_t maxDstSize,
|
||||||
|
const void* src, size_t srcSize,
|
||||||
|
const void* dict,size_t dictSize,
|
||||||
|
int compressionLevel);
|
||||||
|
|
||||||
|
|
||||||
/* **************************************
|
/* **************************************
|
||||||
* Streaming functions (bufferless mode)
|
* Streaming functions (direct mode)
|
||||||
****************************************/
|
****************************************/
|
||||||
ZSTDLIB_API size_t ZSTD_compressBegin(ZSTD_CCtx* cctx, void* dst, size_t maxDstSize, int compressionLevel);
|
ZSTDLIB_API size_t ZSTD_compressBegin(ZSTD_CCtx* cctx, void* dst, size_t maxDstSize, int compressionLevel);
|
||||||
ZSTDLIB_API size_t ZSTD_compressBegin_advanced(ZSTD_CCtx* ctx, void* dst, size_t maxDstSize, ZSTD_parameters params);
|
ZSTDLIB_API size_t ZSTD_compressBegin_advanced(ZSTD_CCtx* ctx, void* dst, size_t maxDstSize, ZSTD_parameters params);
|
||||||
|
@@ -211,8 +211,6 @@ typedef struct
|
|||||||
size_t resSize;
|
size_t resSize;
|
||||||
} blockParam_t;
|
} blockParam_t;
|
||||||
|
|
||||||
typedef size_t (*compressor_t) (void* dst, size_t maxDstSize, const void* src, size_t srcSize, int compressionLevel);
|
|
||||||
|
|
||||||
#define MIN(a,b) ((a)<(b) ? (a) : (b))
|
#define MIN(a,b) ((a)<(b) ? (a) : (b))
|
||||||
|
|
||||||
static int BMK_benchMem(const void* srcBuffer, size_t srcSize,
|
static int BMK_benchMem(const void* srcBuffer, size_t srcSize,
|
||||||
@@ -225,7 +223,6 @@ static int BMK_benchMem(const void* srcBuffer, size_t srcSize,
|
|||||||
const size_t maxCompressedSize = ZSTD_compressBound(srcSize) + (maxNbBlocks * 1024); /* add some room for safety */
|
const size_t maxCompressedSize = ZSTD_compressBound(srcSize) + (maxNbBlocks * 1024); /* add some room for safety */
|
||||||
void* const compressedBuffer = malloc(maxCompressedSize);
|
void* const compressedBuffer = malloc(maxCompressedSize);
|
||||||
void* const resultBuffer = malloc(srcSize);
|
void* const resultBuffer = malloc(srcSize);
|
||||||
const compressor_t compressor = ZSTD_compress;
|
|
||||||
U64 crcOrig = XXH64(srcBuffer, srcSize, 0);
|
U64 crcOrig = XXH64(srcBuffer, srcSize, 0);
|
||||||
U32 nbBlocks = 0;
|
U32 nbBlocks = 0;
|
||||||
|
|
||||||
@@ -292,7 +289,7 @@ static int BMK_benchMem(const void* srcBuffer, size_t srcSize,
|
|||||||
while (BMK_GetMilliSpan(milliTime) < TIMELOOP)
|
while (BMK_GetMilliSpan(milliTime) < TIMELOOP)
|
||||||
{
|
{
|
||||||
for (blockNb=0; blockNb<nbBlocks; blockNb++)
|
for (blockNb=0; blockNb<nbBlocks; blockNb++)
|
||||||
blockTable[blockNb].cSize = compressor(blockTable[blockNb].cPtr, blockTable[blockNb].cRoom, blockTable[blockNb].srcPtr,blockTable[blockNb].srcSize, cLevel);
|
blockTable[blockNb].cSize = ZSTD_compress(blockTable[blockNb].cPtr, blockTable[blockNb].cRoom, blockTable[blockNb].srcPtr,blockTable[blockNb].srcSize, cLevel);
|
||||||
nbLoops++;
|
nbLoops++;
|
||||||
}
|
}
|
||||||
milliTime = BMK_GetMilliSpan(milliTime);
|
milliTime = BMK_GetMilliSpan(milliTime);
|
||||||
@@ -475,7 +472,7 @@ static void BMK_syntheticTest(int cLevel, double compressibility)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int BMK_benchFiles(const char** fileNamesTable, unsigned nbFiles, unsigned cLevel)
|
int BMK_benchFiles(const char** fileNamesTable, unsigned nbFiles, int cLevel)
|
||||||
{
|
{
|
||||||
double compressibility = (double)g_compressibilityDefault / 100;
|
double compressibility = (double)g_compressibilityDefault / 100;
|
||||||
|
|
||||||
|
@@ -26,7 +26,7 @@
|
|||||||
|
|
||||||
|
|
||||||
/* Main function */
|
/* Main function */
|
||||||
int BMK_benchFiles(const char** fileNamesTable, unsigned nbFiles, unsigned cLevel);
|
int BMK_benchFiles(const char** fileNamesTable, unsigned nbFiles, int cLevel);
|
||||||
|
|
||||||
/* Set Parameters */
|
/* Set Parameters */
|
||||||
void BMK_SetNbIterations(int nbLoops);
|
void BMK_SetNbIterations(int nbLoops);
|
||||||
|
Reference in New Issue
Block a user