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