aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2022-08-26 16:20:47 +0100
committergingerBill <bill@gingerbill.org>2022-08-26 16:20:47 +0100
commitffa87f55c4cda1b7f356204a89e5bb485c002446 (patch)
treecb4e95b14a70fcd0e19f1094f8077d684be5cc76
parentc9eed04b51a0da3ae4cc9cbf9c2a1dd815bbb5e4 (diff)
Add a return value to `append` that states the number of elements that were returned
-rw-r--r--core/runtime/core_builtin.odin28
1 files changed, 18 insertions, 10 deletions
diff --git a/core/runtime/core_builtin.odin b/core/runtime/core_builtin.odin
index aa5c2ca8f..b87492c52 100644
--- a/core/runtime/core_builtin.odin
+++ b/core/runtime/core_builtin.odin
@@ -342,12 +342,13 @@ delete_key :: proc(m: ^$T/map[$K]$V, key: K) -> (deleted_key: K, deleted_value:
@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 {
- return
+ return 0
}
when size_of(E) == 0 {
array.len += 1
+ return 1
} else {
if cap(array) < len(array)+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
}
a.len += 1
+ return 1
}
+ return 0
}
}
@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 {
- return
+ return 0
}
arg_len := len(args)
if arg_len <= 0 {
- return
+ return 0
}
when size_of(E) == 0 {
array.len += arg_len
+ return arg_len
} else {
if cap(array) < len(array)+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
}
+ return arg_len
}
}
// The append_string built-in procedure appends a string to the end of a [dynamic]u8 like type
@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
- 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
@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 {
- 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
@@ -417,11 +423,13 @@ append_string :: proc(array: ^$T/[dynamic]$E/u8, args: ..string, loc := #caller_
@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 {
return
}
+ prev_len := len(array)
resize(array, len(array)+1)
+ return len(array)-prev_len
}