-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathAcceptor.go
38 lines (30 loc) · 823 Bytes
/
Acceptor.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package main
type Pair struct {
State int
BallotNumber Ballot
}
type Acceptor struct {
Promise Ballot
Accepted Pair
}
func NewAcceptor() Acceptor {
acceptor := new(Acceptor)
acceptor.Promise = Ballot {0, 0}
acceptor.Accepted = Pair{0, Ballot{0, 0}}
return *acceptor
}
func (acceptor Acceptor) prepare(ballotNumber Ballot) Pair {
if acceptor.Promise.MoreThan(ballotNumber) {
return Pair{-1, Ballot{-1, -1}}
}
acceptor.Promise = ballotNumber
return acceptor.Accepted
}
func (acceptor *Acceptor) accept(ballotNumber Ballot, newState int) Pair {
if acceptor.Promise.MoreThan(ballotNumber) || acceptor.Accepted.BallotNumber.MoreThan(ballotNumber) {
return Pair{-1,Ballot{-1, -1}}
}
acceptor.Promise = Ballot {0, 0}
acceptor.Accepted = Pair{newState, ballotNumber}
return Pair{-2, Ballot{-2, -2}}
}