9 #ifndef RANDOM_INIT_BASE_H 10 #define RANDOM_INIT_BASE_H 11 #include "classdesc.h" 24 virtual double rand() {
return double(std::rand())/RAND_MAX;}
28 template <
class T>
void random_init(
random_init_t&,
const string&, T&);
30 template <
class T>
void random_initp(
random_init_t&,
const string&,
const T&)
38 template <
class T>
typename 42 a=T(std::numeric_limits<T>::max()*r.
rand());
47 template <
class T>
typename 52 o<<T(std::numeric_limits<T>::max()*r.
rand());
53 std::istringstream is(o.str());
65 void random_init(
random_init_t& r,
const string& d, std::basic_string<T>& a)
68 a.resize(10*r.
rand());
69 for (
size_t i=0; i<a.size(); ++i)
70 random_init(r,d,a[i]);
76 int ndims,
size_t ncopies,...)
81 for (
int i=ndims-2; i>=0; --i) cnt*=va_arg(ap,
size_t);
83 for (
size_t i=0; i<cnt; ++i)
84 random_init(r,d,(&a)[i]);
96 int idx=int(enum_keys<T>().size()*r.
rand());
97 arg=enum_keysData<T>().keysData[idx].value;
102 template <
class T>
typename 107 a.resize(10*r.
rand());
108 for (
typename T::iterator i=a.begin(); i!=a.end(); ++i)
112 template <
class T1,
class T2>
113 void random_init(
random_init_t& r,
const string& d, std::pair<T1,T2>& a)
115 random_init(r,d+
".first",a.first);
116 random_init(r,d+
".second",a.second);
119 template <
class T>
typename 123 int numElem=int(10*r.
rand());
124 for (
int i=0; i<numElem; ++i)
126 typename T::value_type v;
133 template <
class T>
void random_initp(
random_init_t&,
const string&, T*) {}
138 template <
class C,
class T>
148 template <
class T,
class U>
156 void random_init_onbase(
random_init_t& targ,
const string& desc, T& arg)
157 {random_init(targ,desc,arg);}
164 template <
class T>
struct access_random_init;
167 using classdesc::random_init;
168 using classdesc::random_init_onbase;
Definition: classdesc.h:326
Definition: random_init_base.h:20
Definition: classdesc.h:623
Definition: classdesc.h:626
virtual double rand()
return a uniform random number in [0..1)
Definition: random_init_base.h:24
void random_init_normalise(T &)
Definition: random_init_epilogue.h:132
Definition: classdesc.h:588
std::string idx(const std::string &prefix, size_t i)
utility for generating index keys (for use with arrays)
Definition: xml_common.h:14
Contains definitions related to classdesc functionality.
Definition: arrays.h:2514
controlled template specialisation: stolen from boost::enable_if.
Definition: classdesc.h:249
Definition: classdesc.h:266
Contains access_* structs, and nothing else. These structs are used to gain access to private members...
Definition: accessor.h:55
Definition: classdesc.h:704