| 654 | { |
| 655 | |
| 656 | ULONG Int128::makeIndexKey(vary* buf, int exp) |
| 657 | { |
| 658 | fb_assert(-128 <= exp && exp <= 127); |
| 659 | |
| 660 | unsigned char coeff[PMAX + 2]; |
| 661 | unsigned char* c = &coeff[PMAX]; |
| 662 | |
| 663 | for (Int128 v = sign() > 0 ? -*this : *this ; v.sign(); ) |
| 664 | { |
| 665 | int m; |
| 666 | v.divMod(10, &m); |
| 667 | |
| 668 | fb_assert(-m < 10); |
| 669 | fb_assert(c > coeff); |
| 670 | *--c = -m; |
| 671 | } |
| 672 | |
| 673 | memset(coeff, 0, c - coeff); |
| 674 | |
| 675 | return Decimal128::makeBcdKey(buf, coeff, sign() < 0, exp, BIAS, PMAX); |
| 676 | } |
| 677 | |
| 678 | } // namespace Firebird |
| 679 |