@@ -23,6 +23,102 @@ use uint;
23
23
use util;
24
24
use vec;
25
25
26
+ /// A type that can be randomly generated using an RNG
27
+ pub trait Rand {
28
+ static fn rand( rng: rand:: Rng ) -> Self ;
29
+ }
30
+
31
+ impl int: Rand {
32
+ static fn rand( rng : rand:: Rng ) -> int {
33
+ rng. gen_int( )
34
+ }
35
+ }
36
+
37
+ impl i8 : Rand {
38
+ static fn rand( rng : rand:: Rng ) -> i8 {
39
+ rng. gen_i8( )
40
+ }
41
+ }
42
+
43
+ impl i16 : Rand {
44
+ static fn rand( rng : rand:: Rng ) -> i16 {
45
+ rng. gen_i16( )
46
+ }
47
+ }
48
+
49
+ impl i32 : Rand {
50
+ static fn rand( rng : rand:: Rng ) -> i32 {
51
+ rng. gen_i32( )
52
+ }
53
+ }
54
+
55
+ impl i64 : Rand {
56
+ static fn rand( rng : rand:: Rng ) -> i64 {
57
+ rng. gen_i64( )
58
+ }
59
+ }
60
+
61
+ impl u8 : Rand {
62
+ static fn rand( rng : rand:: Rng ) -> u8 {
63
+ rng. gen_u8( )
64
+ }
65
+ }
66
+
67
+ impl u16 : Rand {
68
+ static fn rand( rng : rand:: Rng ) -> u16 {
69
+ rng. gen_u16( )
70
+ }
71
+ }
72
+
73
+ impl u32 : Rand {
74
+ static fn rand( rng : rand:: Rng ) -> u32 {
75
+ rng. gen_u32( )
76
+ }
77
+ }
78
+
79
+ impl u64 : Rand {
80
+ static fn rand( rng : rand:: Rng ) -> u64 {
81
+ rng. gen_u64( )
82
+ }
83
+ }
84
+
85
+ impl float : Rand {
86
+ static fn rand( rng : rand:: Rng ) -> float {
87
+ rng. gen_float( )
88
+ }
89
+ }
90
+
91
+ impl f32 : Rand {
92
+ static fn rand( rng : rand:: Rng ) -> f32 {
93
+ rng. gen_f32( )
94
+ }
95
+ }
96
+
97
+ impl f64 : Rand {
98
+ static fn rand( rng : rand:: Rng ) -> f64 {
99
+ rng. gen_f64( )
100
+ }
101
+ }
102
+
103
+ impl char : Rand {
104
+ static fn rand( rng : rand:: Rng ) -> char {
105
+ rng. gen_char( )
106
+ }
107
+ }
108
+
109
+ impl bool : Rand {
110
+ static fn rand( rng : rand:: Rng ) -> bool {
111
+ rng. gen_bool( )
112
+ }
113
+ }
114
+
115
+ impl <T : Rand > Option < T > : Rand {
116
+ static fn rand( rng : rand:: Rng ) -> Option < T > {
117
+ if rng. gen_bool( ) { Some ( Rand :: rand ( rng ) ) }
118
+ else { None }
119
+ }
120
+ }
121
+
26
122
#[ allow( non_camel_case_types) ] // runtime type
27
123
enum rctx { }
28
124
@@ -49,6 +145,10 @@ pub struct Weighted<T> {
49
145
50
146
/// Extension methods for random number generators
51
147
impl Rng {
148
+ /// Return a random value for a Rand type
149
+ fn gen < T : Rand > ( ) -> T {
150
+ Rand :: rand ( self )
151
+ }
52
152
53
153
/// Return a random int
54
154
fn gen_int ( ) -> int {
0 commit comments