Pārlūkot izejas kodu

Change `map_reserve_dynamic` no do anything when current capacity is greater than specified for the reserve

gingerBill 2 gadi atpakaļ
vecāks
revīzija
5d47e2a166

+ 1 - 1
core/runtime/core_builtin.odin

@@ -300,7 +300,7 @@ shrink_map :: proc(m: ^$T/map[$K]$V, loc := #caller_location) -> (did_shrink: bo
 delete_key :: proc(m: ^$T/map[$K]$V, key: K) -> (deleted_key: K, deleted_value: V) {
 	if m != nil {
 		key := key
-		old_k, old_v, ok :=  map_erase_dynamic((^Raw_Map)(m), map_info(T), uintptr(&key))
+		old_k, old_v, ok := map_erase_dynamic((^Raw_Map)(m), map_info(T), uintptr(&key))
 		if ok {
 			deleted_key   = (^K)(old_k)^
 			deleted_value = (^V)(old_v)^

+ 3 - 1
core/runtime/dynamic_map_internal.odin

@@ -442,7 +442,6 @@ map_reserve_dynamic :: proc "odin" (#no_alias m: ^Raw_Map, #no_alias info: ^Map_
 	}
 
 	new_capacity := new_capacity
-	new_capacity = max(new_capacity, uintptr(1)<<MAP_MIN_LOG2_CAPACITY)
 
 	log2_capacity := map_log2_cap(m^)
 	capacity := uintptr(1) << log2_capacity
@@ -450,6 +449,9 @@ map_reserve_dynamic :: proc "odin" (#no_alias m: ^Raw_Map, #no_alias info: ^Map_
 	if capacity >= new_capacity {
 		return nil
 	}
+
+	new_capacity = max(new_capacity, uintptr(1)<<MAP_MIN_LOG2_CAPACITY)
+
 	// ceiling nearest power of two
 	log2_new_capacity := size_of(uintptr) - intrinsics.count_leading_zeros(new_capacity-1)