You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-04 12:00:25 +00:00
Merge pull request #108577 from YYF233333/global_class_list
Simplify `ScriptServer::get_global_class_list`
This commit is contained in:
@@ -33,6 +33,7 @@
|
||||
#include "core/config/engine.h"
|
||||
#include "core/io/resource_loader.h"
|
||||
#include "core/object/script_language.h"
|
||||
#include "core/templates/sort_array.h"
|
||||
#include "core/version.h"
|
||||
|
||||
#ifdef DEBUG_ENABLED
|
||||
@@ -240,28 +241,46 @@ bool ClassDB::is_parent_class(const StringName &p_class, const StringName &p_inh
|
||||
return _is_parent_class(p_class, p_inherits);
|
||||
}
|
||||
|
||||
void ClassDB::get_class_list(List<StringName> *p_classes) {
|
||||
// This function only sorts items added by this function.
|
||||
// If `p_classes` is not empty before calling and a global sort is needed, caller must handle that separately.
|
||||
void ClassDB::get_class_list(LocalVector<StringName> &p_classes) {
|
||||
Locker::Lock lock(Locker::STATE_READ);
|
||||
|
||||
for (const KeyValue<StringName, ClassInfo> &E : classes) {
|
||||
p_classes->push_back(E.key);
|
||||
if (classes.is_empty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
p_classes->sort_custom<StringName::AlphCompare>();
|
||||
p_classes.reserve(p_classes.size() + classes.size());
|
||||
for (const KeyValue<StringName, ClassInfo> &cls : classes) {
|
||||
p_classes.push_back(cls.key);
|
||||
}
|
||||
|
||||
SortArray<StringName> sorter;
|
||||
sorter.sort(&p_classes[p_classes.size() - classes.size()], classes.size());
|
||||
}
|
||||
|
||||
#ifdef TOOLS_ENABLED
|
||||
void ClassDB::get_extensions_class_list(List<StringName> *p_classes) {
|
||||
// This function only sorts items added by this function.
|
||||
// If `p_classes` is not empty before calling and a global sort is needed, caller must handle that separately.
|
||||
void ClassDB::get_extensions_class_list(LocalVector<StringName> &p_classes) {
|
||||
Locker::Lock lock(Locker::STATE_READ);
|
||||
|
||||
uint32_t original_size = p_classes.size();
|
||||
|
||||
for (const KeyValue<StringName, ClassInfo> &E : classes) {
|
||||
if (E.value.api != API_EXTENSION && E.value.api != API_EDITOR_EXTENSION) {
|
||||
continue;
|
||||
}
|
||||
p_classes->push_back(E.key);
|
||||
p_classes.push_back(E.key);
|
||||
}
|
||||
|
||||
p_classes->sort_custom<StringName::AlphCompare>();
|
||||
// Nothing appended.
|
||||
if (p_classes.size() == original_size) {
|
||||
return;
|
||||
}
|
||||
|
||||
SortArray<StringName> sorter;
|
||||
sorter.sort(&p_classes[original_size], p_classes.size() - original_size);
|
||||
}
|
||||
|
||||
void ClassDB::get_extension_class_list(const Ref<GDExtension> &p_extension, List<StringName> *p_classes) {
|
||||
|
||||
Reference in New Issue
Block a user