Skip to content

Commit d4b934b

Browse files
committed
core: add some inlining hints to methods/fns in rand.
1 parent 30266a7 commit d4b934b

File tree

1 file changed

+32
-1
lines changed

1 file changed

+32
-1
lines changed

src/libcore/rand.rs

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ pub trait Rand {
5353
}
5454

5555
impl Rand for int {
56+
#[inline]
5657
fn rand<R: Rng>(rng: &R) -> int {
5758
if int::bits == 32 {
5859
rng.next() as int
@@ -63,30 +64,35 @@ impl Rand for int {
6364
}
6465

6566
impl Rand for i8 {
67+
#[inline]
6668
fn rand<R: Rng>(rng: &R) -> i8 {
6769
rng.next() as i8
6870
}
6971
}
7072

7173
impl Rand for i16 {
74+
#[inline]
7275
fn rand<R: Rng>(rng: &R) -> i16 {
7376
rng.next() as i16
7477
}
7578
}
7679

7780
impl Rand for i32 {
81+
#[inline]
7882
fn rand<R: Rng>(rng: &R) -> i32 {
7983
rng.next() as i32
8084
}
8185
}
8286

8387
impl Rand for i64 {
88+
#[inline]
8489
fn rand<R: Rng>(rng: &R) -> i64 {
8590
(rng.next() as i64 << 32) | rng.next() as i64
8691
}
8792
}
8893

8994
impl Rand for uint {
95+
#[inline]
9096
fn rand<R: Rng>(rng: &R) -> uint {
9197
if uint::bits == 32 {
9298
rng.next() as uint
@@ -97,43 +103,50 @@ impl Rand for uint {
97103
}
98104

99105
impl Rand for u8 {
106+
#[inline]
100107
fn rand<R: Rng>(rng: &R) -> u8 {
101108
rng.next() as u8
102109
}
103110
}
104111

105112
impl Rand for u16 {
113+
#[inline]
106114
fn rand<R: Rng>(rng: &R) -> u16 {
107115
rng.next() as u16
108116
}
109117
}
110118

111119
impl Rand for u32 {
120+
#[inline]
112121
fn rand<R: Rng>(rng: &R) -> u32 {
113122
rng.next()
114123
}
115124
}
116125

117126
impl Rand for u64 {
127+
#[inline]
118128
fn rand<R: Rng>(rng: &R) -> u64 {
119129
(rng.next() as u64 << 32) | rng.next() as u64
120130
}
121131
}
122132

123133
impl Rand for float {
134+
#[inline]
124135
fn rand<R: Rng>(rng: &R) -> float {
125136
rng.gen::<f64>() as float
126137
}
127138
}
128139

129140
impl Rand for f32 {
141+
#[inline]
130142
fn rand<R: Rng>(rng: &R) -> f32 {
131143
rng.gen::<f64>() as f32
132144
}
133145
}
134146

135147
static scale : f64 = (u32::max_value as f64) + 1.0f64;
136148
impl Rand for f64 {
149+
#[inline]
137150
fn rand<R: Rng>(rng: &R) -> f64 {
138151
let u1 = rng.next() as f64;
139152
let u2 = rng.next() as f64;
@@ -144,12 +157,14 @@ impl Rand for f64 {
144157
}
145158

146159
impl Rand for char {
160+
#[inline]
147161
fn rand<R: Rng>(rng: &R) -> char {
148162
rng.next() as char
149163
}
150164
}
151165

152166
impl Rand for bool {
167+
#[inline]
153168
fn rand<R: Rng>(rng: &R) -> bool {
154169
rng.next() & 1u32 == 1u32
155170
}
@@ -163,6 +178,7 @@ macro_rules! tuple_impl {
163178
$( $tyvar : Rand ),*
164179
> Rand for ( $( $tyvar ),* , ) {
165180

181+
#[inline]
166182
fn rand<R: Rng>(_rng: &R) -> ( $( $tyvar ),* , ) {
167183
(
168184
// use the $tyvar's to get the appropriate number of
@@ -177,7 +193,10 @@ macro_rules! tuple_impl {
177193
}
178194
}
179195

180-
impl Rand for () { fn rand<R: Rng>(_: &R) -> () { () } }
196+
impl Rand for () {
197+
#[inline]
198+
fn rand<R: Rng>(_: &R) -> () { () }
199+
}
181200
tuple_impl!{A}
182201
tuple_impl!{A, B}
183202
tuple_impl!{A, B, C}
@@ -190,6 +209,7 @@ tuple_impl!{A, B, C, D, E, F, G, H, I}
190209
tuple_impl!{A, B, C, D, E, F, G, H, I, J}
191210

192211
impl<T:Rand> Rand for Option<T> {
212+
#[inline]
193213
fn rand<R: Rng>(rng: &R) -> Option<T> {
194214
if rng.gen() {
195215
Some(rng.gen())
@@ -200,10 +220,12 @@ impl<T:Rand> Rand for Option<T> {
200220
}
201221

202222
impl<T: Rand> Rand for ~T {
223+
#[inline]
203224
fn rand<R: Rng>(rng: &R) -> ~T { ~rng.gen() }
204225
}
205226

206227
impl<T: Rand> Rand for @T {
228+
#[inline]
207229
fn rand<R: Rng>(rng: &R) -> @T { @rng.gen() }
208230
}
209231

@@ -413,6 +435,7 @@ pub trait RngUtil {
413435
/// Extension methods for random number generators
414436
impl<R: Rng> RngUtil for R {
415437
/// Return a random value for a Rand type
438+
#[inline(always)]
416439
fn gen<T: Rand>(&self) -> T {
417440
Rand::rand(self)
418441
}
@@ -675,6 +698,7 @@ pub impl IsaacRng {
675698
}
676699

677700
/// Refills the output buffer (`self.rsl`)
701+
#[inline]
678702
priv fn isaac(&self) {
679703
self.c += 1;
680704
// abbreviations
@@ -731,6 +755,9 @@ impl Rng for IsaacRng {
731755
}
732756
}
733757

758+
/// An [Xorshift random number
759+
/// generator](http://en.wikipedia.org/wiki/Xorshift). Not suitable for
760+
/// cryptographic purposes.
734761
pub struct XorShiftRng {
735762
priv mut x: u32,
736763
priv mut y: u32,
@@ -739,6 +766,7 @@ pub struct XorShiftRng {
739766
}
740767

741768
impl Rng for XorShiftRng {
769+
#[inline]
742770
pub fn next(&self) -> u32 {
743771
let x = self.x;
744772
let t = x ^ (x << 11);
@@ -788,6 +816,7 @@ fn tls_rng_state(_v: @IsaacRng) {}
788816
* seeded by the system. Intended to be used in method chaining style, ie
789817
* `task_rng().gen::<int>()`.
790818
*/
819+
#[inline]
791820
pub fn task_rng() -> @IsaacRng {
792821
let r : Option<@IsaacRng>;
793822
unsafe {
@@ -807,13 +836,15 @@ pub fn task_rng() -> @IsaacRng {
807836

808837
// Allow direct chaining with `task_rng`
809838
impl<R: Rng> Rng for @R {
839+
#[inline(always)]
810840
fn next(&self) -> u32 { (**self).next() }
811841
}
812842

813843
/**
814844
* Returns a random value of a Rand type, using the task's random number
815845
* generator.
816846
*/
847+
#[inline]
817848
pub fn random<T: Rand>() -> T {
818849
task_rng().gen()
819850
}

0 commit comments

Comments
 (0)