80 lines
1.1 KiB
V
80 lines
1.1 KiB
V
module builtin
|
|
|
|
pub struct string {
|
|
pub:
|
|
str byteptr
|
|
len int
|
|
}
|
|
|
|
pub fn strlen(s byteptr) int {
|
|
mut i := 0
|
|
for ; s[i] != 0; i++ {}
|
|
return i
|
|
}
|
|
|
|
pub fn tos(s byteptr, len int) string {
|
|
if s == 0 {
|
|
panic('tos(): nil string')
|
|
}
|
|
return string {
|
|
str: s
|
|
len: len
|
|
}
|
|
}
|
|
|
|
/*
|
|
pub fn tos_clone(s byteptr) string {
|
|
if s == 0 {
|
|
panic('tos: nil string')
|
|
}
|
|
return tos2(s).clone()
|
|
}
|
|
*/
|
|
|
|
// Same as `tos`, but calculates the length. Called by `string(bytes)` casts.
|
|
// Used only internally.
|
|
pub fn tos2(s byteptr) string {
|
|
if s == 0 {
|
|
panic('tos2: nil string')
|
|
}
|
|
return string {
|
|
str: s
|
|
len: strlen(s)
|
|
}
|
|
}
|
|
|
|
pub fn tos3(s *C.char) string {
|
|
if s == 0 {
|
|
panic('tos3: nil string')
|
|
}
|
|
return string {
|
|
str: byteptr(s)
|
|
len: strlen(byteptr(s))
|
|
}
|
|
}
|
|
|
|
pub fn string_eq (s1, s2 string) bool {
|
|
if s1.len != s2.len { return false }
|
|
for i in 0..s1.len {
|
|
if s1[i] != s2[i] { return false }
|
|
}
|
|
return true
|
|
}
|
|
pub fn string_ne (s1, s2 string) bool {
|
|
return !string_eq(s1,s2)
|
|
}
|
|
|
|
/*
|
|
pub fn (a string) clone() string {
|
|
mut b := string {
|
|
len: a.len
|
|
str: malloc(a.len + 1)
|
|
}
|
|
for i := 0; i < a.len; i++ {
|
|
b[i] = a[i]
|
|
}
|
|
b[a.len] = `\0`
|
|
return b
|
|
}
|
|
*/
|