mirror of
https://github.com/odin-lang/Odin.git
synced 2026-04-21 22:05:20 +00:00
Merge pull request #1624 from Kelimion/insert_at_fix
[runtime] fix `insert_at` procedure group.
This commit is contained in:
@@ -386,12 +386,13 @@ insert_at_elem :: proc(array: ^$T/[dynamic]$E, index: int, arg: E, loc := #calle
|
||||
if array == nil {
|
||||
return
|
||||
}
|
||||
n := len(array)
|
||||
n := max(len(array), index)
|
||||
m :: 1
|
||||
resize(array, n+m, loc)
|
||||
if n+m <= len(array) {
|
||||
new_size := n + m
|
||||
|
||||
if resize(array, new_size, loc) {
|
||||
when size_of(E) != 0 {
|
||||
copy(array[index+m:], array[index:])
|
||||
copy(array[index + m:], array[index:])
|
||||
array[index] = arg
|
||||
}
|
||||
ok = true
|
||||
@@ -409,12 +410,13 @@ insert_at_elems :: proc(array: ^$T/[dynamic]$E, index: int, args: ..E, loc := #c
|
||||
return
|
||||
}
|
||||
|
||||
n := len(array)
|
||||
n := max(len(array), index)
|
||||
m := len(args)
|
||||
resize(array, n+m, loc)
|
||||
if n+m <= len(array) {
|
||||
new_size := n + m
|
||||
|
||||
if resize(array, new_size, loc) {
|
||||
when size_of(E) != 0 {
|
||||
copy(array[index+m:], array[index:])
|
||||
copy(array[index + m:], array[index:])
|
||||
copy(array[index:], args)
|
||||
}
|
||||
ok = true
|
||||
@@ -427,17 +429,18 @@ insert_at_elem_string :: proc(array: ^$T/[dynamic]$E/u8, index: int, arg: string
|
||||
if array == nil {
|
||||
return
|
||||
}
|
||||
if len(args) == 0 {
|
||||
if len(arg) == 0 {
|
||||
ok = true
|
||||
return
|
||||
}
|
||||
|
||||
n := len(array)
|
||||
m := len(args)
|
||||
resize(array, n+m, loc)
|
||||
if n+m <= len(array) {
|
||||
n := max(len(array), index)
|
||||
m := len(arg)
|
||||
new_size := n + m
|
||||
|
||||
if resize(array, new_size, loc) {
|
||||
copy(array[index+m:], array[index:])
|
||||
copy(array[index:], args)
|
||||
copy(array[index:], arg)
|
||||
ok = true
|
||||
}
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user