mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
Add and AddByte
R=rsc DELTA=83 (83 added, 0 deleted, 0 changed) OCL=34584 CL=34584
This commit is contained in:
parent
61dd8363ba
commit
d3013d8aa1
2 changed files with 83 additions and 0 deletions
|
|
@ -260,3 +260,45 @@ func TrimSpace(s []byte) []byte {
|
|||
}
|
||||
return s[start:end];
|
||||
}
|
||||
|
||||
// How big to make a byte array when growing.
|
||||
// Heuristic: Scale by 50% to give n log n time.
|
||||
func resize(n int) int {
|
||||
if n < 16 {
|
||||
n = 16
|
||||
}
|
||||
return n + n/2;
|
||||
}
|
||||
|
||||
// Add appends the contents of t to the end of s and returns the result.
|
||||
// If s has enough capacity, it is extended in place; otherwise a
|
||||
// new array is allocated and returned.
|
||||
func Add(s, t []byte) []byte {
|
||||
lens := len(s);
|
||||
lent := len(t);
|
||||
if lens + lent <= cap(s) {
|
||||
s = s[0:lens+lent];
|
||||
} else {
|
||||
news := make([]byte, lens+lent, resize(lens+lent));
|
||||
Copy(news, s);
|
||||
s = news;
|
||||
}
|
||||
Copy(s[lens:lens+lent], t);
|
||||
return s;
|
||||
}
|
||||
|
||||
// AddByte appends byte b to the end of s and returns the result.
|
||||
// If s has enough capacity, it is extended in place; otherwise a
|
||||
// new array is allocated and returned.
|
||||
func AddByte(s []byte, t byte) []byte {
|
||||
lens := len(s);
|
||||
if lens + 1 <= cap(s) {
|
||||
s = s[0:lens+1];
|
||||
} else {
|
||||
news := make([]byte, lens+1, resize(lens+1));
|
||||
Copy(news, s);
|
||||
s = news;
|
||||
}
|
||||
s[lens] = t;
|
||||
return s;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue