void RDG_genStdout(unsigned long long size, double matchProba, double litProba, unsigned seed) { size_t const stdBlockSize = 128 KB; size_t const stdDictSize = 32 KB; BYTE* const buff = (BYTE*)malloc(stdDictSize + stdBlockSize); U64 total = 0; BYTE ldt[LTSIZE]; /* literals distribution table */ /* init */ if (buff==NULL) { fprintf(stderr, "datagen: error: %s \n", strerror(errno)); exit(1); } if (litProba<=0.0) litProba = matchProba / 4.5; memset(ldt, '0', sizeof(ldt)); RDG_fillLiteralDistrib(ldt, litProba); SET_BINARY_MODE(stdout); /* Generate initial dict */ RDG_genBlock(buff, stdDictSize, 0, matchProba, ldt, &seed); /* Generate compressible data */ while (total < size) { size_t const genBlockSize = (size_t) (MIN (stdBlockSize, size-total)); RDG_genBlock(buff, stdDictSize+stdBlockSize, stdDictSize, matchProba, ldt, &seed); total += genBlockSize; { size_t const unused = fwrite(buff, 1, genBlockSize, stdout); (void)unused; } /* update dict */ memcpy(buff, buff + stdBlockSize, stdDictSize); } /* cleanup */ free(buff); }
void RDG_genOut(unsigned long long size, double matchProba, double litProba, unsigned seed) { BYTE buff[RDG_DICTSIZE + RDG_BLOCKSIZE]; U64 total = 0; size_t genBlockSize = RDG_BLOCKSIZE; void* ldctx; /* init */ if (litProba==0.0) litProba = matchProba / 4.5; ldctx = RDG_createLiteralDistrib(litProba); SET_BINARY_MODE(stdout); /* Generate dict */ RDG_genBlock(buff, RDG_DICTSIZE, 0, matchProba, ldctx, &seed); /* Generate compressible data */ while (total < size) { RDG_genBlock(buff, RDG_DICTSIZE+RDG_BLOCKSIZE, RDG_DICTSIZE, matchProba, ldctx, &seed); if (size-total < RDG_BLOCKSIZE) genBlockSize = (size_t)(size-total); total += genBlockSize; fwrite(buff, 1, genBlockSize, stdout); /* update dict */ memcpy(buff, buff + RDG_BLOCKSIZE, RDG_DICTSIZE); } free(ldctx); }
void RDG_genBuffer(void* buffer, size_t size, double matchProba, double litProba, unsigned seed) { litDistribTable lt; if (litProba==0.0) litProba = matchProba / 4.5; RDG_fillLiteralDistrib(lt, litProba); RDG_genBlock(buffer, size, 0, matchProba, lt, &seed); }
void RDG_genBuffer(void* buffer, size_t size, double matchProba, double litProba, unsigned seed) { void* ldctx; if (litProba==0.0) litProba = matchProba / 4.5; ldctx = RDG_createLiteralDistrib(litProba); RDG_genBlock(buffer, size, 0, matchProba, ldctx, &seed); free(ldctx); }
void RDG_genBuffer(void* buffer, size_t size, double matchProba, double litProba, unsigned seed) { BYTE ldt[LTSIZE]; memset(ldt, '0', sizeof(ldt)); if (litProba<=0.0) litProba = matchProba / 4.5; //TRACE(" percent:%5.2f%% \n", litProba*100.); RDG_fillLiteralDistrib(ldt, litProba); RDG_genBlock(buffer, size, 0, matchProba, ldt, &seed); }