unit std.fmt; // Pure conversion. Nothing here owns a sink: the caller supplies the buffer // and is told how many bytes at the front of it were written (SPEC 10). pub fn fmt_u32(buf: []mut u8, v: u32) -> usize { var tmp: [10]u8 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; var value: u32 = v; var count: usize = 0; while true { tmp[count] = ((value % 10) as u8) + ('0' as u8); count = count + 1; value = value / 10; if value == 0 { break; } if count == 10 { break; } } var i: usize = 0; while i < count { if i < buf.n { buf[i] = tmp[count - 1 - i]; } i = i + 1; } return count; } pub fn fmt_i32(buf: []mut u8, v: i32) -> usize { if v >= 0 { return fmt_u32(buf, v as u32); } if buf.n == 0 { return 0; } buf[0] = '-' as u8; var rest: []mut u8 = buf[1..buf.n]; let digits: usize = fmt_u32(rest, (0 - v) as u32); return digits + 1; }