ReadUint64 reads a uint64 from the reader
()
| 797 | |
| 798 | // ReadUint64 reads a uint64 from the reader |
| 799 | func (m *Reader) ReadUint64() (u uint64, err error) { |
| 800 | var p []byte |
| 801 | lead, err := m.R.PeekByte() |
| 802 | if err != nil { |
| 803 | return |
| 804 | } |
| 805 | if isfixint(lead) { |
| 806 | u = uint64(rfixint(lead)) |
| 807 | _, err = m.R.Skip(1) |
| 808 | return |
| 809 | } |
| 810 | switch lead { |
| 811 | case mint8: |
| 812 | p, err = m.R.Next(2) |
| 813 | if err != nil { |
| 814 | return |
| 815 | } |
| 816 | v := int64(getMint8(p)) |
| 817 | if v < 0 { |
| 818 | err = UintBelowZero{Value: v} |
| 819 | return |
| 820 | } |
| 821 | u = uint64(v) |
| 822 | return |
| 823 | |
| 824 | case muint8: |
| 825 | p, err = m.R.Next(2) |
| 826 | if err != nil { |
| 827 | return |
| 828 | } |
| 829 | u = uint64(getMuint8(p)) |
| 830 | return |
| 831 | |
| 832 | case mint16: |
| 833 | p, err = m.R.Next(3) |
| 834 | if err != nil { |
| 835 | return |
| 836 | } |
| 837 | v := int64(getMint16(p)) |
| 838 | if v < 0 { |
| 839 | err = UintBelowZero{Value: v} |
| 840 | return |
| 841 | } |
| 842 | u = uint64(v) |
| 843 | return |
| 844 | |
| 845 | case muint16: |
| 846 | p, err = m.R.Next(3) |
| 847 | if err != nil { |
| 848 | return |
| 849 | } |
| 850 | u = uint64(getMuint16(p)) |
| 851 | return |
| 852 | |
| 853 | case mint32: |
| 854 | p, err = m.R.Next(5) |
| 855 | if err != nil { |
| 856 | return |