From 98263a7de64269898a2f81207e38943b5c8e8653 Mon Sep 17 00:00:00 2001 From: Tobi Smethurst <31960611+tsmethurst@users.noreply.github.com> Date: Thu, 12 Aug 2021 21:03:24 +0200 Subject: Grand test fixup (#138) * start fixing up tests * fix up tests + automate with drone * fiddle with linting * messing about with drone.yml * some more fiddling * hmmm * add cache * add vendor directory * verbose * ci updates * update some little things * update sig --- vendor/github.com/vmihailenco/bufpool/README.md | 74 +++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 vendor/github.com/vmihailenco/bufpool/README.md (limited to 'vendor/github.com/vmihailenco/bufpool/README.md') diff --git a/vendor/github.com/vmihailenco/bufpool/README.md b/vendor/github.com/vmihailenco/bufpool/README.md new file mode 100644 index 000000000..05a70791c --- /dev/null +++ b/vendor/github.com/vmihailenco/bufpool/README.md @@ -0,0 +1,74 @@ +# bufpool + +[![Build Status](https://travis-ci.org/vmihailenco/bufpool.svg)](https://travis-ci.org/vmihailenco/bufpool) +[![GoDoc](https://godoc.org/github.com/vmihailenco/bufpool?status.svg)](https://godoc.org/github.com/vmihailenco/bufpool) + +bufpool is an implementation of a pool of byte buffers with anti-memory-waste protection. It is based on the code and ideas from these 2 projects: +- https://github.com/libp2p/go-buffer-pool +- https://github.com/valyala/bytebufferpool + +bufpool consists of global pool of buffers that have a capacity of a power of 2 starting from 64 bytes to 32 megabytes. It also provides individual pools that maintain usage stats to provide buffers of the size that satisfies 95% of the calls. Global pool is used to reuse buffers between different parts of the app. + +# Installation + +``` go +go get github.com/vmihailenco/bufpool +``` + +# Usage + +bufpool can be used as a replacement for `sync.Pool`: + +``` go +var jsonPool bufpool.Pool // basically sync.Pool with usage stats + +func writeJSON(w io.Writer, obj interface{}) error { + buf := jsonPool.Get() + defer jsonPool.Put(buf) + + if err := json.NewEncoder(buf).Encode(obj); err != nil { + return err + } + + _, err := w.Write(buf.Bytes()) + return err +} +``` + +or to allocate buffer of the given size: + +``` go +func writeHex(w io.Writer, data []byte) error { + n := hex.EncodedLen(len(data))) + + buf := bufpool.Get(n) // buf.Len() is guaranteed to equal n + defer bufpool.Put(buf) + + tmp := buf.Bytes() + hex.Encode(tmp, data) + + _, err := w.Write(tmp) + return err +} +``` + +If you need to append data to the buffer you can use following pattern: + +``` go +buf := bufpool.Get(n) +defer bufpool.Put(buf) + +bb := buf.Bytes()[:0] + +bb = append(bb, ...) + +buf.ResetBuf(bb) +``` + +You can also change default pool thresholds: + +``` go +var jsonPool = bufpool.Pool{ + ServePctile: 0.95, // serve p95 buffers +} +``` -- cgit v1.3