summaryrefslogtreecommitdiffhomepage
path: root/pkg/buffer
diff options
context:
space:
mode:
authorgVisor bot <gvisor-bot@google.com>2021-08-12 03:22:09 +0000
committergVisor bot <gvisor-bot@google.com>2021-08-12 03:22:09 +0000
commit06ca99726127684b3ef5af1328aa4a7d4f54e6f4 (patch)
tree8a4ea6163b58537ac19754be10bf44d983ad46c9 /pkg/buffer
parente300f0c99cea22cf8e3f8a68fe7c36bf4a987be7 (diff)
parent6d0b40b1d159a96ba96a26f8095b9b94f3eb2dc0 (diff)
Merge release-20210726.0-54-g6d0b40b1d (automated)
Diffstat (limited to 'pkg/buffer')
-rw-r--r--pkg/buffer/view.go14
1 files changed, 14 insertions, 0 deletions
diff --git a/pkg/buffer/view.go b/pkg/buffer/view.go
index 7bcfcd543..a4610f977 100644
--- a/pkg/buffer/view.go
+++ b/pkg/buffer/view.go
@@ -378,6 +378,20 @@ func (v *View) Copy() (other View) {
return
}
+// Clone makes a more shallow copy compared to Copy. The underlying payload
+// slice (buffer.data) is shared but the buffers themselves are copied.
+func (v *View) Clone() *View {
+ other := &View{
+ size: v.size,
+ }
+ for buf := v.data.Front(); buf != nil; buf = buf.Next() {
+ newBuf := other.pool.getNoInit()
+ *newBuf = *buf
+ other.data.PushBack(newBuf)
+ }
+ return other
+}
+
// Apply applies the given function across all valid data.
func (v *View) Apply(fn func([]byte)) {
for buf := v.data.Front(); buf != nil; buf = buf.Next() {