1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-04 12:00:25 +00:00

Merge pull request #98408 from rune-scape/stringlikevariantorder-in-place

StringLikeVariantOrder: Compare in-place
This commit is contained in:
Thaddeus Crews
2025-03-18 14:42:58 -05:00
5 changed files with 60 additions and 28 deletions

View File

@@ -166,24 +166,49 @@ public:
static StringName search(const String &p_name);
struct AlphCompare {
_FORCE_INLINE_ bool operator()(const StringName &l, const StringName &r) const {
template <typename LT, typename RT>
_FORCE_INLINE_ bool operator()(const LT &l, const RT &r) const {
return compare(l, r);
}
_FORCE_INLINE_ static bool compare(const StringName &l, const StringName &r) {
const char *l_cname = l._data ? l._data->cname : "";
const char *r_cname = r._data ? r._data->cname : "";
if (l_cname) {
if (r_cname) {
return is_str_less(l_cname, r_cname);
return str_compare(l_cname, r_cname) < 0;
} else {
return is_str_less(l_cname, r._data->name.ptr());
return str_compare(l_cname, r._data->name.ptr()) < 0;
}
} else {
if (r_cname) {
return is_str_less(l._data->name.ptr(), r_cname);
return str_compare(l._data->name.ptr(), r_cname) < 0;
} else {
return is_str_less(l._data->name.ptr(), r._data->name.ptr());
return str_compare(l._data->name.ptr(), r._data->name.ptr()) < 0;
}
}
}
_FORCE_INLINE_ static bool compare(const String &l, const StringName &r) {
const char *r_cname = r._data ? r._data->cname : "";
if (r_cname) {
return str_compare(l.get_data(), r_cname) < 0;
} else {
return str_compare(l.get_data(), r._data->name.ptr()) < 0;
}
}
_FORCE_INLINE_ static bool compare(const StringName &l, const String &r) {
const char *l_cname = l._data ? l._data->cname : "";
if (l_cname) {
return str_compare(l_cname, r.get_data()) < 0;
} else {
return str_compare(l._data->name.ptr(), r.get_data()) < 0;
}
}
_FORCE_INLINE_ static bool compare(const String &l, const String &r) {
return str_compare(l.get_data(), r.get_data()) < 0;
}
};
StringName &operator=(const StringName &p_name);