feature_any_int64.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. package jsoniter
  2. import (
  3. "io"
  4. "strconv"
  5. "unsafe"
  6. )
  7. type int64LazyAny struct {
  8. baseAny
  9. cfg *frozenConfig
  10. buf []byte
  11. err error
  12. cache int64
  13. }
  14. func (any *int64LazyAny) ValueType() ValueType {
  15. return Number
  16. }
  17. func (any *int64LazyAny) Parse() *Iterator {
  18. iter := any.cfg.BorrowIterator(any.buf)
  19. defer any.cfg.ReturnIterator(iter)
  20. if iter == nil {
  21. iter = NewIterator(ConfigDefault)
  22. }
  23. iter.ResetBytes(any.buf)
  24. return iter
  25. }
  26. func (any *int64LazyAny) fillCache() {
  27. if any.err != nil {
  28. return
  29. }
  30. iter := any.Parse()
  31. any.cache = iter.ReadInt64()
  32. if iter.Error != io.EOF {
  33. iter.reportError("intLazyAny", "there are bytes left")
  34. }
  35. any.err = iter.Error
  36. }
  37. func (any *int64LazyAny) LastError() error {
  38. return any.err
  39. }
  40. func (any *int64LazyAny) ToBool() bool {
  41. return any.ToInt64() != 0
  42. }
  43. func (any *int64LazyAny) ToInt() int {
  44. any.fillCache()
  45. return int(any.cache)
  46. }
  47. func (any *int64LazyAny) ToInt32() int32 {
  48. any.fillCache()
  49. return int32(any.cache)
  50. }
  51. func (any *int64LazyAny) ToInt64() int64 {
  52. any.fillCache()
  53. return any.cache
  54. }
  55. func (any *int64LazyAny) ToUint() uint {
  56. any.fillCache()
  57. return uint(any.cache)
  58. }
  59. func (any *int64LazyAny) ToUint32() uint32 {
  60. any.fillCache()
  61. return uint32(any.cache)
  62. }
  63. func (any *int64LazyAny) ToUint64() uint64 {
  64. any.fillCache()
  65. return uint64(any.cache)
  66. }
  67. func (any *int64LazyAny) ToFloat32() float32 {
  68. any.fillCache()
  69. return float32(any.cache)
  70. }
  71. func (any *int64LazyAny) ToFloat64() float64 {
  72. any.fillCache()
  73. return float64(any.cache)
  74. }
  75. func (any *int64LazyAny) ToString() string {
  76. return *(*string)(unsafe.Pointer(&any.buf))
  77. }
  78. func (any *int64LazyAny) WriteTo(stream *Stream) {
  79. stream.Write(any.buf)
  80. }
  81. func (any *int64LazyAny) GetInterface() interface{} {
  82. any.fillCache()
  83. return any.cache
  84. }
  85. type int64Any struct {
  86. baseAny
  87. val int64
  88. }
  89. func (any *int64Any) LastError() error {
  90. return nil
  91. }
  92. func (any *int64Any) ValueType() ValueType {
  93. return Number
  94. }
  95. func (any *int64Any) ToBool() bool {
  96. return any.val != 0
  97. }
  98. func (any *int64Any) ToInt() int {
  99. return int(any.val)
  100. }
  101. func (any *int64Any) ToInt32() int32 {
  102. return int32(any.val)
  103. }
  104. func (any *int64Any) ToInt64() int64 {
  105. return any.val
  106. }
  107. func (any *int64Any) ToUint() uint {
  108. return uint(any.val)
  109. }
  110. func (any *int64Any) ToUint32() uint32 {
  111. return uint32(any.val)
  112. }
  113. func (any *int64Any) ToUint64() uint64 {
  114. return uint64(any.val)
  115. }
  116. func (any *int64Any) ToFloat32() float32 {
  117. return float32(any.val)
  118. }
  119. func (any *int64Any) ToFloat64() float64 {
  120. return float64(any.val)
  121. }
  122. func (any *int64Any) ToString() string {
  123. return strconv.FormatInt(any.val, 10)
  124. }
  125. func (any *int64Any) WriteTo(stream *Stream) {
  126. stream.WriteInt64(any.val)
  127. }
  128. func (any *int64Any) Parse() *Iterator {
  129. return nil
  130. }
  131. func (any *int64Any) GetInterface() interface{} {
  132. return any.val
  133. }