Initial project import
This commit is contained in:
commit
23f2d29e32
11957 files changed
+1754577
No files matched your search
@@ -0,0 +1,100 @@
|
||||
module strconv
|
||||
|
||||
import strings
|
||||
|
||||
pub fn format_str_sb(s string, p BF_param, mut sb strings.Builder) {
|
||||
if p.len0 <= 0 {
|
||||
sb.write_string(s)
|
||||
return
|
||||
}
|
||||
|
||||
dif := p.len0 - utf8_str_visible_length(s)
|
||||
|
||||
if dif <= 0 {
|
||||
sb.write_string(s)
|
||||
return
|
||||
}
|
||||
|
||||
if p.align == .right {
|
||||
for i1 := 0; i1 < dif; i1++ {
|
||||
sb.write_u8(p.pad_ch)
|
||||
}
|
||||
}
|
||||
|
||||
sb.write_string(s)
|
||||
|
||||
if p.align == .left {
|
||||
for i1 := 0; i1 < dif; i1++ {
|
||||
sb.write_u8(p.pad_ch)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// digit pairs in reverse order
|
||||
const digit_pairs = '00102030405060708090011121314151617181910212223242526272829203132333435363738393041424344454647484940515253545556575859506162636465666768696071727374757677787970818283848586878889809192939495969798999'
|
||||
|
||||
// format_dec_sb format a u64
|
||||
@[direct_array_access]
|
||||
pub fn format_dec_sb(d u64, p BF_param, mut res strings.Builder) {
|
||||
mut n_char := dec_digits(d)
|
||||
sign_len := if !p.positive || p.sign_flag { 1 } else { 0 }
|
||||
number_len := sign_len + n_char
|
||||
dif := p.len0 - number_len
|
||||
mut sign_written := false
|
||||
|
||||
if p.align == .right {
|
||||
if p.pad_ch == `0` {
|
||||
if p.positive {
|
||||
if p.sign_flag {
|
||||
res.write_u8(`+`)
|
||||
sign_written = true
|
||||
}
|
||||
} else {
|
||||
res.write_u8(`-`)
|
||||
sign_written = true
|
||||
}
|
||||
}
|
||||
// write the pad chars
|
||||
for i1 := 0; i1 < dif; i1++ {
|
||||
res.write_u8(p.pad_ch)
|
||||
}
|
||||
}
|
||||
|
||||
if !sign_written {
|
||||
// no pad char, write the sign before the number
|
||||
if p.positive {
|
||||
if p.sign_flag {
|
||||
res.write_u8(`+`)
|
||||
}
|
||||
} else {
|
||||
res.write_u8(`-`)
|
||||
}
|
||||
}
|
||||
|
||||
// Legacy version
|
||||
// max u64 18446744073709551615 => 20 byte
|
||||
mut buf := [32]u8{}
|
||||
mut i := 20
|
||||
mut d1 := d
|
||||
for i >= (21 - n_char) {
|
||||
buf[i] = u8(d1 % 10) + `0`
|
||||
|
||||
d1 = d1 / 10
|
||||
i--
|
||||
}
|
||||
|
||||
for _ in 0 .. n_char {
|
||||
i++
|
||||
res.write_u8(buf[i])
|
||||
}
|
||||
i++
|
||||
|
||||
//===========================================
|
||||
|
||||
if p.align == .left {
|
||||
for i1 := 0; i1 < dif; i1++ {
|
||||
res.write_u8(p.pad_ch)
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
Reference in new issue
Block a user