1
- struct State {
1
+ struct CpuState {
2
2
r : [ i32 ; 4 ] ,
3
3
pc : usize ,
4
4
}
5
5
6
- type Op = Box < dyn Fn ( State ) -> State > ;
6
+ type Op = Box < dyn Fn ( CpuState ) -> CpuState > ;
7
7
8
- impl State {
8
+ impl CpuState {
9
9
fn run ( mut self , prog : & [ Op ] ) -> i32 {
10
10
while self . pc < prog. len ( ) {
11
11
let pc = self . pc ;
@@ -16,25 +16,29 @@ impl State {
16
16
}
17
17
}
18
18
19
- fn add ( mut state : State ) -> State {
20
- state. r [ 0 ] += state. r [ 1 ] ;
21
- state
19
+ fn add ( ) -> Op {
20
+ Box :: new ( |mut state : CpuState | -> CpuState {
21
+ state. r [ 0 ] += state. r [ 1 ] ;
22
+ state
23
+ } )
22
24
}
23
25
24
- fn sub ( mut state : State ) -> State {
25
- state. r [ 0 ] -= state. r [ 1 ] ;
26
- state
26
+ fn sub ( ) -> Op {
27
+ Box :: new ( |mut state : CpuState | -> CpuState {
28
+ state. r [ 0 ] -= state. r [ 1 ] ;
29
+ state
30
+ } )
27
31
}
28
32
29
33
fn mov ( from : usize , to : usize ) -> Op {
30
- Box :: new ( move |mut state : State | -> State { state. r [ to] = state. r [ from] ; state} )
34
+ Box :: new ( move |mut state : CpuState | -> CpuState {
35
+ state. r [ to] = state. r [ from] ;
36
+ state
37
+ } )
31
38
}
32
39
33
-
34
40
fn main ( ) {
35
- let state = State { r : [ 0 , 1 , 0 , 0 ] , pc : 0 } ;
36
- let add = || Box :: new ( add) ;
37
- let sub = || Box :: new ( sub) ;
38
- let prog = [ add ( ) , mov ( 0 , 1 ) , add ( ) , mov ( 0 , 1 ) , add ( ) , mov ( 3 , 1 ) , sub ( ) ] ;
39
- println ! ( "{}" , state. run( & prog) ) ;
41
+ let state = CpuState { r : [ 0 , 1 , 0 , 0 ] , pc : 0 } ;
42
+ let prog = & [ add ( ) , mov ( 0 , 1 ) , add ( ) , mov ( 0 , 1 ) , add ( ) , mov ( 3 , 1 ) , sub ( ) ] ;
43
+ println ! ( "{}" , state. run( prog) ) ;
40
44
}
0 commit comments