mirror of
https://github.com/vlang/v.git
synced 2025-09-13 22:42:26 +03:00
js: fix string.bytes codegen, readline, add tests for strings
(#12060)
This commit is contained in:
parent
e94e08475d
commit
8d1ba52d0c
14 changed files with 399 additions and 30 deletions
|
@ -3,32 +3,37 @@
|
|||
// that can be found in the LICENSE file.
|
||||
module strings
|
||||
|
||||
/*
|
||||
pub struct Builder {
|
||||
mut:
|
||||
buf []byte
|
||||
pub mut:
|
||||
len int
|
||||
initial_size int = 1
|
||||
}
|
||||
}*/
|
||||
|
||||
pub type Builder = []byte
|
||||
|
||||
pub fn new_builder(initial_size int) Builder {
|
||||
return Builder{[]byte{cap: initial_size}, 0, initial_size}
|
||||
return []byte{cap: initial_size}
|
||||
}
|
||||
|
||||
pub fn (mut b Builder) write_b(data byte) {
|
||||
b.buf << data
|
||||
b << data
|
||||
}
|
||||
|
||||
pub fn (mut b Builder) write(data []byte) ?int {
|
||||
if data.len == 0 {
|
||||
return 0
|
||||
}
|
||||
b.buf << data
|
||||
b << data
|
||||
return data.len
|
||||
}
|
||||
|
||||
pub fn (b &Builder) byte_at(n int) byte {
|
||||
return b.buf[n]
|
||||
unsafe {
|
||||
return b[n]
|
||||
}
|
||||
}
|
||||
|
||||
pub fn (mut b Builder) write_string(s string) {
|
||||
|
@ -37,7 +42,7 @@ pub fn (mut b Builder) write_string(s string) {
|
|||
}
|
||||
|
||||
for c in s {
|
||||
b.buf << c
|
||||
b << c
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -46,14 +51,41 @@ pub fn (mut b Builder) writeln(s string) {
|
|||
b.write_string(s)
|
||||
}
|
||||
|
||||
b.buf << 10
|
||||
b << 10
|
||||
}
|
||||
|
||||
pub fn (mut b Builder) str() string {
|
||||
s := ''
|
||||
|
||||
#for (const c of b.val.buf.arr.arr)
|
||||
#for (const c of b.val.arr.arr)
|
||||
#s.str += String.fromCharCode(+c)
|
||||
|
||||
b.trim(0)
|
||||
return s
|
||||
}
|
||||
|
||||
pub fn (mut b Builder) cut_last(n int) string {
|
||||
cut_pos := b.len - n
|
||||
x := b[cut_pos..]
|
||||
res := x.bytestr()
|
||||
b.trim(cut_pos)
|
||||
return res
|
||||
}
|
||||
|
||||
pub fn (mut b Builder) go_back_to(pos int) {
|
||||
b.trim(pos)
|
||||
}
|
||||
|
||||
// go_back discards the last `n` bytes from the buffer
|
||||
pub fn (mut b Builder) go_back(n int) {
|
||||
b.trim(b.len - n)
|
||||
}
|
||||
|
||||
// cut_to cuts the string after `pos` and returns it.
|
||||
// if `pos` is superior to builder length, returns an empty string
|
||||
// and cancel further operations
|
||||
pub fn (mut b Builder) cut_to(pos int) string {
|
||||
if pos > b.len {
|
||||
return ''
|
||||
}
|
||||
return b.cut_last(b.len - pos)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue