diff options
author | gVisor bot <gvisor-bot@google.com> | 2020-02-28 20:31:56 +0000 |
---|---|---|
committer | gVisor bot <gvisor-bot@google.com> | 2020-02-28 20:31:56 +0000 |
commit | cb43e84c172bd20a5c63f3e18fddf7fa7cebf929 (patch) | |
tree | 66b9b3bd3fb5383d4003c7ca57e00f6b2648e895 /pkg/buffer/buffer.go | |
parent | e4a1a72f1fd527bc05f756c75556c43ee90e2b21 (diff) | |
parent | 463f4217d109ded8af758fe51a5daf8670da9794 (diff) |
Merge release-20200219.0-69-g463f421 (automated)
Diffstat (limited to 'pkg/buffer/buffer.go')
-rwxr-xr-x | pkg/buffer/buffer.go | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/pkg/buffer/buffer.go b/pkg/buffer/buffer.go new file mode 100755 index 000000000..d5f64609b --- /dev/null +++ b/pkg/buffer/buffer.go @@ -0,0 +1,67 @@ +// Copyright 2020 The gVisor Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Package buffer provides the implementation of a buffer view. +package buffer + +import ( + "sync" +) + +const bufferSize = 8144 // See below. + +// Buffer encapsulates a queueable byte buffer. +// +// Note that the total size is slightly less than two pages. This is done +// intentionally to ensure that the buffer object aligns with runtime +// internals. We have no hard size or alignment requirements. This two page +// size will effectively minimize internal fragmentation, but still have a +// large enough chunk to limit excessive segmentation. +// +// +stateify savable +type Buffer struct { + data [bufferSize]byte + read int + write int + bufferEntry +} + +// Reset resets internal data. +// +// This must be called before use. +func (b *Buffer) Reset() { + b.read = 0 + b.write = 0 +} + +// Empty indicates the buffer is empty. +// +// This indicates there is no data left to read. +func (b *Buffer) Empty() bool { + return b.read == b.write +} + +// Full indicates the buffer is full. +// +// This indicates there is no capacity left to write. +func (b *Buffer) Full() bool { + return b.write == len(b.data) +} + +// bufferPool is a pool for buffers. +var bufferPool = sync.Pool{ + New: func() interface{} { + return new(Buffer) + }, +} |