diff options
| author | 2023-02-25 13:12:40 +0100 | |
|---|---|---|
| committer | 2023-02-25 12:12:40 +0000 | |
| commit | ecdc8379fa8f9d88faca626e7de748c2afbe4910 (patch) | |
| tree | 8c20a5826db2136fc89bee45e15355c5899fa65b /vendor/github.com/bytedance/sonic/option | |
| parent | [bugfix] Fix deleted status causing issues when getting bookmark (#1551) (diff) | |
| download | gotosocial-ecdc8379fa8f9d88faca626e7de748c2afbe4910.tar.xz | |
[chore] Update gin to v1.9.0 (#1553)
Diffstat (limited to 'vendor/github.com/bytedance/sonic/option')
| -rw-r--r-- | vendor/github.com/bytedance/sonic/option/option.go | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/vendor/github.com/bytedance/sonic/option/option.go b/vendor/github.com/bytedance/sonic/option/option.go new file mode 100644 index 000000000..359f99206 --- /dev/null +++ b/vendor/github.com/bytedance/sonic/option/option.go @@ -0,0 +1,78 @@ +/* + * 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 option + +// CompileOptions includes all options for encoder or decoder compiler. +type CompileOptions struct { + // the maximum depth for compilation inline + MaxInlineDepth int + + // the loop times for recursively pretouch + RecursiveDepth int +} + +var ( + // Default value(3) means the compiler only inline 3 layers of nested struct. + // when the depth exceeds, the compiler will recurse + // and compile subsequent structs when they are decoded + DefaultMaxInlineDepth = 3 + + // Default value(1) means `Pretouch()` will be recursively executed once, + // if any nested struct is left (depth exceeds MaxInlineDepth) + DefaultRecursiveDepth = 1 +) + +// DefaultCompileOptions set default compile options. +func DefaultCompileOptions() CompileOptions { + return CompileOptions{ + RecursiveDepth: DefaultRecursiveDepth, + MaxInlineDepth: DefaultMaxInlineDepth, + } +} + +// CompileOption is a function used to change DefaultCompileOptions. +type CompileOption func(o *CompileOptions) + +// WithCompileRecursiveDepth sets the loop times of recursive pretouch +// in both decoder and encoder, +// for both concrete type and its pointer type. +// +// For deep nested struct (depth exceeds MaxInlineDepth), +// try to set more loops to completely compile, +// thus reduce JIT unstability in the first hit. +func WithCompileRecursiveDepth(loop int) CompileOption { + return func(o *CompileOptions) { + if loop < 0 { + panic("loop must be >= 0") + } + o.RecursiveDepth = loop + } +} + +// WithCompileMaxInlineDepth sets the max depth of inline compile +// in decoder and encoder. +// +// For large nested struct, try to set smaller depth to reduce compiling time. +func WithCompileMaxInlineDepth(depth int) CompileOption { + return func(o *CompileOptions) { + if depth <= 0 { + panic("depth must be > 0") + } + o.MaxInlineDepth = depth + } +} +
\ No newline at end of file |
