From e13bafc1abaea9a9f3142eb58be1e977ca97e114 Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Sun, 2 Aug 2015 14:25:57 +0900 Subject: Performance fix - unnecessary rune convertion on --ansi > time cat /tmp/list | fzf-0.10.1-darwin_amd64 --ansi -fqwerty > /dev/null real 0m4.364s user 0m8.231s sys 0m0.820s > time cat /tmp/list | fzf --ansi -fqwerty > /dev/null real 0m4.624s user 0m5.755s sys 0m0.732s --- src/util/util.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'src/util') diff --git a/src/util/util.go b/src/util/util.go index a0e12696..eeeb75f4 100644 --- a/src/util/util.go +++ b/src/util/util.go @@ -6,6 +6,7 @@ import "C" import ( "os" "time" + "unicode/utf8" ) // Max returns the largest integer @@ -88,3 +89,18 @@ func TrimRight(runes []rune) []rune { } return runes[0 : i+1] } + +func BytesToRunes(bytea []byte) []rune { + runes := make([]rune, 0, len(bytea)) + for i := 0; i < len(bytea); { + if bytea[i] < utf8.RuneSelf { + runes = append(runes, rune(bytea[i])) + i++ + } else { + r, sz := utf8.DecodeRune(bytea[i:]) + i += sz + runes = append(runes, r) + } + } + return runes +} -- cgit v1.2.3