diff options
Diffstat (limited to 'vendor/github.com/bytedance/sonic/internal/decoder/api')
4 files changed, 0 insertions, 497 deletions
diff --git a/vendor/github.com/bytedance/sonic/internal/decoder/api/decoder.go b/vendor/github.com/bytedance/sonic/internal/decoder/api/decoder.go deleted file mode 100644 index 0dc01998f..000000000 --- a/vendor/github.com/bytedance/sonic/internal/decoder/api/decoder.go +++ /dev/null @@ -1,173 +0,0 @@ -/* - * Copyright 2021 ByteDance Inc. - * - * 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 api - -import ( - `reflect` - - `github.com/bytedance/sonic/internal/native` - `github.com/bytedance/sonic/internal/native/types` - `github.com/bytedance/sonic/internal/decoder/consts` - `github.com/bytedance/sonic/internal/decoder/errors` - `github.com/bytedance/sonic/internal/rt` - `github.com/bytedance/sonic/option` -) - -const ( - _F_allow_control = consts.F_allow_control - _F_copy_string = consts.F_copy_string - _F_disable_unknown = consts.F_disable_unknown - _F_disable_urc = consts.F_disable_urc - _F_use_int64 = consts.F_use_int64 - _F_use_number = consts.F_use_number - _F_validate_string = consts.F_validate_string - - _MaxStack = consts.MaxStack - - OptionUseInt64 = consts.OptionUseInt64 - OptionUseNumber = consts.OptionUseNumber - OptionUseUnicodeErrors = consts.OptionUseUnicodeErrors - OptionDisableUnknown = consts.OptionDisableUnknown - OptionCopyString = consts.OptionCopyString - OptionValidateString = consts.OptionValidateString - OptionNoValidateJSON = consts.OptionNoValidateJSON -) - -type ( - Options = consts.Options - MismatchTypeError = errors.MismatchTypeError - SyntaxError = errors.SyntaxError -) - -func (self *Decoder) SetOptions(opts Options) { - if (opts & consts.OptionUseNumber != 0) && (opts & consts.OptionUseInt64 != 0) { - panic("can't set OptionUseInt64 and OptionUseNumber both!") - } - self.f = uint64(opts) -} - -// Decoder is the decoder context object -type Decoder struct { - i int - f uint64 - s string -} - -// NewDecoder creates a new decoder instance. -func NewDecoder(s string) *Decoder { - return &Decoder{s: s} -} - -// Pos returns the current decoding position. -func (self *Decoder) Pos() int { - return self.i -} - -func (self *Decoder) Reset(s string) { - self.s = s - self.i = 0 - // self.f = 0 -} - -func (self *Decoder) CheckTrailings() error { - pos := self.i - buf := self.s - /* skip all the trailing spaces */ - if pos != len(buf) { - for pos < len(buf) && (types.SPACE_MASK & (1 << buf[pos])) != 0 { - pos++ - } - } - - /* then it must be at EOF */ - if pos == len(buf) { - return nil - } - - /* junk after JSON value */ - return SyntaxError { - Src : buf, - Pos : pos, - Code : types.ERR_INVALID_CHAR, - } -} - - -// Decode parses the JSON-encoded data from current position and stores the result -// in the value pointed to by val. -func (self *Decoder) Decode(val interface{}) error { - return decodeImpl(&self.s, &self.i, self.f, val) -} - -// UseInt64 indicates the Decoder to unmarshal an integer into an interface{} as an -// int64 instead of as a float64. -func (self *Decoder) UseInt64() { - self.f |= 1 << _F_use_int64 - self.f &^= 1 << _F_use_number -} - -// UseNumber indicates the Decoder to unmarshal a number into an interface{} as a -// json.Number instead of as a float64. -func (self *Decoder) UseNumber() { - self.f &^= 1 << _F_use_int64 - self.f |= 1 << _F_use_number -} - -// UseUnicodeErrors indicates the Decoder to return an error when encounter invalid -// UTF-8 escape sequences. -func (self *Decoder) UseUnicodeErrors() { - self.f |= 1 << _F_disable_urc -} - -// DisallowUnknownFields indicates the Decoder to return an error when the destination -// is a struct and the input contains object keys which do not match any -// non-ignored, exported fields in the destination. -func (self *Decoder) DisallowUnknownFields() { - self.f |= 1 << _F_disable_unknown -} - -// CopyString indicates the Decoder to decode string values by copying instead of referring. -func (self *Decoder) CopyString() { - self.f |= 1 << _F_copy_string -} - -// ValidateString causes the Decoder to validate string values when decoding string value -// in JSON. Validation is that, returning error when unescaped control chars(0x00-0x1f) or -// invalid UTF-8 chars in the string value of JSON. -func (self *Decoder) ValidateString() { - self.f |= 1 << _F_validate_string -} - -// Pretouch compiles vt ahead-of-time to avoid JIT compilation on-the-fly, in -// order to reduce the first-hit latency. -// -// Opts are the compile options, for example, "option.WithCompileRecursiveDepth" is -// a compile option to set the depth of recursive compile for the nested struct type. -func Pretouch(vt reflect.Type, opts ...option.CompileOption) error { - return pretouchImpl(vt, opts...) -} - -// Skip skips only one json value, and returns first non-blank character position and its ending position if it is valid. -// Otherwise, returns negative error code using start and invalid character position using end -func Skip(data []byte) (start int, end int) { - s := rt.Mem2Str(data) - p := 0 - m := types.NewStateMachine() - ret := native.SkipOne(&s, &p, m, uint64(0)) - types.FreeStateMachine(m) - return ret, p -} diff --git a/vendor/github.com/bytedance/sonic/internal/decoder/api/decoder_amd64.go b/vendor/github.com/bytedance/sonic/internal/decoder/api/decoder_amd64.go deleted file mode 100644 index 4e1c3f42c..000000000 --- a/vendor/github.com/bytedance/sonic/internal/decoder/api/decoder_amd64.go +++ /dev/null @@ -1,38 +0,0 @@ -//go:build go1.17 && !go1.24 -// +build go1.17,!go1.24 - -/* - * Copyright 2021 ByteDance Inc. - * - * 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 api - -import ( - "github.com/bytedance/sonic/internal/envs" - "github.com/bytedance/sonic/internal/decoder/jitdec" - "github.com/bytedance/sonic/internal/decoder/optdec" -) - -var ( - pretouchImpl = jitdec.Pretouch - decodeImpl = jitdec.Decode -) - - func init() { - if envs.UseOptDec { - pretouchImpl = optdec.Pretouch - decodeImpl = optdec.Decode - } - } diff --git a/vendor/github.com/bytedance/sonic/internal/decoder/api/decoder_arm64.go b/vendor/github.com/bytedance/sonic/internal/decoder/api/decoder_arm64.go deleted file mode 100644 index 16e55965a..000000000 --- a/vendor/github.com/bytedance/sonic/internal/decoder/api/decoder_arm64.go +++ /dev/null @@ -1,38 +0,0 @@ -// +build go1.17,!go1.24 - -/* - * Copyright 2021 ByteDance Inc. - * - * 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 api - -import ( - `github.com/bytedance/sonic/internal/decoder/optdec` - `github.com/bytedance/sonic/internal/envs` -) - -var ( - pretouchImpl = optdec.Pretouch - decodeImpl = optdec.Decode -) - - -func init() { - // when in aarch64, we enable all optimization - envs.EnableOptDec() - envs.EnableFastMap() -} - - diff --git a/vendor/github.com/bytedance/sonic/internal/decoder/api/stream.go b/vendor/github.com/bytedance/sonic/internal/decoder/api/stream.go deleted file mode 100644 index 8a8102dd5..000000000 --- a/vendor/github.com/bytedance/sonic/internal/decoder/api/stream.go +++ /dev/null @@ -1,248 +0,0 @@ -/* - * Copyright 2021 ByteDance Inc. - * - * 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 api - -import ( - `bytes` - `io` - `sync` - - `github.com/bytedance/sonic/internal/native` - `github.com/bytedance/sonic/internal/native/types` - `github.com/bytedance/sonic/internal/rt` - `github.com/bytedance/sonic/option` -) - -var ( - minLeftBufferShift uint = 1 -) - -// StreamDecoder is the decoder context object for streaming input. -type StreamDecoder struct { - r io.Reader - buf []byte - scanp int - scanned int64 - err error - Decoder -} - -var bufPool = sync.Pool{ - New: func () interface{} { - return make([]byte, 0, option.DefaultDecoderBufferSize) - }, -} - -func freeBytes(buf []byte) { - if rt.CanSizeResue(cap(buf)) { - bufPool.Put(buf[:0]) - } -} - -// NewStreamDecoder adapts to encoding/json.NewDecoder API. -// -// NewStreamDecoder returns a new decoder that reads from r. -func NewStreamDecoder(r io.Reader) *StreamDecoder { - return &StreamDecoder{r : r} -} - -// Decode decodes input stream into val with corresponding data. -// Redundantly bytes may be read and left in its buffer, and can be used at next call. -// Either io error from underlying io.Reader (except io.EOF) -// or syntax error from data will be recorded and stop subsequently decoding. -func (self *StreamDecoder) Decode(val interface{}) (err error) { - // read more data into buf - if self.More() { - var s = self.scanp - try_skip: - var e = len(self.buf) - var src = rt.Mem2Str(self.buf[s:e]) - // try skip - var x = 0; - if y := native.SkipOneFast(&src, &x); y < 0 { - if self.readMore() { - goto try_skip - } else { - err = SyntaxError{e, self.s, types.ParsingError(-s), ""} - self.setErr(err) - return - } - } else { - s = y + s - e = x + s - } - - // must copy string here for safety - self.Decoder.Reset(string(self.buf[s:e])) - err = self.Decoder.Decode(val) - if err != nil { - self.setErr(err) - return - } - - self.scanp = e - _, empty := self.scan() - if empty { - // no remain valid bytes, thus we just recycle buffer - mem := self.buf - self.buf = nil - freeBytes(mem) - } else { - // remain undecoded bytes, move them onto head - n := copy(self.buf, self.buf[self.scanp:]) - self.buf = self.buf[:n] - } - - self.scanned += int64(self.scanp) - self.scanp = 0 - } - - return self.err -} - -// InputOffset returns the input stream byte offset of the current decoder position. -// The offset gives the location of the end of the most recently returned token and the beginning of the next token. -func (self *StreamDecoder) InputOffset() int64 { - return self.scanned + int64(self.scanp) -} - -// Buffered returns a reader of the data remaining in the Decoder's buffer. -// The reader is valid until the next call to Decode. -func (self *StreamDecoder) Buffered() io.Reader { - return bytes.NewReader(self.buf[self.scanp:]) -} - -// More reports whether there is another element in the -// current array or object being parsed. -func (self *StreamDecoder) More() bool { - if self.err != nil { - return false - } - c, err := self.peek() - return err == nil && c != ']' && c != '}' -} - -// More reports whether there is another element in the -// current array or object being parsed. -func (self *StreamDecoder) readMore() bool { - if self.err != nil { - return false - } - - var err error - var n int - for { - // Grow buffer if not large enough. - l := len(self.buf) - realloc(&self.buf) - - n, err = self.r.Read(self.buf[l:cap(self.buf)]) - self.buf = self.buf[: l+n] - - self.scanp = l - _, empty := self.scan() - if !empty { - return true - } - - // buffer has been scanned, now report any error - if err != nil { - self.setErr(err) - return false - } - } -} - -func (self *StreamDecoder) setErr(err error) { - self.err = err - mem := self.buf[:0] - self.buf = nil - freeBytes(mem) -} - -func (self *StreamDecoder) peek() (byte, error) { - var err error - for { - c, empty := self.scan() - if !empty { - return byte(c), nil - } - // buffer has been scanned, now report any error - if err != nil { - self.setErr(err) - return 0, err - } - err = self.refill() - } -} - -func (self *StreamDecoder) scan() (byte, bool) { - for i := self.scanp; i < len(self.buf); i++ { - c := self.buf[i] - if isSpace(c) { - continue - } - self.scanp = i - return c, false - } - return 0, true -} - -func isSpace(c byte) bool { - return types.SPACE_MASK & (1 << c) != 0 -} - -func (self *StreamDecoder) refill() error { - // Make room to read more into the buffer. - // First slide down data already consumed. - if self.scanp > 0 { - self.scanned += int64(self.scanp) - n := copy(self.buf, self.buf[self.scanp:]) - self.buf = self.buf[:n] - self.scanp = 0 - } - - // Grow buffer if not large enough. - realloc(&self.buf) - - // Read. Delay error for next iteration (after scan). - n, err := self.r.Read(self.buf[len(self.buf):cap(self.buf)]) - self.buf = self.buf[0 : len(self.buf)+n] - - return err -} - -func realloc(buf *[]byte) bool { - l := uint(len(*buf)) - c := uint(cap(*buf)) - if c == 0 { - *buf = bufPool.Get().([]byte) - return true - } - if c - l <= c >> minLeftBufferShift { - e := l+(l>>minLeftBufferShift) - if e <= c { - e = c*2 - } - tmp := make([]byte, l, e) - copy(tmp, *buf) - *buf = tmp - return true - } - return false -} - |