mirror of
https://github.com/godotengine/godot-cpp.git
synced 2026-01-05 02:10:14 +03:00
Replace unordered_map with AHashMap
This commit is contained in:
@@ -38,10 +38,10 @@
|
||||
|
||||
namespace godot {
|
||||
|
||||
std::unordered_map<StringName, ClassDB::ClassInfo> ClassDB::classes;
|
||||
std::unordered_map<StringName, const GDExtensionInstanceBindingCallbacks *> ClassDB::instance_binding_callbacks;
|
||||
AHashMap<StringName, ClassDB::ClassInfo> ClassDB::classes;
|
||||
AHashMap<StringName, const GDExtensionInstanceBindingCallbacks *> ClassDB::instance_binding_callbacks;
|
||||
LocalVector<StringName> ClassDB::class_register_order;
|
||||
std::unordered_map<StringName, Object *> ClassDB::engine_singletons;
|
||||
AHashMap<StringName, Object *> ClassDB::engine_singletons;
|
||||
std::mutex ClassDB::engine_singletons_mutex;
|
||||
GDExtensionInitializationLevel ClassDB::current_level = GDEXTENSION_INITIALIZATION_CORE;
|
||||
|
||||
@@ -114,9 +114,9 @@ MethodBind *ClassDB::get_method(const StringName &p_class, const StringName &p_m
|
||||
|
||||
ClassInfo *type = &classes[p_class];
|
||||
while (type) {
|
||||
std::unordered_map<StringName, MethodBind *>::iterator method = type->method_map.find(p_method);
|
||||
AHashMap<StringName, MethodBind *>::Iterator method = type->method_map.find(p_method);
|
||||
if (method != type->method_map.end()) {
|
||||
return method->second;
|
||||
return method->value;
|
||||
}
|
||||
type = type->parent_ptr;
|
||||
continue;
|
||||
@@ -128,13 +128,13 @@ MethodBind *ClassDB::get_method(const StringName &p_class, const StringName &p_m
|
||||
MethodBind *ClassDB::bind_methodfi(uint32_t p_flags, MethodBind *p_bind, const MethodDefinition &method_name, const void **p_defs, int p_defcount) {
|
||||
StringName instance_type = p_bind->get_instance_class();
|
||||
|
||||
std::unordered_map<StringName, ClassInfo>::iterator type_it = classes.find(instance_type);
|
||||
AHashMap<StringName, ClassInfo>::Iterator type_it = classes.find(instance_type);
|
||||
if (type_it == classes.end()) {
|
||||
memdelete(p_bind);
|
||||
ERR_FAIL_V_MSG(nullptr, String("Class '{0}' doesn't exist.").format(Array::make(instance_type)));
|
||||
}
|
||||
|
||||
ClassInfo &type = type_it->second;
|
||||
ClassInfo &type = type_it->value;
|
||||
|
||||
if (type.method_map.find(method_name.name) != type.method_map.end()) {
|
||||
memdelete(p_bind);
|
||||
@@ -233,11 +233,11 @@ void ClassDB::bind_method_godot(const StringName &p_class_name, MethodBind *p_me
|
||||
}
|
||||
|
||||
void ClassDB::add_signal(const StringName &p_class, const MethodInfo &p_signal) {
|
||||
std::unordered_map<StringName, ClassInfo>::iterator type_it = classes.find(p_class);
|
||||
AHashMap<StringName, ClassInfo>::Iterator type_it = classes.find(p_class);
|
||||
|
||||
ERR_FAIL_COND_MSG(type_it == classes.end(), String("Class '{0}' doesn't exist.").format(Array::make(p_class)));
|
||||
|
||||
ClassInfo &cl = type_it->second;
|
||||
ClassInfo &cl = type_it->value;
|
||||
|
||||
// Check if this signal is already register
|
||||
ClassInfo *check = &cl;
|
||||
@@ -268,11 +268,11 @@ void ClassDB::add_signal(const StringName &p_class, const MethodInfo &p_signal)
|
||||
}
|
||||
|
||||
void ClassDB::bind_integer_constant(const StringName &p_class_name, const StringName &p_enum_name, const StringName &p_constant_name, GDExtensionInt p_constant_value, bool p_is_bitfield) {
|
||||
std::unordered_map<StringName, ClassInfo>::iterator type_it = classes.find(p_class_name);
|
||||
AHashMap<StringName, ClassInfo>::Iterator type_it = classes.find(p_class_name);
|
||||
|
||||
ERR_FAIL_COND_MSG(type_it == classes.end(), String("Class '{0}' doesn't exist.").format(Array::make(p_class_name)));
|
||||
|
||||
ClassInfo &type = type_it->second;
|
||||
ClassInfo &type = type_it->value;
|
||||
|
||||
// check if it already exists
|
||||
ERR_FAIL_COND_MSG(type.constant_names.find(p_constant_name) != type.constant_names.end(), String("Constant '{0}::{1}' already registered.").format(Array::make(p_class_name, p_constant_name)));
|
||||
@@ -290,17 +290,17 @@ GDExtensionClassCallVirtual ClassDB::get_virtual_func(void *p_userdata, GDExtens
|
||||
const StringName *class_name = reinterpret_cast<const StringName *>(p_userdata);
|
||||
const StringName *name = reinterpret_cast<const StringName *>(p_name);
|
||||
|
||||
std::unordered_map<StringName, ClassInfo>::iterator type_it = classes.find(*class_name);
|
||||
AHashMap<StringName, ClassInfo>::Iterator type_it = classes.find(*class_name);
|
||||
ERR_FAIL_COND_V_MSG(type_it == classes.end(), nullptr, String("Class '{0}' doesn't exist.").format(Array::make(*class_name)));
|
||||
|
||||
const ClassInfo *type = &type_it->second;
|
||||
const ClassInfo *type = &type_it->value;
|
||||
|
||||
// Find method in current class, or any of its parent classes (Godot classes not included)
|
||||
while (type != nullptr) {
|
||||
std::unordered_map<StringName, ClassInfo::VirtualMethod>::const_iterator method_it = type->virtual_methods.find(*name);
|
||||
AHashMap<StringName, ClassInfo::VirtualMethod>::ConstIterator method_it = type->virtual_methods.find(*name);
|
||||
|
||||
if (method_it != type->virtual_methods.end() && method_it->second.hash == p_hash) {
|
||||
return method_it->second.func;
|
||||
if (method_it != type->virtual_methods.end() && method_it->value.hash == p_hash) {
|
||||
return method_it->value.func;
|
||||
}
|
||||
|
||||
type = type->parent_ptr;
|
||||
@@ -310,9 +310,9 @@ GDExtensionClassCallVirtual ClassDB::get_virtual_func(void *p_userdata, GDExtens
|
||||
}
|
||||
|
||||
const GDExtensionInstanceBindingCallbacks *ClassDB::get_instance_binding_callbacks(const StringName &p_class) {
|
||||
std::unordered_map<StringName, const GDExtensionInstanceBindingCallbacks *>::iterator callbacks_it = instance_binding_callbacks.find(p_class);
|
||||
AHashMap<StringName, const GDExtensionInstanceBindingCallbacks *>::Iterator callbacks_it = instance_binding_callbacks.find(p_class);
|
||||
if (likely(callbacks_it != instance_binding_callbacks.end())) {
|
||||
return callbacks_it->second;
|
||||
return callbacks_it->value;
|
||||
}
|
||||
|
||||
// If we don't have an instance binding callback for the given class, find the closest parent where we do.
|
||||
@@ -323,14 +323,14 @@ const GDExtensionInstanceBindingCallbacks *ClassDB::get_instance_binding_callbac
|
||||
callbacks_it = instance_binding_callbacks.find(class_name);
|
||||
} while (callbacks_it == instance_binding_callbacks.end());
|
||||
|
||||
return callbacks_it->second;
|
||||
return callbacks_it->value;
|
||||
}
|
||||
|
||||
void ClassDB::bind_virtual_method(const StringName &p_class, const StringName &p_method, GDExtensionClassCallVirtual p_call, uint32_t p_hash) {
|
||||
std::unordered_map<StringName, ClassInfo>::iterator type_it = classes.find(p_class);
|
||||
AHashMap<StringName, ClassInfo>::Iterator type_it = classes.find(p_class);
|
||||
ERR_FAIL_COND_MSG(type_it == classes.end(), String("Class '{0}' doesn't exist.").format(Array::make(p_class)));
|
||||
|
||||
ClassInfo &type = type_it->second;
|
||||
ClassInfo &type = type_it->value;
|
||||
|
||||
ERR_FAIL_COND_MSG(type.method_map.find(p_method) != type.method_map.end(), String("Method '{0}::{1}()' already registered as non-virtual.").format(Array::make(p_class, p_method)));
|
||||
ERR_FAIL_COND_MSG(type.virtual_methods.find(p_method) != type.virtual_methods.end(), String("Virtual '{0}::{1}()' method already registered.").format(Array::make(p_class, p_method)));
|
||||
@@ -342,7 +342,7 @@ void ClassDB::bind_virtual_method(const StringName &p_class, const StringName &p
|
||||
}
|
||||
|
||||
void ClassDB::add_virtual_method(const StringName &p_class, const MethodInfo &p_method, const Vector<StringName> &p_arg_names) {
|
||||
std::unordered_map<StringName, ClassInfo>::iterator type_it = classes.find(p_class);
|
||||
AHashMap<StringName, ClassInfo>::Iterator type_it = classes.find(p_class);
|
||||
ERR_FAIL_COND_MSG(type_it == classes.end(), String("Class '{0}' doesn't exist.").format(Array::make(p_class)));
|
||||
|
||||
GDExtensionClassVirtualMethodInfo mi;
|
||||
@@ -390,8 +390,8 @@ void ClassDB::_editor_get_classes_used_callback(GDExtensionTypePtr p_packed_stri
|
||||
PackedStringArray *arr = reinterpret_cast<PackedStringArray *>(p_packed_string_array);
|
||||
arr->resize(instance_binding_callbacks.size());
|
||||
int index = 0;
|
||||
for (const std::pair<const StringName, const GDExtensionInstanceBindingCallbacks *> &pair : instance_binding_callbacks) {
|
||||
(*arr)[index++] = pair.first;
|
||||
for (const KeyValue<StringName, const GDExtensionInstanceBindingCallbacks *> &pair : instance_binding_callbacks) {
|
||||
(*arr)[index++] = pair.key;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -399,8 +399,8 @@ void ClassDB::initialize_class(const ClassInfo &p_cl) {
|
||||
}
|
||||
|
||||
void ClassDB::initialize(GDExtensionInitializationLevel p_level) {
|
||||
for (const std::pair<const StringName, ClassInfo> &pair : classes) {
|
||||
const ClassInfo &cl = pair.second;
|
||||
for (const KeyValue<StringName, ClassInfo> &pair : classes) {
|
||||
const ClassInfo &cl = pair.value;
|
||||
if (cl.level != p_level) {
|
||||
continue;
|
||||
}
|
||||
@@ -421,8 +421,8 @@ void ClassDB::deinitialize(GDExtensionInitializationLevel p_level) {
|
||||
|
||||
internal::gdextension_interface_classdb_unregister_extension_class(internal::library, name._native_ptr());
|
||||
|
||||
for (const std::pair<const StringName, MethodBind *> &method : cl.method_map) {
|
||||
memdelete(method.second);
|
||||
for (const KeyValue<StringName, MethodBind *> &method : cl.method_map) {
|
||||
memdelete(method.value);
|
||||
}
|
||||
|
||||
classes.erase(name);
|
||||
@@ -442,8 +442,8 @@ void ClassDB::deinitialize(GDExtensionInitializationLevel p_level) {
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(engine_singletons_mutex);
|
||||
singleton_objects.reserve(engine_singletons.size());
|
||||
for (const std::pair<const StringName, Object *> &pair : engine_singletons) {
|
||||
singleton_objects.push_back(pair.second);
|
||||
for (const KeyValue<StringName, Object *> &pair : engine_singletons) {
|
||||
singleton_objects.push_back(pair.value);
|
||||
}
|
||||
}
|
||||
for (const Object *i : singleton_objects) {
|
||||
|
||||
Reference in New Issue
Block a user