/* *************************************
* Context memory management
***************************************/
-#define WORKPLACESIZE (BLOCKSIZE*3)
-
struct ZSTD_CCtx_s
{
const BYTE* nextSrc; /* next block here to continue on current prefix */
ZSTD_parameters params;
void* workSpace;
size_t workSpaceSize;
+ size_t blockSize;
seqStore_t seqStore; /* sequences storage ptrs */
U32* hashTable;
static size_t ZSTD_resetCCtx_advanced (ZSTD_CCtx* zc,
ZSTD_parameters params)
{
+ /* note : params considered validated here */
+ const size_t blockSize = MIN(BLOCKSIZE, (size_t)1 << params.windowLog);
+
/* reserve table memory */
{
const U32 contentLog = (params.strategy == ZSTD_fast) ? 1 : params.contentLog;
const size_t tableSpace = ((1 << contentLog) + (1 << params.hashLog)) * sizeof(U32);
- const size_t neededSpace = tableSpace + WORKPLACESIZE;
+ const size_t neededSpace = tableSpace + (3*blockSize);
if (zc->workSpaceSize < neededSpace)
{
free(zc->workSpace);
zc->dictLimit = 0;
zc->lowLimit = 0;
zc->params = params;
+ zc->blockSize = blockSize;
zc->seqStore.offsetStart = (U32*) (zc->seqStore.buffer);
- zc->seqStore.offCodeStart = (BYTE*) (zc->seqStore.offsetStart + (BLOCKSIZE>>2));
- zc->seqStore.litStart = zc->seqStore.offCodeStart + (BLOCKSIZE>>2);
- zc->seqStore.litLengthStart = zc->seqStore.litStart + BLOCKSIZE;
- zc->seqStore.matchLengthStart = zc->seqStore.litLengthStart + (BLOCKSIZE>>2);
- zc->seqStore.dumpsStart = zc->seqStore.matchLengthStart + (BLOCKSIZE>>2);
+ zc->seqStore.offCodeStart = (BYTE*) (zc->seqStore.offsetStart + (blockSize>>2));
+ zc->seqStore.litStart = zc->seqStore.offCodeStart + (blockSize>>2);
+ zc->seqStore.litLengthStart = zc->seqStore.litStart + blockSize;
+ zc->seqStore.matchLengthStart = zc->seqStore.litLengthStart + (blockSize>>2);
+ zc->seqStore.dumpsStart = zc->seqStore.matchLengthStart + (blockSize>>2);
return 0;
}
void* dst, size_t maxDstSize,
const void* src, size_t srcSize)
{
- size_t blockSize = BLOCKSIZE;
+ size_t blockSize = ctxPtr->blockSize;
size_t remaining = srcSize;
const BYTE* ip = (const BYTE*)src;
BYTE* const ostart = (BYTE*)dst;