any_number.go raw

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