mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
checker: do not allow nil sum types init
This commit is contained in:
53
vlib/builtin/linux_bare/array_bare.v
Normal file
53
vlib/builtin/linux_bare/array_bare.v
Normal file
@ -0,0 +1,53 @@
|
||||
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 int, cap int, 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 (mut a 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)
|
||||
}
|
||||
|
||||
// array.repeat returns new array with the given array elements
|
||||
// repeated `nr_repeat` times
|
||||
pub fn (a array) repeat(nr_repeats int) array {
|
||||
assert nr_repeats >= 0
|
||||
|
||||
arr := array{
|
||||
len: nr_repeats * a.len
|
||||
cap: nr_repeats * a.len
|
||||
element_size: a.element_size
|
||||
data: malloc(nr_repeats * a.len * a.element_size)
|
||||
}
|
||||
for i in 0 .. nr_repeats {
|
||||
mem_copy(arr.data + i * a.len * a.element_size, a.data, a.len * a.element_size)
|
||||
}
|
||||
return arr
|
||||
}
|
Reference in New Issue
Block a user