diff options
Diffstat (limited to 'vendor/codeberg.org/gruf/go-kv')
-rw-r--r-- | vendor/codeberg.org/gruf/go-kv/field.go | 2 | ||||
-rw-r--r-- | vendor/codeberg.org/gruf/go-kv/field_fmt.go | 33 | ||||
-rw-r--r-- | vendor/codeberg.org/gruf/go-kv/field_format.go | 2 | ||||
-rw-r--r-- | vendor/codeberg.org/gruf/go-kv/format/format.go | 4 | ||||
-rw-r--r-- | vendor/codeberg.org/gruf/go-kv/format/util.go | 13 | ||||
-rw-r--r-- | vendor/codeberg.org/gruf/go-kv/util.go | 12 |
6 files changed, 53 insertions, 13 deletions
diff --git a/vendor/codeberg.org/gruf/go-kv/field.go b/vendor/codeberg.org/gruf/go-kv/field.go index 7ff6f1ca3..86a53b173 100644 --- a/vendor/codeberg.org/gruf/go-kv/field.go +++ b/vendor/codeberg.org/gruf/go-kv/field.go @@ -75,7 +75,7 @@ type Field struct { // Key returns the formatted key string of this Field. func (f Field) Key() string { buf := byteutil.Buffer{B: make([]byte, 0, bufsize/2)} - appendQuoteKey(&buf, f.K) + AppendQuoteKey(&buf, f.K) return buf.String() } diff --git a/vendor/codeberg.org/gruf/go-kv/field_fmt.go b/vendor/codeberg.org/gruf/go-kv/field_fmt.go index c62393fe0..fcdcc5e17 100644 --- a/vendor/codeberg.org/gruf/go-kv/field_fmt.go +++ b/vendor/codeberg.org/gruf/go-kv/field_fmt.go @@ -5,10 +5,18 @@ package kv import ( "fmt" + "sync" "codeberg.org/gruf/go-byteutil" ) +// bufPool is a memory pool of byte buffers. +var bufPool = sync.Pool{ + New: func() interface{} { + return &byteutil.Buffer{B: make([]byte, 0, 512)} + }, +} + // AppendFormat will append formatted format of Field to 'buf'. See .String() for details. func (f Field) AppendFormat(buf *byteutil.Buffer, vbose bool) { var fmtstr string @@ -17,9 +25,9 @@ func (f Field) AppendFormat(buf *byteutil.Buffer, vbose bool) { } else /* regular */ { fmtstr = `%+v` } - appendQuoteKey(buf, f.K) + AppendQuoteKey(buf, f.K) buf.WriteByte('=') - appendQuoteValue(buf, fmt.Sprintf(fmtstr, f.V)) + appendValuef(buf, fmtstr, f.V) } // Value returns the formatted value string of this Field. @@ -31,6 +39,25 @@ func (f Field) Value(vbose bool) string { fmtstr = `%+v` } buf := byteutil.Buffer{B: make([]byte, 0, bufsize/2)} - appendQuoteValue(&buf, fmt.Sprintf(fmtstr, f.V)) + appendValuef(&buf, fmtstr, f.V) return buf.String() } + +// appendValuef appends a quoted value string (formatted by fmt.Appendf) to 'buf'. +func appendValuef(buf *byteutil.Buffer, format string, args ...interface{}) { + // Write format string to a byte buffer + fmtbuf := bufPool.Get().(*byteutil.Buffer) + fmtbuf.B = fmt.Appendf(fmtbuf.B, format, args...) + + // Append quoted value to dst buffer + AppendQuoteValue(buf, fmtbuf.String()) + + // Drop overly large capacity buffers + if fmtbuf.Cap() > int(^uint16(0)) { + return + } + + // Replace buffer in pool + fmtbuf.Reset() + bufPool.Put(fmtbuf) +} diff --git a/vendor/codeberg.org/gruf/go-kv/field_format.go b/vendor/codeberg.org/gruf/go-kv/field_format.go index db1ffc721..4fa7a8dcf 100644 --- a/vendor/codeberg.org/gruf/go-kv/field_format.go +++ b/vendor/codeberg.org/gruf/go-kv/field_format.go @@ -16,7 +16,7 @@ func (f Field) AppendFormat(buf *byteutil.Buffer, vbose bool) { } else /* regular */ { fmtstr = "{:v}" } - appendQuoteKey(buf, f.K) + AppendQuoteKey(buf, f.K) buf.WriteByte('=') format.Appendf(buf, fmtstr, f.V) } diff --git a/vendor/codeberg.org/gruf/go-kv/format/format.go b/vendor/codeberg.org/gruf/go-kv/format/format.go index df5a94b7c..7edc4475f 100644 --- a/vendor/codeberg.org/gruf/go-kv/format/format.go +++ b/vendor/codeberg.org/gruf/go-kv/format/format.go @@ -311,7 +311,7 @@ func (f format) AppendString(s string) { } func (f format) AppendStringKey(s string) { - if !strconv.CanBackquote(s) { + if len(s) > SingleTermLine || !strconv.CanBackquote(s) { // Requires quoting AND escaping f.Buffer.B = strconv.AppendQuote(f.Buffer.B, s) } else if ContainsDoubleQuote(s) { @@ -329,7 +329,7 @@ func (f format) AppendStringKey(s string) { } func (f format) AppendStringQuoted(s string) { - if !strconv.CanBackquote(s) { + if len(s) > SingleTermLine || !strconv.CanBackquote(s) { // Requires quoting AND escaping f.Buffer.B = strconv.AppendQuote(f.Buffer.B, s) } else if ContainsDoubleQuote(s) { diff --git a/vendor/codeberg.org/gruf/go-kv/format/util.go b/vendor/codeberg.org/gruf/go-kv/format/util.go index c4c42329e..674f81be5 100644 --- a/vendor/codeberg.org/gruf/go-kv/format/util.go +++ b/vendor/codeberg.org/gruf/go-kv/format/util.go @@ -5,6 +5,19 @@ import ( "unsafe" ) +const ( + // SingleTermLine: beyond a certain length of string, all of the + // extra checks to handle quoting/not-quoting add a significant + // amount of extra processing time. Quoting in this manner only really + // effects readability on a single line, so a max string length that + // encompasses the maximum number of columns on *most* terminals was + // selected. This was chosen using the metric that 1080p is one of the + // most common display resolutions, and that a relatively small font size + // of 7 requires 223 columns. So 256 should be >= $COLUMNS (fullscreen) + // in 99% of usecases (these figures all pulled out of my ass). + SingleTermLine = 256 +) + // ContainsSpaceOrTab checks if "s" contains space or tabs. func ContainsSpaceOrTab(s string) bool { if i := strings.IndexByte(s, ' '); i != -1 { diff --git a/vendor/codeberg.org/gruf/go-kv/util.go b/vendor/codeberg.org/gruf/go-kv/util.go index a9526bf3d..3d249e5d4 100644 --- a/vendor/codeberg.org/gruf/go-kv/util.go +++ b/vendor/codeberg.org/gruf/go-kv/util.go @@ -7,10 +7,10 @@ import ( "codeberg.org/gruf/go-kv/format" ) -// appendQuoteKey will append and escape/quote a formatted key string. -func appendQuoteKey(buf *byteutil.Buffer, str string) { +// AppendQuoteKey will append and escape/quote a formatted key string. +func AppendQuoteKey(buf *byteutil.Buffer, str string) { switch { - case !strconv.CanBackquote(str): + case len(str) > format.SingleTermLine || !strconv.CanBackquote(str): // Append quoted and escaped string buf.B = strconv.AppendQuote(buf.B, str) case format.ContainsDoubleQuote(str): @@ -27,10 +27,10 @@ func appendQuoteKey(buf *byteutil.Buffer, str string) { } } -// appendQuoteValue will append and escape/quote a formatted value string. -func appendQuoteValue(buf *byteutil.Buffer, str string) { +// AppendQuoteValue will append and escape/quote a formatted value string. +func AppendQuoteValue(buf *byteutil.Buffer, str string) { switch { - case !strconv.CanBackquote(str): + case len(str) > format.SingleTermLine || !strconv.CanBackquote(str): // Append quoted and escaped string buf.B = strconv.AppendQuote(buf.B, str) return |