mirror of
https://github.com/golang/go
synced 2024-11-24 07:10:18 -07:00
utf8.String: provide an Init method to avoid unnecessary allocation
when creating an array of Strings. R=rsc CC=golang-dev https://golang.org/cl/2267046
This commit is contained in:
parent
2d5e732c54
commit
b4e358d7e1
@ -25,20 +25,29 @@ type String struct {
|
||||
|
||||
// NewString returns a new UTF-8 string with the provided contents.
|
||||
func NewString(contents string) *String {
|
||||
return new(String).Init(contents)
|
||||
}
|
||||
|
||||
// Init initializes an existing String to hold the provided contents.
|
||||
// It returns a pointer to the initialized String.
|
||||
func (s *String) Init(contents string) *String {
|
||||
s.str = contents
|
||||
s.bytePos = 0
|
||||
s.runePos = 0
|
||||
for i := 0; i < len(contents); i++ {
|
||||
if contents[i] >= RuneSelf {
|
||||
// Not ASCII.
|
||||
_, wid := DecodeRuneInString(contents)
|
||||
return &String{
|
||||
str: contents,
|
||||
numRunes: RuneCountInString(contents),
|
||||
width: wid,
|
||||
nonASCII: i,
|
||||
}
|
||||
s.numRunes = RuneCountInString(contents)
|
||||
_, s.width = DecodeRuneInString(contents)
|
||||
s.nonASCII = i
|
||||
return s
|
||||
}
|
||||
}
|
||||
// ASCII is simple. Also, the empty string is ASCII.
|
||||
return &String{str: contents, numRunes: len(contents), nonASCII: len(contents)}
|
||||
s.numRunes = len(contents)
|
||||
s.width = 0
|
||||
s.nonASCII = len(contents)
|
||||
return s
|
||||
}
|
||||
|
||||
// String returns the contents of the String. This method also means the
|
||||
|
Loading…
Reference in New Issue
Block a user