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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
package gcc
import "fmt"
type state int
const (
stateIncrease state = iota
stateDecrease
stateHold
)
func (s state) transition(u usage) state {
switch s {
case stateHold:
switch u {
case usageOver:
return stateDecrease
case usageNormal:
return stateIncrease
case usageUnder:
return stateHold
}
case stateIncrease:
switch u {
case usageOver:
return stateDecrease
case usageNormal:
return stateIncrease
case usageUnder:
return stateHold
}
case stateDecrease:
switch u {
case usageOver:
return stateDecrease
case usageNormal:
return stateHold
case usageUnder:
return stateHold
}
}
return stateIncrease
}
func (s state) String() string {
switch s {
case stateIncrease:
return "increase"
case stateDecrease:
return "decrease"
case stateHold:
return "hold"
default:
return fmt.Sprintf("invalid state: %d", s)
}
}
|