summaryrefslogtreecommitdiff
path: root/vendor/github.com/ugorji/go/codec/binc.base.go
diff options
context:
space:
mode:
authorLibravatar kim <grufwub@gmail.com>2025-06-30 15:19:09 +0200
committerLibravatar kim <gruf@noreply.codeberg.org>2025-06-30 15:19:09 +0200
commit8b0ea560279a5bf4479555d3924c763ddeecfcad (patch)
tree005e26d4a658e565594fb259cc17948659195822 /vendor/github.com/ugorji/go/codec/binc.base.go
parent[chore] bumps ncruces/go-sqlite3 v0.26.1 => v0.26.3 (#4302) (diff)
downloadgotosocial-8b0ea560279a5bf4479555d3924c763ddeecfcad.tar.xz
[chore] update go dependencies (#4304)
- github.com/KimMachineGun/automemlimit v0.7.2 => v0.7.3 - github.com/gin-contrib/cors v1.7.5 => v1.7.6 - github.com/minio/minio-go/v7 v7.0.92 => v7.0.94 - github.com/spf13/cast v1.8.0 => v1.9.2 - github.com/uptrace/bun{,/*} v1.2.11 => v1.2.14 - golang.org/x/image v0.27.0 => v0.28.0 - golang.org/x/net v0.40.0 => v0.41.0 - code.superseriousbusiness.org/go-swagger v0.31.0-gts-go1.23-fix => v0.32.3-gts-go1.23-fix Reviewed-on: https://codeberg.org/superseriousbusiness/gotosocial/pulls/4304 Co-authored-by: kim <grufwub@gmail.com> Co-committed-by: kim <grufwub@gmail.com>
Diffstat (limited to 'vendor/github.com/ugorji/go/codec/binc.base.go')
-rw-r--r--vendor/github.com/ugorji/go/codec/binc.base.go194
1 files changed, 194 insertions, 0 deletions
diff --git a/vendor/github.com/ugorji/go/codec/binc.base.go b/vendor/github.com/ugorji/go/codec/binc.base.go
new file mode 100644
index 000000000..29da5acdb
--- /dev/null
+++ b/vendor/github.com/ugorji/go/codec/binc.base.go
@@ -0,0 +1,194 @@
+// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved.
+// Use of this source code is governed by a MIT license found in the LICENSE file.
+
+package codec
+
+import (
+ "reflect"
+ "time"
+)
+
+// Symbol management:
+// - symbols are stored in a symbol map during encoding and decoding.
+// - the symbols persist until the (En|De)coder ResetXXX method is called.
+
+const bincDoPrune = true
+
+// vd as low 4 bits (there are 16 slots)
+const (
+ bincVdSpecial byte = iota
+ bincVdPosInt
+ bincVdNegInt
+ bincVdFloat
+
+ bincVdString
+ bincVdByteArray
+ bincVdArray
+ bincVdMap
+
+ bincVdTimestamp
+ bincVdSmallInt
+ _ // bincVdUnicodeOther
+ bincVdSymbol
+
+ _ // bincVdDecimal
+ _ // open slot
+ _ // open slot
+ bincVdCustomExt = 0x0f
+)
+
+const (
+ bincSpNil byte = iota
+ bincSpFalse
+ bincSpTrue
+ bincSpNan
+ bincSpPosInf
+ bincSpNegInf
+ bincSpZeroFloat
+ bincSpZero
+ bincSpNegOne
+)
+
+const (
+ _ byte = iota // bincFlBin16
+ bincFlBin32
+ _ // bincFlBin32e
+ bincFlBin64
+ _ // bincFlBin64e
+ // others not currently supported
+)
+
+const bincBdNil = 0 // bincVdSpecial<<4 | bincSpNil // staticcheck barfs on this (SA4016)
+
+var (
+ bincdescSpecialVsNames = map[byte]string{
+ bincSpNil: "nil",
+ bincSpFalse: "false",
+ bincSpTrue: "true",
+ bincSpNan: "float",
+ bincSpPosInf: "float",
+ bincSpNegInf: "float",
+ bincSpZeroFloat: "float",
+ bincSpZero: "uint",
+ bincSpNegOne: "int",
+ }
+ bincdescVdNames = map[byte]string{
+ bincVdSpecial: "special",
+ bincVdSmallInt: "uint",
+ bincVdPosInt: "uint",
+ bincVdFloat: "float",
+ bincVdSymbol: "string",
+ bincVdString: "string",
+ bincVdByteArray: "bytes",
+ bincVdTimestamp: "time",
+ bincVdCustomExt: "ext",
+ bincVdArray: "array",
+ bincVdMap: "map",
+ }
+)
+
+func bincdescbd(bd byte) (s string) {
+ return bincdesc(bd>>4, bd&0x0f)
+}
+
+func bincdesc(vd, vs byte) (s string) {
+ if vd == bincVdSpecial {
+ s = bincdescSpecialVsNames[vs]
+ } else {
+ s = bincdescVdNames[vd]
+ }
+ if s == "" {
+ s = "unknown"
+ }
+ return
+}
+
+type bincEncState struct {
+ m map[string]uint16 // symbols
+}
+
+// func (e *bincEncState) restoreState(v interface{}) { e.m = v.(map[string]uint16) }
+// func (e bincEncState) captureState() interface{} { return e.m }
+// func (e *bincEncState) resetState() { e.m = nil }
+// func (e *bincEncState) reset() { e.resetState() }
+func (e *bincEncState) reset() { e.m = nil }
+
+type bincDecState struct {
+ bdRead bool
+ bd byte
+ vd byte
+ vs byte
+
+ _ bool
+ // MARKER: consider using binary search here instead of a map (ie bincDecSymbol)
+ s map[uint16][]byte
+}
+
+// func (x bincDecState) captureState() interface{} { return x }
+// func (x *bincDecState) resetState() { *x = bincDecState{} }
+// func (x *bincDecState) reset() { x.resetState() }
+// func (x *bincDecState) restoreState(v interface{}) { *x = v.(bincDecState) }
+func (x *bincDecState) reset() { *x = bincDecState{} }
+
+//------------------------------------
+
+// BincHandle is a Handle for the Binc Schema-Free Encoding Format
+// defined at https://github.com/ugorji/binc .
+//
+// BincHandle currently supports all Binc features with the following EXCEPTIONS:
+// - only integers up to 64 bits of precision are supported.
+// big integers are unsupported.
+// - Only IEEE 754 binary32 and binary64 floats are supported (ie Go float32 and float64 types).
+// extended precision and decimal IEEE 754 floats are unsupported.
+// - Only UTF-8 strings supported.
+// Unicode_Other Binc types (UTF16, UTF32) are currently unsupported.
+//
+// Note that these EXCEPTIONS are temporary and full support is possible and may happen soon.
+type BincHandle struct {
+ binaryEncodingType
+ notJsonType
+ // noElemSeparators
+ BasicHandle
+
+ // AsSymbols defines what should be encoded as symbols.
+ //
+ // Encoding as symbols can reduce the encoded size significantly.
+ //
+ // However, during decoding, each string to be encoded as a symbol must
+ // be checked to see if it has been seen before. Consequently, encoding time
+ // will increase if using symbols, because string comparisons has a clear cost.
+ //
+ // Values:
+ // - 0: default: library uses best judgement
+ // - 1: use symbols
+ // - 2: do not use symbols
+ AsSymbols uint8
+
+ // AsSymbols: may later on introduce more options ...
+ // - m: map keys
+ // - s: struct fields
+ // - n: none
+ // - a: all: same as m, s, ...
+
+ // _ [7]uint64 // padding (cache-aligned)
+}
+
+// Name returns the name of the handle: binc
+func (h *BincHandle) Name() string { return "binc" }
+
+func (h *BincHandle) desc(bd byte) string { return bincdesc(bd>>4, bd&0x0f) }
+
+// SetBytesExt sets an extension
+func (h *BincHandle) SetBytesExt(rt reflect.Type, tag uint64, ext BytesExt) (err error) {
+ return h.SetExt(rt, tag, makeExt(ext))
+}
+
+// var timeDigits = [...]byte{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}
+
+func bincEncodeTime(t time.Time) []byte {
+ return customEncodeTime(t)
+}
+
+func bincDecodeTime(bs []byte) (tt time.Time, err error) {
+ return customDecodeTime(bs)
+}