feature_any_number.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. package jsoniter
  2. import (
  3. "unsafe"
  4. )
  5. type numberLazyAny struct {
  6. baseAny
  7. cfg *frozenConfig
  8. buf []byte
  9. err error
  10. }
  11. func (any *numberLazyAny) ValueType() ValueType {
  12. return Number
  13. }
  14. func (any *numberLazyAny) MustBeValid() Any {
  15. return any
  16. }
  17. func (any *numberLazyAny) LastError() error {
  18. return any.err
  19. }
  20. func (any *numberLazyAny) ToBool() bool {
  21. return any.ToFloat64() != 0
  22. }
  23. func (any *numberLazyAny) ToInt() int {
  24. iter := any.cfg.BorrowIterator(any.buf)
  25. defer any.cfg.ReturnIterator(iter)
  26. val := iter.ReadInt()
  27. any.err = iter.Error
  28. return val
  29. }
  30. func (any *numberLazyAny) ToInt32() int32 {
  31. iter := any.cfg.BorrowIterator(any.buf)
  32. defer any.cfg.ReturnIterator(iter)
  33. val := iter.ReadInt32()
  34. any.err = iter.Error
  35. return val
  36. }
  37. func (any *numberLazyAny) ToInt64() int64 {
  38. iter := any.cfg.BorrowIterator(any.buf)
  39. defer any.cfg.ReturnIterator(iter)
  40. val := iter.ReadInt64()
  41. any.err = iter.Error
  42. return val
  43. }
  44. func (any *numberLazyAny) ToUint() uint {
  45. iter := any.cfg.BorrowIterator(any.buf)
  46. defer any.cfg.ReturnIterator(iter)
  47. val := iter.ReadUint()
  48. any.err = iter.Error
  49. return val
  50. }
  51. func (any *numberLazyAny) ToUint32() uint32 {
  52. iter := any.cfg.BorrowIterator(any.buf)
  53. defer any.cfg.ReturnIterator(iter)
  54. val := iter.ReadUint32()
  55. any.err = iter.Error
  56. return val
  57. }
  58. func (any *numberLazyAny) ToUint64() uint64 {
  59. iter := any.cfg.BorrowIterator(any.buf)
  60. defer any.cfg.ReturnIterator(iter)
  61. val := iter.ReadUint64()
  62. any.err = iter.Error
  63. return val
  64. }
  65. func (any *numberLazyAny) ToFloat32() float32 {
  66. iter := any.cfg.BorrowIterator(any.buf)
  67. defer any.cfg.ReturnIterator(iter)
  68. val := iter.ReadFloat32()
  69. any.err = iter.Error
  70. return val
  71. }
  72. func (any *numberLazyAny) ToFloat64() float64 {
  73. iter := any.cfg.BorrowIterator(any.buf)
  74. defer any.cfg.ReturnIterator(iter)
  75. val := iter.ReadFloat64()
  76. any.err = iter.Error
  77. return val
  78. }
  79. func (any *numberLazyAny) ToString() string {
  80. return *(*string)(unsafe.Pointer(&any.buf))
  81. }
  82. func (any *numberLazyAny) WriteTo(stream *Stream) {
  83. stream.Write(any.buf)
  84. }
  85. func (any *numberLazyAny) GetInterface() interface{} {
  86. iter := any.cfg.BorrowIterator(any.buf)
  87. defer any.cfg.ReturnIterator(iter)
  88. return iter.Read()
  89. }