Remove OAHashMap, in favour of AHashMap.

The two types had (mostly) the same decisions, but `AHashMap` is a faster implementation, and is more consistent with `HashMap`.
This commit is contained in:
Lukas Tenbrink 2025-05-31 15:50:10 +02:00
parent b89c47bb85
commit 963c20565b
16 changed files with 219 additions and 878 deletions

View file

@ -35,7 +35,7 @@
#include "core/io/resource_loader.h"
#include "core/object/class_db.h"
#include "core/object/object.h"
#include "core/templates/oa_hash_map.h"
#include "core/templates/a_hash_map.h"
#include "core/templates/vector.h"
#include "core/variant/typed_array.h"
@ -514,7 +514,7 @@ struct GDScriptUtilityFunctionInfo {
bool is_constant = false;
};
static OAHashMap<StringName, GDScriptUtilityFunctionInfo> utility_function_table;
static AHashMap<StringName, GDScriptUtilityFunctionInfo> utility_function_table;
static List<StringName> utility_function_name_table;
static void _register_function(const StringName &p_name, const MethodInfo &p_method_info, GDScriptUtilityFunctions::FunctionPtr p_function, bool p_is_const) {
@ -598,50 +598,50 @@ void GDScriptUtilityFunctions::unregister_functions() {
}
GDScriptUtilityFunctions::FunctionPtr GDScriptUtilityFunctions::get_function(const StringName &p_function) {
GDScriptUtilityFunctionInfo *info = utility_function_table.lookup_ptr(p_function);
GDScriptUtilityFunctionInfo *info = utility_function_table.getptr(p_function);
ERR_FAIL_NULL_V(info, nullptr);
return info->function;
}
bool GDScriptUtilityFunctions::has_function_return_value(const StringName &p_function) {
GDScriptUtilityFunctionInfo *info = utility_function_table.lookup_ptr(p_function);
GDScriptUtilityFunctionInfo *info = utility_function_table.getptr(p_function);
ERR_FAIL_NULL_V(info, false);
return info->info.return_val.type != Variant::NIL || bool(info->info.return_val.usage & PROPERTY_USAGE_NIL_IS_VARIANT);
}
Variant::Type GDScriptUtilityFunctions::get_function_return_type(const StringName &p_function) {
GDScriptUtilityFunctionInfo *info = utility_function_table.lookup_ptr(p_function);
GDScriptUtilityFunctionInfo *info = utility_function_table.getptr(p_function);
ERR_FAIL_NULL_V(info, Variant::NIL);
return info->info.return_val.type;
}
StringName GDScriptUtilityFunctions::get_function_return_class(const StringName &p_function) {
GDScriptUtilityFunctionInfo *info = utility_function_table.lookup_ptr(p_function);
GDScriptUtilityFunctionInfo *info = utility_function_table.getptr(p_function);
ERR_FAIL_NULL_V(info, StringName());
return info->info.return_val.class_name;
}
Variant::Type GDScriptUtilityFunctions::get_function_argument_type(const StringName &p_function, int p_arg) {
GDScriptUtilityFunctionInfo *info = utility_function_table.lookup_ptr(p_function);
GDScriptUtilityFunctionInfo *info = utility_function_table.getptr(p_function);
ERR_FAIL_NULL_V(info, Variant::NIL);
ERR_FAIL_INDEX_V(p_arg, info->info.arguments.size(), Variant::NIL);
return info->info.arguments[p_arg].type;
}
int GDScriptUtilityFunctions::get_function_argument_count(const StringName &p_function) {
GDScriptUtilityFunctionInfo *info = utility_function_table.lookup_ptr(p_function);
GDScriptUtilityFunctionInfo *info = utility_function_table.getptr(p_function);
ERR_FAIL_NULL_V(info, 0);
return info->info.arguments.size();
}
bool GDScriptUtilityFunctions::is_function_vararg(const StringName &p_function) {
GDScriptUtilityFunctionInfo *info = utility_function_table.lookup_ptr(p_function);
GDScriptUtilityFunctionInfo *info = utility_function_table.getptr(p_function);
ERR_FAIL_NULL_V(info, false);
return (bool)(info->info.flags & METHOD_FLAG_VARARG);
}
bool GDScriptUtilityFunctions::is_function_constant(const StringName &p_function) {
GDScriptUtilityFunctionInfo *info = utility_function_table.lookup_ptr(p_function);
GDScriptUtilityFunctionInfo *info = utility_function_table.getptr(p_function);
ERR_FAIL_NULL_V(info, false);
return info->is_constant;
}
@ -657,7 +657,7 @@ void GDScriptUtilityFunctions::get_function_list(List<StringName> *r_functions)
}
MethodInfo GDScriptUtilityFunctions::get_function_info(const StringName &p_function) {
GDScriptUtilityFunctionInfo *info = utility_function_table.lookup_ptr(p_function);
GDScriptUtilityFunctionInfo *info = utility_function_table.getptr(p_function);
ERR_FAIL_NULL_V(info, MethodInfo());
return info->info;
}