summaryrefslogtreecommitdiff
path: root/vendor/github.com/bytedance/sonic/internal/encoder/vars/cache.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/bytedance/sonic/internal/encoder/vars/cache.go')
-rw-r--r--vendor/github.com/bytedance/sonic/internal/encoder/vars/cache.go48
1 files changed, 48 insertions, 0 deletions
diff --git a/vendor/github.com/bytedance/sonic/internal/encoder/vars/cache.go b/vendor/github.com/bytedance/sonic/internal/encoder/vars/cache.go
new file mode 100644
index 000000000..9cf2fb15e
--- /dev/null
+++ b/vendor/github.com/bytedance/sonic/internal/encoder/vars/cache.go
@@ -0,0 +1,48 @@
+/*
+ * 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 vars
+
+import (
+ "unsafe"
+
+ "github.com/bytedance/sonic/internal/rt"
+)
+
+type Encoder func(
+ rb *[]byte,
+ vp unsafe.Pointer,
+ sb *Stack,
+ fv uint64,
+) error
+
+func FindOrCompile(vt *rt.GoType, pv bool, compiler func(*rt.GoType, ... interface{}) (interface{}, error)) (interface{}, error) {
+ if val := programCache.Get(vt); val != nil {
+ return val, nil
+ } else if ret, err := programCache.Compute(vt, compiler, pv); err == nil {
+ return ret, nil
+ } else {
+ return nil, err
+ }
+}
+
+func GetProgram(vt *rt.GoType) (interface{}) {
+ return programCache.Get(vt)
+}
+
+func ComputeProgram(vt *rt.GoType, compute func(*rt.GoType, ... interface{}) (interface{}, error), pv bool) (interface{}, error) {
+ return programCache.Compute(vt, compute, pv)
+} \ No newline at end of file