53#ifndef VL_H_RANDOM_SPLIT
64static inline void vlRandSplitBytes(vl_rand* randPtr,
void* resultPtr)
67 memcpy(resultPtr, &tmp,
sizeof(tmp));
69#define VL_H_RANDOM_SPLIT(randPtr, resultPtr) (vlRandSplitBytes((randPtr), (resultPtr)))
94#define vlRandUInt8(randPtr) (vl_uint8_t)(vlRandNext(randPtr))
104#define vlRandUInt8x8(randPtr, resultPtr) VL_H_RANDOM_SPLIT(randPtr, resultPtr)
105#elif defined VL_U32_T
113#define vlRandUInt8x8(randPtr, resultPtr) \
114 VL_H_RANDOM_SPLIT(randPtr, resultPtr); \
115 VL_H_RANDOM_SPLIT(randPtr, ((VL_U8_T*)(resultPtr)) + 4)
129#define vlRandUInt16(randPtr) (vl_uint16_t)(vlRandNext(randPtr))
141#define vlRandUInt16x4(randPtr, resultPtr) VL_H_RANDOM_SPLIT(randPtr, resultPtr)
142#elif defined VL_U32_T
152#define vlRandUInt16x4(randPtr, resultPtr) \
153 VL_H_RANDOM_SPLIT(randPtr, resultPtr); \
154 VL_H_RANDOM_SPLIT(randPtr, ((VL_U16_T*)(resultPtr)) + 2)
168#define vlRandUInt32(randPtr) (vl_uint32_t)(vlRandNext(randPtr))
180#define vlRandUInt32x2(randPtr, resultPtr) VL_H_RANDOM_SPLIT(randPtr, resultPtr)
191#define vlRandUInt32x2(randPtr, resultPtr) \
192 VL_H_RANDOM_SPLIT(randPtr, resultPtr); \
193 VL_H_RANDOM_SPLIT(randPtr, ((VL_U32_T*)(resultPtr) + 1))
208#define vlRandUInt64(randPtr) (vl_uint64_t)(vlRandNext(randPtr))
222VL_API vl_int8_t vlRandInt8(vl_rand* rand);
234#define vlRandInt8x8(randPtr, resultPtr) VL_H_RANDOM_SPLIT(randPtr, resultPtr)
235#elif defined VL_U32_T
245#define vlRandInt8x8(randPtr, resultPtr) \
246 VL_H_RANDOM_SPLIT(randPtr, resultPtr); \
247 VL_H_RANDOM_SPLIT(randPtr, ((VL_I8_T*)(resultPtr) + 4)
261VL_API vl_int16_t vlRandInt16(vl_rand* rand);
273#define vlRandInt16x4(randPtr, resultPtr) VL_H_RANDOM_SPLIT(randPtr, resultPtr)
274#elif defined VL_U32_T
285#define vlRandInt16x4(randPtr, resultPtr) \
286 VL_H_RANDOM_SPLIT(randPtr, resultPtr); \
287 VL_H_RANDOM_SPLIT(randPtr, (VL_I16_T)(resultPtr) + 2)
301VL_API vl_int32_t vlRandInt32(vl_rand* rand);
313#define vlRandInt32x2(randPtr, resultPtr) VL_H_RANDOM_SPLIT(randPtr, resultPtr)
314#elif defined VL_I32_T
324#define vlRandInt32x2(randPtr, resultPtr) \
325 VL_H_RANDOM_SPLIT(randPtr, resultPtr); \
326 VL_H_RANDOM_SPLIT(randPtr, ((VL_I32_T*)(resultPtr)) + 1)
341VL_API vl_int64_t vlRandInt64(vl_rand* rand);
377#define vlRandFx4(randPtr, resultPtr) \
378 vlRandFx2(randPtr, (vl_float32_t*)(resultPtr)); \
379 vlRandFx2(randPtr, ((vl_float32_t*)(resultPtr)) + 2)
VL_F32_T vl_float32_t
32-bit floating point number type.
Definition vl_numtypes.h:173
VL_ULARGE_T vl_ularge_t
Largest available unsigned integer type.
Definition vl_numtypes.h:136
VL_API void vlRandFill(vl_rand *rand, void *mem, vl_ularge_t len)
Fills the specified region of memory with random bytes.
VL_API vl_rand vlRandInit(void)
Initializes a random state (aka, seed) based on the current time.
Definition vl_rand.c:46
VL_API vl_float64_t vlRandD(vl_rand *randPtr)
Generate a random double.
VL_API vl_float32_t vlRandF(vl_rand *randPtr)
Generate a random float.
Definition vl_rand.c:164
VL_API void vlRandFx2(vl_rand *randPtr, vl_float32_t *resultPtr)
Generates two random floats.
Definition vl_rand.c:175
VL_API vl_rand vlRandNext(vl_rand *rand)
Returns the "next" 64-bit integer.
Definition vl_rand.c:53