tape: Dynamically encode floating point values
This commit is contained in:
parent
419c3651bf
commit
785b48085d
@ -36,16 +36,18 @@ func EncodeAny(encoder *Encoder, value any, tag Tag) (n int, err error) {
|
|||||||
// primitives
|
// primitives
|
||||||
reflectValue := reflect.ValueOf(value)
|
reflectValue := reflect.ValueOf(value)
|
||||||
switch reflectValue.Kind() {
|
switch reflectValue.Kind() {
|
||||||
case reflect.Int: return encoder.WriteInt32(int32(reflectValue.Int()))
|
case reflect.Int: return encoder.WriteInt32(int32(reflectValue.Int()))
|
||||||
case reflect.Uint: return encoder.WriteUint32(uint32(reflectValue.Uint()))
|
case reflect.Uint: return encoder.WriteUint32(uint32(reflectValue.Uint()))
|
||||||
case reflect.Int8: return encoder.WriteInt8(int8(reflectValue.Int()))
|
case reflect.Int8: return encoder.WriteInt8(int8(reflectValue.Int()))
|
||||||
case reflect.Uint8: return encoder.WriteUint8(uint8(reflectValue.Uint()))
|
case reflect.Uint8: return encoder.WriteUint8(uint8(reflectValue.Uint()))
|
||||||
case reflect.Int16: return encoder.WriteInt16(int16(reflectValue.Int()))
|
case reflect.Int16: return encoder.WriteInt16(int16(reflectValue.Int()))
|
||||||
case reflect.Uint16: return encoder.WriteUint16(uint16(reflectValue.Uint()))
|
case reflect.Uint16: return encoder.WriteUint16(uint16(reflectValue.Uint()))
|
||||||
case reflect.Int32: return encoder.WriteInt32(int32(reflectValue.Int()))
|
case reflect.Int32: return encoder.WriteInt32(int32(reflectValue.Int()))
|
||||||
case reflect.Uint32: return encoder.WriteUint32(uint32(reflectValue.Uint()))
|
case reflect.Uint32: return encoder.WriteUint32(uint32(reflectValue.Uint()))
|
||||||
case reflect.Int64: return encoder.WriteInt64(int64(reflectValue.Int()))
|
case reflect.Int64: return encoder.WriteInt64(int64(reflectValue.Int()))
|
||||||
case reflect.Uint64: return encoder.WriteUint64(uint64(reflectValue.Uint()))
|
case reflect.Uint64: return encoder.WriteUint64(uint64(reflectValue.Uint()))
|
||||||
|
case reflect.Float32: return encoder.WriteFloat32(float32(reflectValue.Float()))
|
||||||
|
case reflect.Float64: return encoder.WriteFloat64(float64(reflectValue.Float()))
|
||||||
case reflect.String:
|
case reflect.String:
|
||||||
if reflectValue.Len() > MaxStructureLength {
|
if reflectValue.Len() > MaxStructureLength {
|
||||||
return 0, ErrTooLong
|
return 0, ErrTooLong
|
||||||
@ -244,17 +246,19 @@ func TagAny(value any) (Tag, error) {
|
|||||||
func tagAny(reflectValue reflect.Value) (Tag, error) {
|
func tagAny(reflectValue reflect.Value) (Tag, error) {
|
||||||
// primitives
|
// primitives
|
||||||
switch reflectValue.Kind() {
|
switch reflectValue.Kind() {
|
||||||
case reflect.Int: return LSI.WithCN(3), nil
|
case reflect.Int: return LSI.WithCN(3), nil
|
||||||
case reflect.Int8: return LSI.WithCN(0), nil
|
case reflect.Int8: return LSI.WithCN(0), nil
|
||||||
case reflect.Int16: return LSI.WithCN(1), nil
|
case reflect.Int16: return LSI.WithCN(1), nil
|
||||||
case reflect.Int32: return LSI.WithCN(3), nil
|
case reflect.Int32: return LSI.WithCN(3), nil
|
||||||
case reflect.Int64: return LSI.WithCN(7), nil
|
case reflect.Int64: return LSI.WithCN(7), nil
|
||||||
case reflect.Uint: return LI.WithCN(3), nil
|
case reflect.Uint: return LI.WithCN(3), nil
|
||||||
case reflect.Uint8: return LI.WithCN(0), nil
|
case reflect.Uint8: return LI.WithCN(0), nil
|
||||||
case reflect.Uint16: return LI.WithCN(1), nil
|
case reflect.Uint16: return LI.WithCN(1), nil
|
||||||
case reflect.Uint32: return LI.WithCN(3), nil
|
case reflect.Uint32: return LI.WithCN(3), nil
|
||||||
case reflect.Uint64: return LI.WithCN(7), nil
|
case reflect.Uint64: return LI.WithCN(7), nil
|
||||||
case reflect.String: return bufferLenTag(reflectValue.Len()), nil
|
case reflect.Float32: return FP.WithCN(3), nil
|
||||||
|
case reflect.Float64: return FP.WithCN(7), nil
|
||||||
|
case reflect.String: return bufferLenTag(reflectValue.Len()), nil
|
||||||
}
|
}
|
||||||
if reflectValue.CanConvert(reflect.TypeOf(dummyBuffer)) {
|
if reflectValue.CanConvert(reflect.TypeOf(dummyBuffer)) {
|
||||||
return bufferLenTag(reflectValue.Len()), nil
|
return bufferLenTag(reflectValue.Len()), nil
|
||||||
|
Loading…
x
Reference in New Issue
Block a user