feature_reflect_native.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. package jsoniter
  2. import "unsafe"
  3. type stringDecoder struct {
  4. }
  5. func (decoder *stringDecoder) decode(ptr unsafe.Pointer, iter *Iterator) {
  6. *((*string)(ptr)) = iter.ReadString()
  7. }
  8. type intDecoder struct {
  9. }
  10. func (decoder *intDecoder) decode(ptr unsafe.Pointer, iter *Iterator) {
  11. *((*int)(ptr)) = iter.ReadInt()
  12. }
  13. type int8Decoder struct {
  14. }
  15. func (decoder *int8Decoder) decode(ptr unsafe.Pointer, iter *Iterator) {
  16. *((*int8)(ptr)) = iter.ReadInt8()
  17. }
  18. type int16Decoder struct {
  19. }
  20. func (decoder *int16Decoder) decode(ptr unsafe.Pointer, iter *Iterator) {
  21. *((*int16)(ptr)) = iter.ReadInt16()
  22. }
  23. type int32Decoder struct {
  24. }
  25. func (decoder *int32Decoder) decode(ptr unsafe.Pointer, iter *Iterator) {
  26. *((*int32)(ptr)) = iter.ReadInt32()
  27. }
  28. type int64Decoder struct {
  29. }
  30. func (decoder *int64Decoder) decode(ptr unsafe.Pointer, iter *Iterator) {
  31. *((*int64)(ptr)) = iter.ReadInt64()
  32. }
  33. type uintDecoder struct {
  34. }
  35. func (decoder *uintDecoder) decode(ptr unsafe.Pointer, iter *Iterator) {
  36. *((*uint)(ptr)) = iter.ReadUint()
  37. }
  38. type uint8Decoder struct {
  39. }
  40. func (decoder *uint8Decoder) decode(ptr unsafe.Pointer, iter *Iterator) {
  41. *((*uint8)(ptr)) = iter.ReadUint8()
  42. }
  43. type uint16Decoder struct {
  44. }
  45. func (decoder *uint16Decoder) decode(ptr unsafe.Pointer, iter *Iterator) {
  46. *((*uint16)(ptr)) = iter.ReadUint16()
  47. }
  48. type uint32Decoder struct {
  49. }
  50. func (decoder *uint32Decoder) decode(ptr unsafe.Pointer, iter *Iterator) {
  51. *((*uint32)(ptr)) = iter.ReadUint32()
  52. }
  53. type uint64Decoder struct {
  54. }
  55. func (decoder *uint64Decoder) decode(ptr unsafe.Pointer, iter *Iterator) {
  56. *((*uint64)(ptr)) = iter.ReadUint64()
  57. }
  58. type float32Decoder struct {
  59. }
  60. func (decoder *float32Decoder) decode(ptr unsafe.Pointer, iter *Iterator) {
  61. *((*float32)(ptr)) = iter.ReadFloat32()
  62. }
  63. type float64Decoder struct {
  64. }
  65. func (decoder *float64Decoder) decode(ptr unsafe.Pointer, iter *Iterator) {
  66. *((*float64)(ptr)) = iter.ReadFloat64()
  67. }
  68. type boolDecoder struct {
  69. }
  70. func (decoder *boolDecoder) decode(ptr unsafe.Pointer, iter *Iterator) {
  71. *((*bool)(ptr)) = iter.ReadBool()
  72. }
  73. type interfaceDecoder struct {
  74. }
  75. func (decoder *interfaceDecoder) decode(ptr unsafe.Pointer, iter *Iterator) {
  76. *((*interface{})(ptr)) = iter.ReadAny().Get()
  77. }
  78. type anyDecoder struct {
  79. }
  80. func (decoder *anyDecoder) decode(ptr unsafe.Pointer, iter *Iterator) {
  81. *((*Any)(ptr)) = *iter.ReadAny()
  82. }
  83. type stringNumberDecoder struct {
  84. elemDecoder Decoder
  85. }
  86. func (decoder *stringNumberDecoder) decode(ptr unsafe.Pointer, iter *Iterator) {
  87. c := iter.nextToken()
  88. if c != '"' {
  89. iter.reportError("stringNumberDecoder", `expect "`)
  90. return
  91. }
  92. decoder.elemDecoder.decode(ptr, iter)
  93. if iter.Error != nil {
  94. return
  95. }
  96. c = iter.readByte()
  97. if c != '"' {
  98. iter.reportError("stringNumberDecoder", `expect "`)
  99. return
  100. }
  101. }