mirror of
https://github.com/json-iterator/go.git
synced 2025-03-20 20:54:55 +02:00
decoder/encoder;float precision doc
This commit is contained in:
parent
cdbad22d22
commit
cee09816e3
@ -6,9 +6,9 @@
|
||||
//
|
||||
// "JSON and Go"
|
||||
// (https://golang.org/doc/articles/json_and_go.html)
|
||||
// gives a description of how Marshall/Unmarshall operate
|
||||
// gives a description of how Marshal/Unmarshal operate
|
||||
// between arbitrary or predefined json objects and bytes,
|
||||
// and it applies to jsoniter.Marshall/Unmarshall.
|
||||
// and it applies to jsoniter.Marshal/Unmarshal as well.
|
||||
package jsoniter
|
||||
|
||||
import (
|
||||
|
@ -9,19 +9,22 @@ import (
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
/*
|
||||
Reflection on type to create decoders, which is then cached
|
||||
Reflection on value is avoided as we can, as the reflect.Value itself will allocate, with following exceptions
|
||||
1. create instance of new value, for example *int will need a int to be allocated
|
||||
2. append to slice, if the existing cap is not enough, allocate will be done using Reflect.New
|
||||
3. assignment to map, both key and value will be reflect.Value
|
||||
For a simple struct binding, it will be reflect.Value free and allocation free
|
||||
*/
|
||||
|
||||
// Don't confuse jsoniter.Decoder with json.Decoder.
|
||||
// jsoniter.Decoder/Encoder are an internal types registered to cache as needed.
|
||||
// For json.Decoder's adapter, refer to jsoniter.AdapterDecoder(todo link).
|
||||
//
|
||||
// Reflection on type to create decoders, which is then cached
|
||||
// Reflection on value is avoided as we can, as the reflect.Value itself will allocate, with following exceptions
|
||||
// 1. create instance of new value, for example *int will need a int to be allocated
|
||||
// 2. append to slice, if the existing cap is not enough, allocate will be done using Reflect.New
|
||||
// 3. assignment to map, both key and value will be reflect.Value
|
||||
// For a simple struct binding, it will be reflect.Value free and allocation free
|
||||
type Decoder interface {
|
||||
decode(ptr unsafe.Pointer, iter *Iterator)
|
||||
}
|
||||
|
||||
// Don't confuse jsoniter.Encoder with json.Encoder.
|
||||
// jsoniter.Decoder/Encoder are an internal types registered to cache as needed.
|
||||
// For json.Encoder's adapter, refer to jsoniter.AdapterEncoder(todo godoc link).
|
||||
type Encoder interface {
|
||||
isEmpty(ptr unsafe.Pointer) bool
|
||||
encode(ptr unsafe.Pointer, stream *Stream)
|
||||
@ -166,7 +169,7 @@ func CleanDecoders() {
|
||||
atomic.StorePointer(&DECODERS, unsafe.Pointer(&map[string]Decoder{}))
|
||||
}
|
||||
|
||||
// CleanEncoders cleans decoders registered or cached
|
||||
// CleanEncoders cleans encoders registered or cached
|
||||
func CleanEncoders() {
|
||||
typeEncoders = map[string]Encoder{}
|
||||
fieldEncoders = map[string]Encoder{}
|
||||
|
@ -75,6 +75,8 @@ func (stream *Stream) WriteFloat64Lossy(val float64) {
|
||||
}
|
||||
}
|
||||
|
||||
// EnableLossyFloatMarshalling keeps 10**(-6) precision
|
||||
// for float variables for better performance.
|
||||
func EnableLossyFloatMarshalling() {
|
||||
// for better performance
|
||||
RegisterTypeEncoder("float32", func(ptr unsafe.Pointer, stream *Stream) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user