//U32 limit = 4 * BLOCKSIZE;
//const U32 updateRate = 2 * BLOCKSIZE;
- // Init
+ /* Init */
if (ctx->base==NULL) ctx->base = src, ctx->current=0;
- if (src != ctx->base + ctx->current) // not contiguous
+ if (src != ctx->base + ctx->current) /* not contiguous */
{
ZSTD_resetCCtx(ctx);
ctx->base = src;
}
*/
- // compress
+ /* compress */
if (maxDstSize < ZSTD_blockHeaderSize) return (size_t)-ZSTD_ERROR_maxDstSize_tooSmall;
cSize = ZSTD_compressBlock(ctx, op+ZSTD_blockHeaderSize, maxDstSize-ZSTD_blockHeaderSize, ip, blockSize);
if (cSize == 0)
{
- cSize = ZSTD_noCompressBlock(op, maxDstSize, ip, blockSize);
+ cSize = ZSTD_noCompressBlock(op, maxDstSize, ip, blockSize); /* block is not compressible */
if (ZSTD_isError(cSize)) return cSize;
}
else
BYTE* const ostart = dst;
BYTE* op = ostart;
- // Header
+ /* Header */
{
size_t headerSize = ZSTD_compressBegin(ctx, dst, maxDstSize);
if(ZSTD_isError(headerSize)) return headerSize;
maxDstSize -= headerSize;
}
- // Compression
+ /* Compression */
{
size_t cSize = ZSTD_compressContinue(ctx, op, maxDstSize, src, srcSize);
if (ZSTD_isError(cSize)) return cSize;
maxDstSize -= cSize;
}
- // Close frame
+ /* Close frame */
{
size_t endSize = ZSTD_compressEnd(ctx, op, maxDstSize);
if(ZSTD_isError(endSize)) return endSize;
#endif
+/**************************************
+* OS-specific Includes
+**************************************/
+#if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__)
+# include <fcntl.h> /* _O_BINARY */
+# include <io.h> /* _setmode, _isatty */
+# ifdef __MINGW32__
+ int _fileno(FILE *stream); /* MINGW somehow forgets to include this windows declaration into <stdio.h> */
+# endif
+# define SET_BINARY_MODE(file) _setmode(_fileno(file), _O_BINARY)
+# define IS_CONSOLE(stdStream) _isatty(_fileno(stdStream))
+#else
+# include <unistd.h> /* isatty */
+# define SET_BINARY_MODE(file)
+# define IS_CONSOLE(stdStream) isatty(fileno(stdStream))
+#endif
+
+
/**************************************
* Constants
**************************************/
#define CDG_SIZE_DEFAULT (64 KB)
#define CDG_SEED_DEFAULT 0
#define CDG_COMPRESSIBILITY_DEFAULT 50
-#define CDG_LITDENSITY_DEFAULT 12
#define PRIME1 2654435761U
#define PRIME2 2246822519U
{
U32 rand32 = *src;
rand32 *= PRIME1;
- rand32 += PRIME2;
+ rand32 ^= PRIME2;
rand32 = CDG_rotl32(rand32, 13);
*src = rand32;
return rand32;
#define LTSIZE 8192
#define LTMASK (LTSIZE-1)
-static const char firstChar = '(';
-static const char lastChar = '}';
static void* CDG_createLiteralDistrib(double ld)
{
- char* lt = malloc(LTSIZE);
+ BYTE* lt = malloc(LTSIZE);
U32 i = 0;
- char character = '0';
+ BYTE character = '0';
+ BYTE firstChar = '(';
+ BYTE lastChar = '}';
+ if (ld==0.0)
+ {
+ character = 0;
+ firstChar = 0;
+ lastChar =255;
+ }
while (i<LTSIZE)
{
U32 weight = (U32)((double)(LTSIZE - i) * ld) + 1;
U32 pos=1;
U32 genBlockSize = 128 KB;
void* ldctx = CDG_createLiteralDistrib(litProba);
+ FILE* fout = stdout;
- /* Build initial prefix */
+ /* init */
+ SET_BINARY_MODE(stdout);
fullbuff[0] = CDG_genChar(seed, ldctx);
while (pos<32 KB)
{
}
}
- /* output datagen */
- pos=0;
- for (;pos+512<=genBlockSize;pos+=512)
- printf("%512.512s", buff+pos);
- for (;pos<genBlockSize;pos++) printf("%c", buff[pos]);
+ /* output generated data */
+ fwrite(buff, 1, genBlockSize, fout);
/* Regenerate prefix */
memcpy(fullbuff, buff + 96 KB, 32 KB);
}
int main(int argc, char** argv)
{
int argNb;
- U32 proba = CDG_COMPRESSIBILITY_DEFAULT;
- U32 litProba = CDG_LITDENSITY_DEFAULT;
+ double proba = (double)CDG_COMPRESSIBILITY_DEFAULT / 100;
+ double litProba = proba / 3.6;
U64 size = CDG_SIZE_DEFAULT;
U32 seed = CDG_SEED_DEFAULT;
char* programName;
break;
case 'P':
argument++;
- proba=0;
+ proba=0.0;
while ((*argument>='0') && (*argument<='9'))
{
proba *= 10;
proba += *argument - '0';
argument++;
}
- if (proba>100) proba=100;
+ if (proba>100.) proba=100.;
+ proba /= 100.;
+ litProba = proba / 4.;
break;
case 'L':
argument++;
- litProba=0;
+ litProba=0.;
while ((*argument>='0') && (*argument<='9'))
{
litProba *= 10;
litProba += *argument - '0';
argument++;
}
- if (litProba>100) litProba=100;
+ if (litProba>100.) litProba=100.;
+ litProba /= 100.;
break;
case 'v':
displayLevel = 4;
DISPLAYLEVEL(4, "Data Generator %s \n", ZSTD_VERSION);
DISPLAYLEVEL(3, "Seed = %u \n", seed);
- if (proba!=CDG_COMPRESSIBILITY_DEFAULT) DISPLAYLEVEL(3, "Compressibility : %i%%\n", proba);
+ if (proba!=CDG_COMPRESSIBILITY_DEFAULT) DISPLAYLEVEL(3, "Compressibility : %i%%\n", (U32)(proba*100));
- CDG_generate(size, &seed, ((double)proba) / 100, ((double)litProba) / 100);
+ CDG_generate(size, &seed, proba, litProba);
return 0;
}
{
blockProperties_t bp;
ZSTD_compress(dstBuff, dstBuffSize, src, srcSize);
+ ZSTD_getcBlockSize(dstBuff+4, dstBuffSize, &bp); // Get first block compressed size
+ if (bp.blockType != bt_compressed)
+ {
+ DISPLAY("ZSTD_decodeLiteralsBlock : impossible to test on this sample (not compressible)\n");
+ free(dstBuff);
+ free(buff2);
+ return 0;
+ }
g_cSize = ZSTD_getcBlockSize(dstBuff+7, dstBuffSize, &bp) + 3;
memcpy(buff2, dstBuff+7, g_cSize);
//srcSize = benchFunction(dstBuff, dstBuffSize, buff2, src, srcSize); // real speed
ZSTD_compress(dstBuff, dstBuffSize, src, srcSize);
ip += 4; // Jump magic Number
blockSize = ZSTD_getcBlockSize(ip, dstBuffSize, &bp); // Get first block compressed size
+ if (bp.blockType != bt_compressed)
+ {
+ DISPLAY("ZSTD_decodeSeqHeaders : impossible to test on this sample (not compressible)\n");
+ free(dstBuff);
+ free(buff2);
+ return 0;
+ }
iend = ip + 3 + blockSize; // Get end of first block
ip += 3; // jump first block header
ip += ZSTD_getcBlockSize(ip, iend - ip, &bp) + 3; // jump literal sub block and its header
default : ;
}
+ { size_t i; for (i=0; i<dstBuffSize; i++) dstBuff[i]=(BYTE)i; } /* warming up memory */
+
for (loopNb = 1; loopNb <= nbIterations; loopNb++)
{
double averageTime;
U32 nbRounds=0;
DISPLAY("%2i- %-30.30s : \r", loopNb, benchName);
- { size_t i; for (i=0; i<dstBuffSize; i++) dstBuff[i]=(BYTE)i; } /* warming up memory */
milliTime = BMK_GetMilliStart();
while(BMK_GetMilliStart() == milliTime);