array: update `array.repeat`

pull/3883/head
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
1 changed files with 9 additions and 10 deletions

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