@@ -24,19 +24,25 @@ fn main() {
24
24
args
25
25
} ;
26
26
let n = int:: from_str ( args[ 1 ] ) . get ( ) ;
27
- let bodies: ~[ Body :: props ] = NBodySystem :: make ( ) ;
28
- io:: println ( fmt ! ( "%f" , NBodySystem :: energy( copy bodies) ) ) ;
27
+ let mut bodies: ~[ Body :: props ] = NBodySystem :: make ( ) ;
28
+ io:: println ( fmt ! ( "%f" , NBodySystem :: energy( bodies) ) ) ;
29
29
let mut i = 0 ;
30
- while i < n { NBodySystem :: advance ( bodies, 0.01 ) ; i += 1 ; }
30
+ while i < n {
31
+ NBodySystem :: advance ( bodies, 0.01 ) ;
32
+ i += 1 ;
33
+ }
31
34
io:: println ( fmt ! ( "%f" , NBodySystem :: energy( bodies) ) ) ;
32
35
}
33
36
34
37
mod NBodySystem {
35
38
#[ legacy_exports] ;
36
39
37
40
fn make ( ) -> ~[ Body :: props ] {
38
- let bodies: ~[ Body :: props ] =
39
- ~[ Body :: sun ( ) , Body :: jupiter ( ) , Body :: saturn ( ) , Body :: uranus ( ) ,
41
+ let mut bodies: ~[ Body :: props ] =
42
+ ~[ Body :: sun ( ) ,
43
+ Body :: jupiter ( ) ,
44
+ Body :: saturn ( ) ,
45
+ Body :: uranus ( ) ,
40
46
Body :: neptune ( ) ] ;
41
47
42
48
let mut px = 0.0 ;
@@ -53,26 +59,35 @@ mod NBodySystem {
53
59
}
54
60
55
61
// side-effecting
56
- Body :: offset_momentum ( bodies[ 0 ] , px, py, pz) ;
62
+ Body :: offset_momentum ( & mut bodies[ 0 ] , px, py, pz) ;
57
63
58
64
return bodies;
59
65
}
60
66
61
- fn advance ( bodies : ~ [ Body :: props ] , dt : float ) {
67
+ fn advance ( bodies : & mut [ Body :: props ] , dt : float ) {
62
68
63
69
let mut i = 0 ;
64
70
while i < 5 {
65
71
let mut j = i + 1 ;
66
- while j < 5 { advance_one ( bodies[ i] , bodies[ j] , dt) ; j += 1 ; }
72
+ while j < 5 {
73
+ advance_one ( & mut bodies[ i] ,
74
+ & mut bodies[ j] , dt) ;
75
+ j += 1 ;
76
+ }
67
77
68
78
i += 1 ;
69
79
}
70
80
71
81
i = 0 ;
72
- while i < 5 { move_ ( bodies[ i] , dt) ; i += 1 ; }
82
+ while i < 5 {
83
+ move_ ( & mut bodies[ i] , dt) ;
84
+ i += 1 ;
85
+ }
73
86
}
74
87
75
- fn advance_one ( bi : Body :: props , bj : Body :: props , dt : float ) unsafe {
88
+ fn advance_one ( bi : & mut Body :: props ,
89
+ bj : & mut Body :: props ,
90
+ dt : float ) unsafe {
76
91
let dx = bi. x - bj. x ;
77
92
let dy = bi. y - bj. y ;
78
93
let dz = bi. z - bj. z ;
@@ -91,13 +106,13 @@ mod NBodySystem {
91
106
bj. vz += dz * bi. mass * mag;
92
107
}
93
108
94
- fn move_ ( b : Body :: props , dt : float ) {
109
+ fn move_ ( b : & mut Body :: props , dt : float ) {
95
110
b. x += dt * b. vx ;
96
111
b. y += dt * b. vy ;
97
112
b. z += dt * b. vz ;
98
113
}
99
114
100
- fn energy ( bodies : ~ [ Body :: props ] ) -> float unsafe {
115
+ fn energy ( bodies : & [ Body :: props ] ) -> float unsafe {
101
116
let mut dx;
102
117
let mut dy;
103
118
let mut dz;
@@ -197,7 +212,8 @@ mod Body {
197
212
mass: SOLAR_MASS } ;
198
213
}
199
214
200
- fn offset_momentum ( props : Body :: props , px : float , py : float , pz : float ) {
215
+ fn offset_momentum ( props : & mut Body :: props ,
216
+ px : float , py : float , pz : float ) {
201
217
props. vx = -px / SOLAR_MASS ;
202
218
props. vy = -py / SOLAR_MASS ;
203
219
props. vz = -pz / SOLAR_MASS ;
0 commit comments