diff options
| author | gingerBill <bill@gingerbill.org> | 2022-08-26 16:20:47 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2022-08-26 16:20:47 +0100 |
| commit | ffa87f55c4cda1b7f356204a89e5bb485c002446 (patch) | |
| tree | cb4e95b14a70fcd0e19f1094f8077d684be5cc76 /core/runtime | |
| parent | c9eed04b51a0da3ae4cc9cbf9c2a1dd815bbb5e4 (diff) | |
Add a return value to `append` that states the number of elements that were returned
Diffstat (limited to 'core/runtime')
| -rw-r--r-- | core/runtime/core_builtin.odin | 28 |
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 } |