| 1 | module strconv |
| 2 | |
| 3 | const base_digits = '0123456789abcdefghijklmnopqrstuvwxyz' |
| 4 | |
| 5 | // format_int returns the string representation of the number n in base `radix` |
| 6 | // for digit values > 10, this function uses the small latin leters a-z. |
| 7 | @[direct_array_access; manualfree] |
| 8 | pub fn format_int(n i64, radix int) string { |
| 9 | unsafe { |
| 10 | if radix < 2 || radix > 36 { |
| 11 | panic_n('invalid radix, it should be => 2 and <= 36, actual:', radix) |
| 12 | } |
| 13 | if n == 0 { |
| 14 | return '0' |
| 15 | } |
| 16 | mut n_copy := n |
| 17 | mut have_minus := false |
| 18 | if n < 0 { |
| 19 | have_minus = true |
| 20 | n_copy = -n_copy |
| 21 | } |
| 22 | mut res := '' |
| 23 | for n_copy != 0 { |
| 24 | tmp_0 := res |
| 25 | bdx := int(n_copy % radix) |
| 26 | tmp_1 := base_digits[bdx].ascii_str() |
| 27 | res = tmp_1 + res |
| 28 | tmp_0.free() |
| 29 | tmp_1.free() |
| 30 | // res = base_digits[n_copy % radix].ascii_str() + res |
| 31 | n_copy /= radix |
| 32 | } |
| 33 | if have_minus { |
| 34 | final_res := '-' + res |
| 35 | res.free() |
| 36 | return final_res |
| 37 | } |
| 38 | return res |
| 39 | } |
| 40 | } |
| 41 | |
| 42 | // format_uint returns the string representation of the number n in base `radix` |
| 43 | // for digit values > 10, this function uses the small latin leters a-z. |
| 44 | @[direct_array_access; manualfree] |
| 45 | pub fn format_uint(n u64, radix int) string { |
| 46 | unsafe { |
| 47 | if radix < 2 || radix > 36 { |
| 48 | panic_n('invalid radix, it should be => 2 and <= 36, actual:', radix) |
| 49 | } |
| 50 | if n == 0 { |
| 51 | return '0' |
| 52 | } |
| 53 | mut n_copy := n |
| 54 | mut res := '' |
| 55 | uradix := u64(radix) |
| 56 | for n_copy != 0 { |
| 57 | tmp_0 := res |
| 58 | tmp_1 := base_digits[int(n_copy % uradix)].ascii_str() |
| 59 | res = tmp_1 + res |
| 60 | tmp_0.free() |
| 61 | tmp_1.free() |
| 62 | // res = base_digits[n_copy % uradix].ascii_str() + res |
| 63 | n_copy /= uradix |
| 64 | } |
| 65 | return res |
| 66 | } |
| 67 | } |
| 68 | |