diff options
author | gVisor bot <gvisor-bot@google.com> | 2021-08-12 03:22:09 +0000 |
---|---|---|
committer | gVisor bot <gvisor-bot@google.com> | 2021-08-12 03:22:09 +0000 |
commit | 06ca99726127684b3ef5af1328aa4a7d4f54e6f4 (patch) | |
tree | 8a4ea6163b58537ac19754be10bf44d983ad46c9 /pkg/buffer | |
parent | e300f0c99cea22cf8e3f8a68fe7c36bf4a987be7 (diff) | |
parent | 6d0b40b1d159a96ba96a26f8095b9b94f3eb2dc0 (diff) |
Merge release-20210726.0-54-g6d0b40b1d (automated)
Diffstat (limited to 'pkg/buffer')
-rw-r--r-- | pkg/buffer/view.go | 14 |
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() { |