mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-04 06:38:47 +00:00
Add a return value to append that states the number of elements that were returned
This commit is contained in:
@@ -342,12 +342,13 @@ delete_key :: proc(m: ^$T/map[$K]$V, key: K) -> (deleted_key: K, deleted_value:
|
|||||||
|
|
||||||
|
|
||||||
@builtin
|
@builtin
|
||||||
append_elem :: proc(array: ^$T/[dynamic]$E, arg: E, loc := #caller_location) {
|
append_elem :: proc(array: ^$T/[dynamic]$E, arg: E, loc := #caller_location) -> int {
|
||||||
if array == nil {
|
if array == nil {
|
||||||
return
|
return 0
|
||||||
}
|
}
|
||||||
when size_of(E) == 0 {
|
when size_of(E) == 0 {
|
||||||
array.len += 1
|
array.len += 1
|
||||||
|
return 1
|
||||||
} else {
|
} else {
|
||||||
if cap(array) < len(array)+1 {
|
if cap(array) < len(array)+1 {
|
||||||
cap := 2 * cap(array) + max(8, 1)
|
cap := 2 * cap(array) + max(8, 1)
|
||||||
@@ -361,23 +362,26 @@ append_elem :: proc(array: ^$T/[dynamic]$E, arg: E, loc := #caller_location) {
|
|||||||
data[a.len] = arg
|
data[a.len] = arg
|
||||||
}
|
}
|
||||||
a.len += 1
|
a.len += 1
|
||||||
|
return 1
|
||||||
}
|
}
|
||||||
|
return 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@builtin
|
@builtin
|
||||||
append_elems :: proc(array: ^$T/[dynamic]$E, args: ..E, loc := #caller_location) {
|
append_elems :: proc(array: ^$T/[dynamic]$E, args: ..E, loc := #caller_location) -> int {
|
||||||
if array == nil {
|
if array == nil {
|
||||||
return
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
arg_len := len(args)
|
arg_len := len(args)
|
||||||
if arg_len <= 0 {
|
if arg_len <= 0 {
|
||||||
return
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
when size_of(E) == 0 {
|
when size_of(E) == 0 {
|
||||||
array.len += arg_len
|
array.len += arg_len
|
||||||
|
return arg_len
|
||||||
} else {
|
} else {
|
||||||
if cap(array) < len(array)+arg_len {
|
if cap(array) < len(array)+arg_len {
|
||||||
cap := 2 * cap(array) + max(8, arg_len)
|
cap := 2 * cap(array) + max(8, arg_len)
|
||||||
@@ -393,23 +397,25 @@ append_elems :: proc(array: ^$T/[dynamic]$E, args: ..E, loc := #caller_location)
|
|||||||
}
|
}
|
||||||
a.len += arg_len
|
a.len += arg_len
|
||||||
}
|
}
|
||||||
|
return arg_len
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// The append_string built-in procedure appends a string to the end of a [dynamic]u8 like type
|
// The append_string built-in procedure appends a string to the end of a [dynamic]u8 like type
|
||||||
@builtin
|
@builtin
|
||||||
append_elem_string :: proc(array: ^$T/[dynamic]$E/u8, arg: $A/string, loc := #caller_location) {
|
append_elem_string :: proc(array: ^$T/[dynamic]$E/u8, arg: $A/string, loc := #caller_location) -> int {
|
||||||
args := transmute([]E)arg
|
args := transmute([]E)arg
|
||||||
append_elems(array=array, args=args, loc=loc)
|
return append_elems(array=array, args=args, loc=loc)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// The append_string built-in procedure appends multiple strings to the end of a [dynamic]u8 like type
|
// The append_string built-in procedure appends multiple strings to the end of a [dynamic]u8 like type
|
||||||
@builtin
|
@builtin
|
||||||
append_string :: proc(array: ^$T/[dynamic]$E/u8, args: ..string, loc := #caller_location) {
|
append_string :: proc(array: ^$T/[dynamic]$E/u8, args: ..string, loc := #caller_location) -> (n: int) {
|
||||||
for arg in args {
|
for arg in args {
|
||||||
append(array = array, args = transmute([]E)(arg), loc = loc)
|
n += append(array = array, args = transmute([]E)(arg), loc = loc)
|
||||||
}
|
}
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// The append built-in procedure appends elements to the end of a dynamic array
|
// The append built-in procedure appends elements to the end of a dynamic array
|
||||||
@@ -417,11 +423,13 @@ append_string :: proc(array: ^$T/[dynamic]$E/u8, args: ..string, loc := #caller_
|
|||||||
|
|
||||||
|
|
||||||
@builtin
|
@builtin
|
||||||
append_nothing :: proc(array: ^$T/[dynamic]$E, loc := #caller_location) {
|
append_nothing :: proc(array: ^$T/[dynamic]$E, loc := #caller_location) -> int {
|
||||||
if array == nil {
|
if array == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
prev_len := len(array)
|
||||||
resize(array, len(array)+1)
|
resize(array, len(array)+1)
|
||||||
|
return len(array)-prev_len
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user