mirror of
https://github.com/terorie/od-database-crawler.git
synced 2025-12-15 08:09:02 +00:00
kill perf
This commit is contained in:
98
runes/runes.go
Normal file
98
runes/runes.go
Normal file
@@ -0,0 +1,98 @@
|
||||
package runes
|
||||
|
||||
func Create(rs ...[]rune) (x []rune) {
|
||||
for _, r := range rs {
|
||||
x = append(x, r...)
|
||||
}
|
||||
return x
|
||||
}
|
||||
|
||||
func IndexRune(s []rune, r rune) int {
|
||||
for i, sr := range s {
|
||||
if r == sr {
|
||||
return i
|
||||
}
|
||||
}
|
||||
return -1
|
||||
}
|
||||
|
||||
func LastIndexRune(s []rune, r rune) int {
|
||||
for i := len(s)-1; i >= 0; i-- {
|
||||
sr := s[i]
|
||||
if r == sr {
|
||||
return i
|
||||
}
|
||||
}
|
||||
return -1
|
||||
}
|
||||
|
||||
func Equals(a, b []rune) bool {
|
||||
if len(a) != len(b) {
|
||||
return false
|
||||
}
|
||||
for i := 0; i < len(a); i++ {
|
||||
if a[i] != b[i] {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func Count(s []rune, r rune) (n int) {
|
||||
for _, sr := range s {
|
||||
if sr == r {
|
||||
n++
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func HasPrefix(s, prefix []rune) bool {
|
||||
return len(s) >= len(prefix) && Equals(s[0:len(prefix)], prefix)
|
||||
}
|
||||
|
||||
func HasSuffix(s, suffix []rune) bool {
|
||||
return len(s) >= len(suffix) && Equals(s[len(s)-len(suffix):], suffix)
|
||||
}
|
||||
|
||||
// TrimPrefix returns s without the provided leading prefix string.
|
||||
// If s doesn't start with prefix, s is returned unchanged.
|
||||
func TrimPrefix(s, prefix []rune) []rune {
|
||||
if HasPrefix(s, prefix) {
|
||||
return s[len(prefix):]
|
||||
}
|
||||
return s
|
||||
}
|
||||
|
||||
func TrimRune(s []rune, r rune) (out []rune) {
|
||||
if len(s) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
var i = 0
|
||||
var sr rune
|
||||
// Trim prefix
|
||||
for i, sr = range s {
|
||||
if sr == r {
|
||||
out = s[i:]
|
||||
} else {
|
||||
break
|
||||
}
|
||||
}
|
||||
s = out
|
||||
|
||||
if len(s) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Trim suffix
|
||||
for i := len(s)-1; i >= 0; i++ {
|
||||
if s[i] == r {
|
||||
out = s[:i]
|
||||
} else {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
return out
|
||||
}
|
||||
Reference in New Issue
Block a user