feature_any_float.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package jsoniter
  2. import (
  3. "io"
  4. "unsafe"
  5. )
  6. type floatLazyAny struct {
  7. baseAny
  8. buf []byte
  9. iter *Iterator
  10. err error
  11. cache float64
  12. }
  13. func (any *floatLazyAny) fillCache() {
  14. if any.err != nil {
  15. return
  16. }
  17. iter := any.iter
  18. if iter == nil {
  19. iter = NewIterator()
  20. }
  21. iter.ResetBytes(any.buf)
  22. any.cache = iter.ReadFloat64()
  23. if iter.Error != io.EOF {
  24. iter.reportError("floatLazyAny", "there are bytes left")
  25. }
  26. any.err = iter.Error
  27. }
  28. func (any *floatLazyAny) LastError() error {
  29. return any.err
  30. }
  31. func (any *floatLazyAny) ToBool() bool {
  32. return any.ToFloat64() != 0
  33. }
  34. func (any *floatLazyAny) ToInt() int {
  35. any.fillCache()
  36. return int(any.cache)
  37. }
  38. func (any *floatLazyAny) ToInt32() int32 {
  39. any.fillCache()
  40. return int32(any.cache)
  41. }
  42. func (any *floatLazyAny) ToInt64() int64 {
  43. any.fillCache()
  44. return int64(any.cache)
  45. }
  46. func (any *floatLazyAny) ToFloat32() float32 {
  47. any.fillCache()
  48. return float32(any.cache)
  49. }
  50. func (any *floatLazyAny) ToFloat64() float64 {
  51. any.fillCache()
  52. return any.cache
  53. }
  54. func (any *floatLazyAny) ToString() string {
  55. return *(*string)(unsafe.Pointer(&any.buf))
  56. }
  57. func (any *floatLazyAny) Get(path ...interface{}) Any {
  58. return &invalidAny{}
  59. }