13 #ifndef ROOT_Math_GSLQRngWrapper
14 #define ROOT_Math_GSLQRngWrapper
16 #include "gsl/gsl_qrng.h"
26 class GSLQRngWrapper {
44 GSLQRngWrapper(
const gsl_qrng_type * type) :
55 GSLQRngWrapper(
const gsl_qrng * r ) :
59 fRng =
const_cast<gsl_qrng *
>(r);
65 GSLQRngWrapper(GSLQRngWrapper & r) :
69 fRng = gsl_qrng_clone(r.fRng);
75 GSLQRngWrapper & operator = (
const GSLQRngWrapper & rhs) {
76 if (
this == &rhs)
return *
this;
77 fRngType = rhs.fRngType;
79 if (fRngType == rhs.fRngType) {
80 iret = gsl_qrng_memcpy(fRng, rhs.fRng);
81 if (!iret)
return *
this;
85 fRng = gsl_qrng_clone(rhs.fRng);
97 void Allocate(
unsigned int dimension) {
98 if (fRngType == 0) SetDefaultType();
99 if (fRng != 0 && fOwn) Free();
100 fRng = gsl_qrng_alloc( fRngType, dimension );
107 if (fRng != 0) gsl_qrng_free(fRng);
112 void SetType(
const gsl_qrng_type * type) {
116 void SetDefaultType() {
118 fRngType = gsl_qrng_sobol;
122 unsigned int Dimension()
const {
return fRng->dimension; }
124 inline gsl_qrng * Rng() {
return fRng; }
126 inline const gsl_qrng * Rng()
const {
return fRng; }
134 const gsl_qrng_type * fRngType;