1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

array: update array.repeat

This commit is contained in:
Alexey 2020-02-29 17:25:49 +03:00 committed by GitHub
parent 632a538eb3
commit 99cbc58db8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -82,23 +82,22 @@ fn (a mut array) ensure_cap(required int) {
a.cap = cap a.cap = cap
} }
// array.repeat returns new array with the given array elements // repeat returns new array with the given array elements repeated given times.
// repeated `nr_repeat` times pub fn (a array) repeat(count int) array {
pub fn (a array) repeat(nr_repeats int) array { if count < 0 {
if nr_repeats < 0 { panic('array.repeat: count is negative: $count')
panic('array.repeat: count is negative (count == nr_repeats)')
} }
mut size := nr_repeats * a.len * a.element_size mut size := count * a.len * a.element_size
if size == 0 { if size == 0 {
size = a.element_size size = a.element_size
} }
arr := array{ arr := array{
len: nr_repeats * a.len len: count * a.len
cap: nr_repeats * a.len cap: count * a.len
element_size: a.element_size element_size: a.element_size
data: calloc(size) data: calloc(size)
} }
for i in 0..nr_repeats { for i in 0..count {
C.memcpy(arr.data + i * a.len * a.element_size, a.data, a.len * a.element_size) C.memcpy(arr.data + i * a.len * a.element_size, a.data, a.len * a.element_size)
} }
return arr return arr