Fix pop behaviour, and improve assert messages by using #caller_location

This commit is contained in:
gingerBill
2020-10-02 11:04:17 +01:00
parent 3a4f0d85a6
commit 8f28312705
+14 -17
View File
@@ -599,31 +599,28 @@ remove_range :: proc(array: ^$D/[dynamic]$T, lo, hi: int, loc := #caller_locatio
@builtin @builtin
pop :: proc(array: ^$T/[dynamic]$E) -> E { pop :: proc(array: ^$T/[dynamic]$E, loc := #caller_location) -> (res: E) #no_bounds_check {
if len(array) == 0 { assert(len(array) > 0, "", loc);
return E{}; res = array[len(array)-1];
}
assert(len(array) > 0);
res := #no_bounds_check array[len(array)-1];
(^Raw_Dynamic_Array)(array).len -= 1; (^Raw_Dynamic_Array)(array).len -= 1;
return res; return res;
} }
@builtin @builtin
pop_safe :: proc(array: ^$T/[dynamic]$E) -> (E, bool) { pop_safe :: proc(array: ^$T/[dynamic]$E) -> (res: E, ok: bool) #no_bounds_check {
if len(array) == 0 { if len(array) == 0 {
return E{}, false; return;
} }
res := #no_bounds_check array[len(array)-1]; res, ok = array[len(array)-1], true;
(^Raw_Dynamic_Array)(array).len -= 1; (^Raw_Dynamic_Array)(array).len -= 1;
return res, true; return;
} }
@builtin @builtin
pop_front :: proc(array: ^$T/[dynamic]$E) -> E #no_bounds_check { pop_front :: proc(array: ^$T/[dynamic]$E, loc := #caller_location) -> (res: E) #no_bounds_check {
assert(len(array) > 0); assert(len(array) > 0, "", loc);
res := array[0]; res = array[0];
if len(array) > 1 { if len(array) > 1 {
copy(array[0:], array[1:]); copy(array[0:], array[1:]);
} }
@@ -632,16 +629,16 @@ pop_front :: proc(array: ^$T/[dynamic]$E) -> E #no_bounds_check {
} }
@builtin @builtin
pop_front_safe :: proc(array: ^$T/[dynamic]$E) -> (E, bool) #no_bounds_check { pop_front_safe :: proc(array: ^$T/[dynamic]$E) -> (res: E, ok: bool) #no_bounds_check {
if len(array) == 0 { if len(array) == 0 {
return E{}, false; return;
} }
res := array[0]; res, ok = array[0], true;
if len(array) > 1 { if len(array) > 1 {
copy(array[0:], array[1:]); copy(array[0:], array[1:]);
} }
(^Raw_Dynamic_Array)(array).len -= 1; (^Raw_Dynamic_Array)(array).len -= 1;
return res, true; return;
} }