Browse Source

Add a return value to `append` that states the number of elements that were returned

gingerBill 3 years ago
parent
commit
ffa87f55c4
1 changed files with 18 additions and 10 deletions
  1. 18 10
      core/runtime/core_builtin.odin

+ 18 - 10
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
 @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
 }
 }