]> www.ginac.de Git - cln.git/blob - src/base/digitseq/cl_DS_random.cc
Finalize CLN 1.3.7 release.
[cln.git] / src / base / digitseq / cl_DS_random.cc
1 // Digit sequence level random number generator.
2
3 // General includes.
4 #include "base/cl_sysdep.h"
5
6 // Specification.
7 #include "base/random/cl_random_impl.h"
8
9
10 // Implementation.
11
12 #include "cln/random.h"
13 #include "base/digitseq/cl_DS.h"
14 #include "base/cl_low.h"
15
16 namespace cln {
17
18 void random_UDS (random_state& randomstate, uintD* ptr, uintC len)
19 {
20         var uintC count;
21         #if (intDsize==64)
22         dotimesC(count,len,
23           { mspref(ptr,0) = random64(randomstate); ptr = ptr mspop 1; });
24         #else // (intDsize<=32)
25         dotimesC(count,floor(len,32/intDsize),
26           { var uint32 next = random32(randomstate); // weitere 32/intDsize Digits besorgen
27             set_32_Dptr(ptr,next); ptr = ptr mspop 32/intDsize;
28           });
29         len = len % (32/intDsize); // Anzahl noch fehlender Digits
30         if (len>0)
31           { var uint32 next = random32(randomstate); // weitere 32/intDsize Digits besorgen
32             set_max32_Dptr(intDsize*len,ptr,next);
33           }
34         #endif
35 }
36
37 }  // namespace cln