17 DefaultNiceExec = NicePriority
18 DefaultNiceFreq = NiceNormal
19 DefaultNiceFile = NiceBulk
23 niceRe *regexp.Regexp = regexp.MustCompile(`^(\w+)([-+])(\d+)$`)
24 niceAliases map[string]uint8 = map[string]uint8{
27 "priority": NicePriority,
37 func NicenessParse(s string) (uint8, error) {
38 if nice, err := strconv.Atoi(s); err == nil {
39 if nice <= 0 || nice > 255 {
40 return 0, errors.New("nice out of bounds")
42 return uint8(nice), nil
44 s = strings.ToLower(s)
47 if baseNice, found = niceAliases[s]; found {
50 matches := niceRe.FindStringSubmatch(s)
51 if len(matches) != 1+3 {
52 return 0, errors.New("invalid niceness")
54 baseNice, found = niceAliases[matches[1]]
56 return 0, errors.New("invalid niceness")
58 delta, err := strconv.Atoi(matches[3])
62 if matches[2] == "-" {
64 return 0, errors.New("too big niceness delta")
66 return baseNice - uint8(delta), nil
68 if delta > 32 || (baseNice == NiceBulk && delta > 31) {
69 return 0, errors.New("too big niceness delta")
71 return baseNice + uint8(delta), nil
74 func NicenessFmt(nice uint8) string {
78 case NiceFlash-31 < nice && nice < NiceFlash:
79 return fmt.Sprintf("F-%d", NiceFlash-nice)
80 case nice == NiceFlash:
82 case NiceFlash < nice && nice <= (NiceFlash+32):
83 return fmt.Sprintf("F+%d", nice-NiceFlash)
85 case NicePriority-31 < nice && nice < NicePriority:
86 return fmt.Sprintf("P-%d", NicePriority-nice)
87 case nice == NicePriority:
89 case NicePriority < nice && nice <= (NicePriority+32):
90 return fmt.Sprintf("P+%d", nice-NicePriority)
92 case NiceNormal-31 < nice && nice < NiceNormal:
93 return fmt.Sprintf("N-%d", NiceNormal-nice)
94 case nice == NiceNormal:
96 case NiceNormal < nice && nice <= (NiceNormal+32):
97 return fmt.Sprintf("N+%d", nice-NiceNormal)
99 case NiceBulk-31 < nice && nice < NiceBulk:
100 return fmt.Sprintf("B-%d", NiceBulk-nice)
101 case nice == NiceBulk:
103 case NiceBulk < nice && nice <= (NiceBulk+30):
104 return fmt.Sprintf("B+%d", nice-NiceBulk)
106 return strconv.Itoa(int(nice))
109 type ByNice []*SPInfo
111 func (a ByNice) Len() int {
115 func (a ByNice) Swap(i, j int) {
116 a[i], a[j] = a[j], a[i]
119 func (a ByNice) Less(i, j int) bool {
120 return a[i].Nice < a[j].Nice