| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432 |
- package jsoniter
- var digits []uint8
- var digitTens []uint8
- var digitOnes []uint8
- func init() {
- digits = []uint8{
- '0', '1', '2', '3', '4', '5',
- '6', '7', '8', '9', 'a', 'b',
- 'c', 'd', 'e', 'f', 'g', 'h',
- 'i', 'j', 'k', 'l', 'm', 'n',
- 'o', 'p', 'q', 'r', 's', 't',
- 'u', 'v', 'w', 'x', 'y', 'z',
- }
- digitTens = []uint8{
- '0', '0', '0', '0', '0', '0', '0', '0', '0', '0',
- '1', '1', '1', '1', '1', '1', '1', '1', '1', '1',
- '2', '2', '2', '2', '2', '2', '2', '2', '2', '2',
- '3', '3', '3', '3', '3', '3', '3', '3', '3', '3',
- '4', '4', '4', '4', '4', '4', '4', '4', '4', '4',
- '5', '5', '5', '5', '5', '5', '5', '5', '5', '5',
- '6', '6', '6', '6', '6', '6', '6', '6', '6', '6',
- '7', '7', '7', '7', '7', '7', '7', '7', '7', '7',
- '8', '8', '8', '8', '8', '8', '8', '8', '8', '8',
- '9', '9', '9', '9', '9', '9', '9', '9', '9', '9',
- }
- digitOnes = []uint8{
- '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
- '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
- '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
- '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
- '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
- '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
- '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
- '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
- '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
- '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
- }
- }
- func (stream *Stream) WriteUint8(val uint8) {
- if stream.Available() < 3 {
- stream.Flush()
- }
- charPos := stream.n
- if val <= 9 {
- charPos += 1;
- } else {
- if val <= 99 {
- charPos += 2;
- } else {
- charPos += 3;
- }
- }
- stream.n = charPos
- var q uint8
- for {
- q = val / 10
- r := val - ((q << 3) + (q << 1)) // r = i-(q*10) ...
- charPos--
- stream.buf[charPos] = digits[r]
- val = q;
- if val == 0 {
- break
- }
- }
- }
- func (stream *Stream) WriteInt8(val int8) {
- if stream.Available() < 4 {
- stream.Flush()
- }
- charPos := stream.n
- if (val < 0) {
- charPos += 1
- val = -val
- stream.buf[stream.n] = '-'
- }
- if val <= 9 {
- charPos += 1;
- } else {
- if val <= 99 {
- charPos += 2;
- } else {
- charPos += 3;
- }
- }
- stream.n = charPos
- var q int8
- for {
- q = val / 10
- r := val - ((q << 3) + (q << 1)) // r = i-(q*10) ...
- charPos--
- stream.buf[charPos] = digits[r]
- val = q;
- if val == 0 {
- break
- }
- }
- }
- func (stream *Stream) WriteUint16(val uint16) {
- if stream.Available() < 5 {
- stream.Flush()
- }
- charPos := stream.n
- if val <= 99 {
- if val <= 9 {
- charPos += 1;
- } else {
- charPos += 2;
- }
- } else {
- if val <= 999 {
- charPos += 3;
- } else {
- if val <= 9999 {
- charPos += 4;
- } else {
- charPos += 5;
- }
- }
- }
- stream.n = charPos
- var q uint16
- for {
- q = val / 10
- r := val - ((q << 3) + (q << 1)) // r = i-(q*10) ...
- charPos--
- stream.buf[charPos] = digits[r]
- val = q;
- if val == 0 {
- break
- }
- }
- }
- func (stream *Stream) WriteInt16(val int16) {
- if stream.Available() < 6 {
- stream.Flush()
- }
- charPos := stream.n
- if (val < 0) {
- charPos += 1
- val = -val
- stream.buf[stream.n] = '-'
- }
- if val <= 99 {
- if val <= 9 {
- charPos += 1;
- } else {
- charPos += 2;
- }
- } else {
- if val <= 999 {
- charPos += 3;
- } else {
- if val <= 9999 {
- charPos += 4;
- } else {
- charPos += 5;
- }
- }
- }
- stream.n = charPos
- var q int16
- for {
- q = val / 10
- r := val - ((q << 3) + (q << 1)) // r = i-(q*10) ...
- charPos--
- stream.buf[charPos] = digits[r]
- val = q;
- if val == 0 {
- break
- }
- }
- }
- func (stream *Stream) WriteUint32(val uint32) {
- if stream.Available() < 10 {
- stream.Flush()
- }
- charPos := stream.n
- if val <= 99999 {
- if val <= 999 {
- if val <= 9 {
- charPos += 1;
- } else {
- if val <= 99 {
- charPos += 2;
- } else {
- charPos += 3;
- }
- }
- } else {
- if val <= 9999 {
- charPos += 4;
- } else {
- charPos += 5;
- }
- }
- } else {
- if val < 99999999 {
- if val <= 999999 {
- charPos += 6;
- } else {
- if val <= 9999999 {
- charPos += 7;
- } else {
- charPos += 8;
- }
- }
- } else {
- if val <= 999999999 {
- charPos += 9;
- } else {
- charPos += 10;
- }
- }
- }
- stream.n = charPos
- var q uint32
- for val >= 65536 {
- q = val / 100;
- // really: r = i - (q * 100);
- r := val - ((q << 6) + (q << 5) + (q << 2));
- val = q;
- charPos--
- stream.buf[charPos] = digitOnes[r];
- charPos--
- stream.buf[charPos] = digitTens[r];
- }
- for {
- q = val / 10
- r := val - ((q << 3) + (q << 1)) // r = i-(q*10) ...
- charPos--
- stream.buf[charPos] = digits[r]
- val = q;
- if val == 0 {
- break
- }
- }
- }
- func (stream *Stream) WriteInt32(val int32) {
- if stream.Available() < 11 {
- stream.Flush()
- }
- charPos := stream.n
- if (val < 0) {
- charPos += 1
- val = -val
- stream.buf[stream.n] = '-'
- }
- if val <= 99999 {
- if val <= 999 {
- if val <= 9 {
- charPos += 1;
- } else {
- if val <= 99 {
- charPos += 2;
- } else {
- charPos += 3;
- }
- }
- } else {
- if val <= 9999 {
- charPos += 4;
- } else {
- charPos += 5;
- }
- }
- } else {
- if val < 99999999 {
- if val <= 999999 {
- charPos += 6;
- } else {
- if val <= 9999999 {
- charPos += 7;
- } else {
- charPos += 8;
- }
- }
- } else {
- if val <= 999999999 {
- charPos += 9;
- } else {
- charPos += 10;
- }
- }
- }
- stream.n = charPos
- var q int32
- for val >= 65536 {
- q = val / 100;
- // really: r = i - (q * 100);
- r := val - ((q << 6) + (q << 5) + (q << 2));
- val = q;
- charPos--
- stream.buf[charPos] = digitOnes[r];
- charPos--
- stream.buf[charPos] = digitTens[r];
- }
- for {
- q = val / 10
- r := val - ((q << 3) + (q << 1)) // r = i-(q*10) ...
- charPos--
- stream.buf[charPos] = digits[r]
- val = q;
- if val == 0 {
- break
- }
- }
- }
- func (stream *Stream) WriteUint64(val uint64) {
- if stream.Available() < 10 {
- stream.Flush()
- }
- charPos := stream.n
- if val <= 99999 {
- if val <= 999 {
- if val <= 9 {
- charPos += 1;
- } else {
- if val <= 99 {
- charPos += 2;
- } else {
- charPos += 3;
- }
- }
- } else {
- if val <= 9999 {
- charPos += 4;
- } else {
- charPos += 5;
- }
- }
- } else if val < 9999999999 {
- if val < 99999999 {
- if val <= 999999 {
- charPos += 6;
- } else {
- if val <= 9999999 {
- charPos += 7;
- } else {
- charPos += 8;
- }
- }
- } else {
- if val <= 999999999 {
- charPos += 9;
- } else {
- charPos += 10;
- }
- }
- } else {
- stream.writeUint64SlowPath(val)
- return
- }
- stream.n = charPos
- var q uint64
- for val >= 65536 {
- q = val / 100;
- // really: r = i - (q * 100);
- r := val - ((q << 6) + (q << 5) + (q << 2));
- val = q;
- charPos--
- stream.buf[charPos] = digitOnes[r];
- charPos--
- stream.buf[charPos] = digitTens[r];
- }
- for {
- q = val / 10
- r := val - ((q << 3) + (q << 1)) // r = i-(q*10) ...
- charPos--
- stream.buf[charPos] = digits[r]
- val = q;
- if val == 0 {
- break
- }
- }
- }
- func (stream *Stream) WriteInt64(val int64) {
- if (val < 0) {
- val = -val
- stream.writeByte('-')
- }
- stream.WriteUint64(uint64(val))
- }
- func (stream *Stream) writeUint64SlowPath(val uint64) {
- var temp [20]byte
- charPos := 20
- var q uint64
- for val >= 65536 {
- q = val / 100;
- // really: r = i - (q * 100);
- r := val - ((q << 6) + (q << 5) + (q << 2));
- val = q;
- charPos--
- temp[charPos] = digitOnes[r];
- charPos--
- temp[charPos] = digitTens[r];
- }
- for {
- q = val / 10
- r := val - ((q << 3) + (q << 1)) // r = i-(q*10) ...
- charPos--
- temp[charPos] = digits[r]
- val = q;
- if val == 0 {
- break
- }
- }
- stream.Write(temp[charPos:])
- }
- func (stream *Stream) WriteInt(val int) {
- stream.WriteInt64(int64(val))
- }
- func (stream *Stream) WriteUint(val uint) {
- stream.WriteUint64(uint64(val))
- }
|