mirror of https://github.com/golang/go.git
unicode/utf8: minor code simplification
It's a little bit waste to check if r is not a surrogate code point because RuneError is not a surrogate code point. LGTM=iant R=golang-codereviews, iant CC=golang-codereviews https://golang.org/cl/79230043
This commit is contained in:
parent
160649ff9a
commit
446d90d727
|
|
@ -329,37 +329,29 @@ func RuneLen(r rune) int {
|
|||
// It returns the number of bytes written.
|
||||
func EncodeRune(p []byte, r rune) int {
|
||||
// Negative values are erroneous. Making it unsigned addresses the problem.
|
||||
if uint32(r) <= rune1Max {
|
||||
switch i := uint32(r); {
|
||||
case i <= rune1Max:
|
||||
p[0] = byte(r)
|
||||
return 1
|
||||
}
|
||||
|
||||
if uint32(r) <= rune2Max {
|
||||
case i <= rune2Max:
|
||||
p[0] = t2 | byte(r>>6)
|
||||
p[1] = tx | byte(r)&maskx
|
||||
return 2
|
||||
}
|
||||
|
||||
if uint32(r) > MaxRune {
|
||||
case i > MaxRune, surrogateMin <= i && i <= surrogateMax:
|
||||
r = RuneError
|
||||
}
|
||||
|
||||
if surrogateMin <= r && r <= surrogateMax {
|
||||
r = RuneError
|
||||
}
|
||||
|
||||
if uint32(r) <= rune3Max {
|
||||
fallthrough
|
||||
case i <= rune3Max:
|
||||
p[0] = t3 | byte(r>>12)
|
||||
p[1] = tx | byte(r>>6)&maskx
|
||||
p[2] = tx | byte(r)&maskx
|
||||
return 3
|
||||
default:
|
||||
p[0] = t4 | byte(r>>18)
|
||||
p[1] = tx | byte(r>>12)&maskx
|
||||
p[2] = tx | byte(r>>6)&maskx
|
||||
p[3] = tx | byte(r)&maskx
|
||||
return 4
|
||||
}
|
||||
|
||||
p[0] = t4 | byte(r>>18)
|
||||
p[1] = tx | byte(r>>12)&maskx
|
||||
p[2] = tx | byte(r>>6)&maskx
|
||||
p[3] = tx | byte(r)&maskx
|
||||
return 4
|
||||
}
|
||||
|
||||
// RuneCount returns the number of runes in p. Erroneous and short
|
||||
|
|
|
|||
Loading…
Reference in New Issue