( negative bool, buf []byte, tmp []byte, )
| 458 | } |
| 459 | |
| 460 | func decodeLargeNumber( |
| 461 | negative bool, buf []byte, tmp []byte, |
| 462 | ) (e int, m []byte, rest []byte, newTmp []byte, err error) { |
| 463 | var ex uint64 |
| 464 | var r []byte |
| 465 | if negative { |
| 466 | r, ex, err = DecodeUvarintDescending(buf[1:]) |
| 467 | } else { |
| 468 | r, ex, err = DecodeUvarintAscending(buf[1:]) |
| 469 | } |
| 470 | if err != nil { |
| 471 | return 0, nil, nil, nil, err |
| 472 | } |
| 473 | |
| 474 | idx, err := findDecimalTerminator(r) |
| 475 | if err != nil { |
| 476 | return 0, nil, nil, nil, err |
| 477 | } |
| 478 | |
| 479 | m = r[:idx] |
| 480 | if negative { |
| 481 | var mCpy []byte |
| 482 | if k := len(m); k <= len(tmp) { |
| 483 | mCpy = tmp[:k] |
| 484 | tmp = tmp[k:] |
| 485 | } else { |
| 486 | mCpy = make([]byte, k) |
| 487 | } |
| 488 | copy(mCpy, m) |
| 489 | onesComplement(mCpy) |
| 490 | m = mCpy |
| 491 | } |
| 492 | return int(ex), m, r[idx+1:], tmp, nil |
| 493 | } |
| 494 | |
| 495 | // EncodeNonsortingDecimal returns the resulting byte slice with the |
| 496 | // encoded decimal appended to b. The encoding is limited compared to |
no test coverage detected
searching dependent graphs…