1#ifndef _BBM_NATIVE_RANDOM_H_
2#define _BBM_NATIVE_RANDOM_H_
7#include "backbone/type_traits.h"
8#include "backbone/array.h"
9#include "backbone/control.h"
25 using seed_t = std::uint_fast64_t;
35 template<
typename T>
struct rng;
40 template<
typename T>
requires std::integral<T>
65 std::uniform_int_distribution<T>
_dist;
71 template<
typename T>
requires std::floating_point<T>
96 std::uniform_real_distribution<T>
_dist;
102 template<
typename T>
requires is_array_v<T>
103 struct rng<T> :
public rng<scalar_t<T>>
ranged for loop over multiple containers at once
Random number generator; built on top of Drjit.
Definition: backbone.h:53
drjit::scalar_t< std::decay_t< T > > scalar_t
Scalar trait.
Definition: type_traits.h:36
uint64_t seed_t
seed type
Definition: random.h:22
static constexpr seed_t default_seed
Definition: random.h:27
void multirange_for(FUNC &&func, Ts &&... containers)
ranged for loop over multiple containers at once
Definition: multirange_for.h:43
rng(auto seed, type lower=0, type upper=1)
Definition: random.h:78
rng(void)
Definition: random.h:46
void seed(seed_t seed)
set the seed
Definition: random.h:52
T type
Definition: random.h:43
void seed(auto seed)
set the seed
Definition: random.h:83
std::mt19937_64 _rng
Definition: random.h:64
rng(type lower, type upper)
Definition: random.h:48
type operator()(void)
get next number
Definition: random.h:58
rng(seed_t seed, type lower=0, type upper=std::numeric_limits< T >::max())
Definition: random.h:47
std::uniform_real_distribution< T > _dist
Definition: random.h:96
std::uniform_int_distribution< T > _dist
Definition: random.h:65
Random generator wrapper around Drjit's PCG32.
Definition: random.h:34
rng(void)
Constructors.
Definition: random.h:38
void seed(auto seed)
set the seed
Definition: random.h:56
drjit::PCG32< T > _rng
Definition: random.h:81