32 lines
360 B
Go
32 lines
360 B
Go
package reverse
|
|
|
|
import "unicode/utf8"
|
|
|
|
func swap(a *byte, b *byte) {
|
|
*a ^= *b
|
|
*b ^= *a
|
|
*a ^= *b
|
|
}
|
|
|
|
func reverse(b []byte) {
|
|
for i := 0; i < len(b); {
|
|
_, sz := utf8.DecodeRune(b[i:])
|
|
l := i
|
|
r := i + sz - 1
|
|
for l < r {
|
|
swap(&b[l], &b[r])
|
|
l++
|
|
r--
|
|
}
|
|
i += sz
|
|
}
|
|
|
|
l := 0
|
|
r := len(b) - 1
|
|
for l < r {
|
|
swap(&b[l], &b[r])
|
|
l++
|
|
r--
|
|
}
|
|
}
|