]> Cypherpunks repositories - gostls13.git/commitdiff
ByteBuffer.Truncate(n int)
authorRobert Griesemer <gri@golang.org>
Thu, 14 May 2009 17:14:29 +0000 (10:14 -0700)
committerRobert Griesemer <gri@golang.org>
Thu, 14 May 2009 17:14:29 +0000 (10:14 -0700)
R=r
DELTA=22  (17 added, 0 deleted, 5 changed)
OCL=28781
CL=28815

src/lib/io/bytebuffer.go
src/lib/io/bytebuffer_test.go

index 011166e9c0f0973b0db4c22ba2b637e159d8ef46..88371c4b7a77829332433ed21dcfeb7801da4c40 100644 (file)
@@ -39,9 +39,17 @@ func (b *ByteBuffer) Len() int {
        return len(b.buf) - b.off
 }
 
+// Truncates the buffer so it contains n bytes.
+// It preserves the data in the buffer at positions [0 : n].
+// It is an error to call b.Truncate(n) with n > b.Len().
+func (b *ByteBuffer) Truncate(n int) {
+       b.buf = b.buf[0 : b.off + n];
+}
+
 // Reset resets the buffer so it has no content.
+// b.Reset() is the same as b.Truncate(0).
 func (b *ByteBuffer) Reset() {
-       b.off = len(b.buf)
+       b.buf = b.buf[0 : b.off];
 }
 
 // Write appends the contents of p to the buffer.  The return
index 6a4f3c9b90718a9a2d7e6b173d08f02048f7f676..e91a6415ee1517ede239c3f06b77ac3412d0837c 100644 (file)
@@ -89,6 +89,9 @@ func TestBasicOperations(t *testing.T) {
                buf.Reset();
                check(t, "TestBasicOperations (2)", &buf, "");
 
+               buf.Truncate(0);
+               check(t, "TestBasicOperations (3)", &buf, "");
+
                n, err := buf.Write(data[0 : 1]);
                if n != 1 {
                        t.Errorf("wrote 1 byte, but n == %d\n", n);
@@ -96,16 +99,22 @@ func TestBasicOperations(t *testing.T) {
                if err != nil {
                        t.Errorf("err should always be nil, but err == %s\n", err);
                }
-               check(t, "TestBasicOperations (3)", &buf, "a");
+               check(t, "TestBasicOperations (4)", &buf, "a");
 
                n, err = buf.Write(data[1 : 26]);
                if n != 25 {
                        t.Errorf("wrote 25 bytes, but n == %d\n", n);
                }
-               check(t, "TestBasicOperations (4)", &buf, string(data[0 : 26]));
+               check(t, "TestBasicOperations (5)", &buf, string(data[0 : 26]));
+
+               buf.Truncate(26);
+               check(t, "TestBasicOperations (6)", &buf, string(data[0 : 26]));
+
+               buf.Truncate(20);
+               check(t, "TestBasicOperations (7)", &buf, string(data[0 : 20]));
 
-               empty(t, "TestBasicOperations (5)", &buf, string(data[0 : 26]), make([]byte, 5));
-               empty(t, "TestBasicOperations (6)", &buf, "", make([]byte, 100));
+               empty(t, "TestBasicOperations (8)", &buf, string(data[0 : 20]), make([]byte, 5));
+               empty(t, "TestBasicOperations (9)", &buf, "", make([]byte, 100));
        }
 }