feature_any_int.go 1.1 KB

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