68 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			V
		
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			V
		
	
	
| module strconv
 | |
| 
 | |
| const base_digits = '0123456789abcdefghijklmnopqrstuvwxyz'
 | |
| 
 | |
| // format_int returns the string representation of the number n in base `radix`
 | |
| // for digit values > 10, this function uses the small latin leters a-z.
 | |
| [direct_array_access; manualfree]
 | |
| pub fn format_int(n i64, radix int) string {
 | |
| 	unsafe {
 | |
| 		if radix < 2 || radix > 36 {
 | |
| 			panic('invalid radix: $radix . It should be => 2 and <= 36')
 | |
| 		}
 | |
| 		if n == 0 {
 | |
| 			return '0'
 | |
| 		}
 | |
| 		mut n_copy := n
 | |
| 		mut have_minus := false
 | |
| 		if n < 0 {
 | |
| 			have_minus = true
 | |
| 			n_copy = -n_copy
 | |
| 		}
 | |
| 		mut res := ''
 | |
| 		for n_copy != 0 {
 | |
| 			tmp_0 := res
 | |
| 			bdx := int(n_copy % radix)
 | |
| 			tmp_1 := strconv.base_digits[bdx].ascii_str()
 | |
| 			res = tmp_1 + res
 | |
| 			tmp_0.free()
 | |
| 			tmp_1.free()
 | |
| 			// res = base_digits[n_copy % radix].ascii_str() + res
 | |
| 			n_copy /= radix
 | |
| 		}
 | |
| 		if have_minus {
 | |
| 			final_res := '-' + res
 | |
| 			res.free()
 | |
| 			return final_res
 | |
| 		}
 | |
| 		return res
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // format_uint returns the string representation of the number n in base `radix`
 | |
| // for digit values > 10, this function uses the small latin leters a-z.
 | |
| [manualfree]
 | |
| pub fn format_uint(n u64, radix int) string {
 | |
| 	unsafe {
 | |
| 		if radix < 2 || radix > 36 {
 | |
| 			panic('invalid radix: $radix . It should be => 2 and <= 36')
 | |
| 		}
 | |
| 		if n == 0 {
 | |
| 			return '0'
 | |
| 		}
 | |
| 		mut n_copy := n
 | |
| 		mut res := ''
 | |
| 		uradix := u64(radix)
 | |
| 		for n_copy != 0 {
 | |
| 			tmp_0 := res
 | |
| 			tmp_1 := strconv.base_digits[n_copy % uradix].ascii_str()
 | |
| 			res = tmp_1 + res
 | |
| 			tmp_0.free()
 | |
| 			tmp_1.free()
 | |
| 			// res = base_digits[n_copy % uradix].ascii_str() + res
 | |
| 			n_copy /= uradix
 | |
| 		}
 | |
| 		return res
 | |
| 	}
 | |
| }
 |