feature_any_number.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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) LastError() error {
  15. return any.err
  16. }
  17. func (any *numberLazyAny) ToBool() bool {
  18. return any.ToFloat64() != 0
  19. }
  20. func (any *numberLazyAny) ToInt() int {
  21. iter := any.cfg.BorrowIterator(any.buf)
  22. defer any.cfg.ReturnIterator(iter)
  23. val := iter.ReadInt()
  24. any.err = iter.Error
  25. return val
  26. }
  27. func (any *numberLazyAny) ToInt32() int32 {
  28. iter := any.cfg.BorrowIterator(any.buf)
  29. defer any.cfg.ReturnIterator(iter)
  30. val := iter.ReadInt32()
  31. any.err = iter.Error
  32. return val
  33. }
  34. func (any *numberLazyAny) ToInt64() int64 {
  35. iter := any.cfg.BorrowIterator(any.buf)
  36. defer any.cfg.ReturnIterator(iter)
  37. val := iter.ReadInt64()
  38. any.err = iter.Error
  39. return val
  40. }
  41. func (any *numberLazyAny) ToUint() uint {
  42. iter := any.cfg.BorrowIterator(any.buf)
  43. defer any.cfg.ReturnIterator(iter)
  44. val := iter.ReadUint()
  45. any.err = iter.Error
  46. return val
  47. }
  48. func (any *numberLazyAny) ToUint32() uint32 {
  49. iter := any.cfg.BorrowIterator(any.buf)
  50. defer any.cfg.ReturnIterator(iter)
  51. val := iter.ReadUint32()
  52. any.err = iter.Error
  53. return val
  54. }
  55. func (any *numberLazyAny) ToUint64() uint64 {
  56. iter := any.cfg.BorrowIterator(any.buf)
  57. defer any.cfg.ReturnIterator(iter)
  58. val := iter.ReadUint64()
  59. any.err = iter.Error
  60. return val
  61. }
  62. func (any *numberLazyAny) ToFloat32() float32 {
  63. iter := any.cfg.BorrowIterator(any.buf)
  64. defer any.cfg.ReturnIterator(iter)
  65. val := iter.ReadFloat32()
  66. any.err = iter.Error
  67. return val
  68. }
  69. func (any *numberLazyAny) ToFloat64() float64 {
  70. iter := any.cfg.BorrowIterator(any.buf)
  71. defer any.cfg.ReturnIterator(iter)
  72. val := iter.ReadFloat64()
  73. any.err = iter.Error
  74. return val
  75. }
  76. func (any *numberLazyAny) ToString() string {
  77. return *(*string)(unsafe.Pointer(&any.buf))
  78. }
  79. func (any *numberLazyAny) WriteTo(stream *Stream) {
  80. stream.Write(any.buf)
  81. }
  82. func (any *numberLazyAny) GetInterface() interface{} {
  83. iter := any.cfg.BorrowIterator(any.buf)
  84. defer any.cfg.ReturnIterator(iter)
  85. return iter.Read()
  86. }