Code cleanup: use strict flags for BLI_rand
This commit is contained in:
@@ -47,10 +47,11 @@ void BLI_rng_free(struct RNG *rng);
|
||||
void BLI_rng_seed(struct RNG *rng, unsigned int seed);
|
||||
void BLI_rng_srandom(struct RNG *rng, unsigned int seed);
|
||||
int BLI_rng_get_int(struct RNG *rng);
|
||||
unsigned int BLI_rng_get_uint(struct RNG *rng);
|
||||
double BLI_rng_get_double(struct RNG *rng);
|
||||
float BLI_rng_get_float(struct RNG *rng);
|
||||
void BLI_rng_get_float_unit_v3(struct RNG *rng, float v[3]);
|
||||
void BLI_rng_shuffle_array(struct RNG *rng, void *data, int elemSize, int numElems);
|
||||
void BLI_rng_shuffle_array(struct RNG *rng, void *data, size_t elem_size, unsigned int elem_tot);
|
||||
|
||||
/** Note that skipping is as slow as generating n numbers! */
|
||||
void BLI_rng_skip(struct RNG *rng, int n);
|
||||
@@ -72,7 +73,7 @@ float BLI_hash_frand(unsigned int seed);
|
||||
* contents. This routine does not use nor modify
|
||||
* the state of the BLI random number generator.
|
||||
*/
|
||||
void BLI_array_randomize(void *data, int elemSize, int numElems, unsigned int seed);
|
||||
void BLI_array_randomize(void *data, size_t elem_size, unsigned int elem_tot, unsigned int seed);
|
||||
|
||||
|
||||
/** Better seed for the random number generator, using noise.c hash[] */
|
||||
|
||||
@@ -41,6 +41,8 @@
|
||||
#include "BLI_threads.h"
|
||||
#include "BLI_rand.h"
|
||||
|
||||
#include "BLI_strict_flags.h"
|
||||
|
||||
#ifdef _MSC_VER
|
||||
typedef unsigned __int64 r_uint64;
|
||||
|
||||
@@ -96,9 +98,9 @@ void BLI_rng_seed(RNG *rng, unsigned int seed)
|
||||
void BLI_rng_srandom(RNG *rng, unsigned int seed)
|
||||
{
|
||||
BLI_rng_seed(rng, seed + hash[seed & 255]);
|
||||
seed = BLI_rng_get_int(rng);
|
||||
seed = BLI_rng_get_uint(rng);
|
||||
BLI_rng_seed(rng, seed + hash[seed & 255]);
|
||||
seed = BLI_rng_get_int(rng);
|
||||
seed = BLI_rng_get_uint(rng);
|
||||
BLI_rng_seed(rng, seed + hash[seed & 255]);
|
||||
}
|
||||
|
||||
@@ -108,6 +110,12 @@ int BLI_rng_get_int(RNG *rng)
|
||||
return (int) (rng->X >> 17);
|
||||
}
|
||||
|
||||
unsigned int BLI_rng_get_uint(RNG *rng)
|
||||
{
|
||||
rng->X = (MULTIPLIER * rng->X + ADDEND) & MASK;
|
||||
return (unsigned int) (rng->X >> 17);
|
||||
}
|
||||
|
||||
double BLI_rng_get_double(RNG *rng)
|
||||
{
|
||||
return (double) BLI_rng_get_int(rng) / 0x80000000;
|
||||
@@ -133,27 +141,28 @@ void BLI_rng_get_float_unit_v3(RNG *rng, float v[3])
|
||||
}
|
||||
}
|
||||
|
||||
void BLI_rng_shuffle_array(RNG *rng, void *data, int elemSize, int numElems)
|
||||
void BLI_rng_shuffle_array(RNG *rng, void *data, size_t elem_size, unsigned int elem_tot)
|
||||
{
|
||||
int i = numElems;
|
||||
const unsigned int elem_size_i = (unsigned int)elem_size;
|
||||
unsigned int i = elem_tot;
|
||||
void *temp;
|
||||
|
||||
if (numElems <= 0) {
|
||||
if (elem_tot == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
temp = malloc(elemSize);
|
||||
temp = malloc(elem_size);
|
||||
|
||||
/* XXX Shouldn't it rather be "while (i--) {" ?
|
||||
* Else we have no guaranty first (0) element has a chance to be shuffled... --mont29 */
|
||||
while (--i) {
|
||||
int j = BLI_rng_get_int(rng) % numElems;
|
||||
unsigned int j = BLI_rng_get_uint(rng) % elem_tot;
|
||||
if (i != j) {
|
||||
void *iElem = (unsigned char *)data + i * elemSize;
|
||||
void *jElem = (unsigned char *)data + j * elemSize;
|
||||
memcpy(temp, iElem, elemSize);
|
||||
memcpy(iElem, jElem, elemSize);
|
||||
memcpy(jElem, temp, elemSize);
|
||||
void *iElem = (unsigned char *)data + i * elem_size_i;
|
||||
void *jElem = (unsigned char *)data + j * elem_size_i;
|
||||
memcpy(temp, iElem, elem_size);
|
||||
memcpy(iElem, jElem, elem_size);
|
||||
memcpy(jElem, temp, elem_size);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -202,12 +211,12 @@ float BLI_hash_frand(unsigned int seed)
|
||||
return BLI_rng_get_float(&rng);
|
||||
}
|
||||
|
||||
void BLI_array_randomize(void *data, int elemSize, int numElems, unsigned int seed)
|
||||
void BLI_array_randomize(void *data, size_t elem_size, unsigned int elem_tot, unsigned int seed)
|
||||
{
|
||||
RNG rng;
|
||||
|
||||
BLI_rng_seed(&rng, seed);
|
||||
BLI_rng_shuffle_array(&rng, data, elemSize, numElems);
|
||||
BLI_rng_shuffle_array(&rng, data, elem_size, elem_tot);
|
||||
}
|
||||
|
||||
/* ********* for threaded random ************** */
|
||||
@@ -220,9 +229,9 @@ void BLI_thread_srandom(int thread, unsigned int seed)
|
||||
thread = 0;
|
||||
|
||||
BLI_rng_seed(&rng_tab[thread], seed + hash[seed & 255]);
|
||||
seed = BLI_rng_get_int(&rng_tab[thread]);
|
||||
seed = BLI_rng_get_uint(&rng_tab[thread]);
|
||||
BLI_rng_seed(&rng_tab[thread], seed + hash[seed & 255]);
|
||||
seed = BLI_rng_get_int(&rng_tab[thread]);
|
||||
seed = BLI_rng_get_uint(&rng_tab[thread]);
|
||||
BLI_rng_seed(&rng_tab[thread], seed + hash[seed & 255]);
|
||||
}
|
||||
|
||||
|
||||
@@ -37,11 +37,11 @@
|
||||
#include "DNA_scene_types.h"
|
||||
#include "DNA_object_types.h"
|
||||
|
||||
#include "BLI_utildefines.h"
|
||||
#include "BLI_kdtree.h"
|
||||
#include "BLI_rand.h"
|
||||
#include "BLI_math.h"
|
||||
#include "BLI_edgehash.h"
|
||||
#include "BLI_utildefines.h"
|
||||
|
||||
#include "BKE_cdderivedmesh.h"
|
||||
#include "BKE_deform.h"
|
||||
|
||||
Reference in New Issue
Block a user