]> Cypherpunks repositories - gostls13.git/commitdiff
avoid an allocation inside bytes.Buffer by providing a static array.
authorRob Pike <r@golang.org>
Fri, 4 Dec 2009 08:26:08 +0000 (00:26 -0800)
committerRob Pike <r@golang.org>
Fri, 4 Dec 2009 08:26:08 +0000 (00:26 -0800)
R=rsc
https://golang.org/cl/165058

src/pkg/bytes/buffer.go

index 8fa64524c6c33c91bbd5754c4e0c77fcf4cbb4e9..09202506ff103ff91814a8b99b738a4f5e48526b 100644 (file)
@@ -32,9 +32,9 @@ func copyBytes(dst []byte, doff int, src []byte) {
 // with Read and Write methods.
 // The zero value for Buffer is an empty buffer ready to use.
 type Buffer struct {
-       buf     []byte; // contents are the bytes buf[off : len(buf)]
-       off     int;    // read at &buf[off], write at &buf[len(buf)]
-       oneByte []byte; // avoid allocation of slice on each WriteByte
+       buf     []byte;         // contents are the bytes buf[off : len(buf)]
+       off     int;            // read at &buf[off], write at &buf[len(buf)]
+       oneByte [1]byte;        // avoid allocation of slice on each WriteByte
 }
 
 // Bytes returns the contents of the unread portion of the buffer;
@@ -173,12 +173,8 @@ func (b *Buffer) WriteString(s string) (n int, err os.Error) {
 // The returned error is always nil, but is included
 // to match bufio.Writer's WriteByte.
 func (b *Buffer) WriteByte(c byte) os.Error {
-       if b.oneByte == nil {
-               // Only happens once per Buffer, and then we have a slice.
-               b.oneByte = make([]byte, 1)
-       }
        b.oneByte[0] = c;
-       b.Write(b.oneByte);
+       b.Write(&b.oneByte);
        return nil;
 }