37 lines
812 B
V
37 lines
812 B
V
|
module builtin
|
||
|
|
||
|
pub struct array {
|
||
|
pub:
|
||
|
data voidptr
|
||
|
len int
|
||
|
cap int
|
||
|
element_size int
|
||
|
}
|
||
|
|
||
|
// for now off the stack
|
||
|
fn new_array_from_c_array(len, cap, elm_size int, c_array voidptr) array {
|
||
|
arr := array {
|
||
|
len: len
|
||
|
cap: cap
|
||
|
element_size: elm_size
|
||
|
data: c_array
|
||
|
}
|
||
|
return arr
|
||
|
}
|
||
|
|
||
|
// Private function. Used to implement array[] operator
|
||
|
fn (a array) get(i int) voidptr {
|
||
|
if i < 0 || i >= a.len {
|
||
|
panic('array.get: index out of range') // FIXME: (i == $i, a.len == $a.len)')
|
||
|
}
|
||
|
return a.data + i * a.element_size
|
||
|
}
|
||
|
|
||
|
// Private function. Used to implement assigment to the array element.
|
||
|
fn (a mut array) set(i int, val voidptr) {
|
||
|
if i < 0 || i >= a.len {
|
||
|
panic('array.set: index out of range') //FIXME: (i == $i, a.len == $a.len)')
|
||
|
}
|
||
|
mem_copy(a.data + a.element_size * i, val, a.element_size)
|
||
|
}
|