Make Variant::get_type_by_name HashMap initialization thread-safe

Updated Variant::get_type_by_name to call separate function for static HashMap initialization, which includes adding the initial key/value pairs.
This commit is contained in:
aaronp64 2025-11-26 15:01:49 -05:00
parent 9dd6c4dbac
commit 8ac43f4733

View file

@ -174,13 +174,16 @@ String Variant::get_type_name(Variant::Type p_type) {
return "";
}
Variant::Type Variant::get_type_by_name(const String &p_type_name) {
static HashMap<String, Type> type_names;
if (unlikely(type_names.is_empty())) {
for (int i = 0; i < VARIANT_MAX; i++) {
type_names[get_type_name((Type)i)] = (Type)i;
}
static HashMap<String, Variant::Type> _init_type_name_map() {
HashMap<String, Variant::Type> type_names;
for (int i = 0; i < Variant::VARIANT_MAX; i++) {
type_names[Variant::get_type_name((Variant::Type)i)] = (Variant::Type)i;
}
return type_names;
}
Variant::Type Variant::get_type_by_name(const String &p_type_name) {
static HashMap<String, Type> type_names = _init_type_name_map();
const Type *ptr = type_names.getptr(p_type_name);
return (ptr == nullptr) ? VARIANT_MAX : *ptr;