builtin: add voidptr.vbytes(len) and byteptr.vbytes(len)

pull/6996/head
Delyan Angelov 2020-11-27 18:18:46 +02:00
parent 2473f65278
commit 1891f55c72
2 changed files with 54 additions and 2 deletions

View File

@ -720,3 +720,21 @@ pub fn (a array) pointers() []voidptr {
}
return res
}
// voidptr.vbytes() - makes a V []byte structure from a C style memory buffer. NB: the data is reused, NOT copied!
[unsafe]
pub fn (data voidptr) vbytes(len int) []byte {
res := array{
element_size: 1
data: data
len: len
cap: len
}
return res
}
// byteptr.vbytes() - makes a V []byte structure from a C style memory buffer. NB: the data is reused, NOT copied!
[unsafe]
pub fn (data byteptr) vbytes(len int) []byte {
return unsafe {voidptr(data).vbytes(len)}
}

View File

@ -1058,3 +1058,37 @@ fn test_multidimensional_array_initialization_with_consts() {
assert data[0][0][0] == cell_value
assert data[1][1][1] == cell_value
}
fn test_byteptr_vbytes() {
unsafe {
bp := malloc(5)
bp[0] = 1
bp[1] = 2
bp[2] = 3
bp[3] = 4
bp[4] = 255
bytes := bp.vbytes(5)
println(bytes)
assert bytes.len == 5
assert bytes[0] == 1
assert bytes[1] == 2
assert bytes[2] == 3
assert bytes[3] == 4
assert bytes[4] == 255
}
}
fn test_voidptr_vbytes() {
unsafe {
bp := malloc(3)
bp[0] = 4
bp[1] = 5
bp[2] = 6
bytes := voidptr(bp).vbytes(3)
assert bytes.len == 3
assert bytes[0] == 4
assert bytes[1] == 5
assert bytes[2] == 6
println(bytes)
}
}