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

Optimize Array min/max methods

Updated Array::min and Array::max to not copy Variants for comparison, and store index instead of copying each time new min/max is found.
This commit is contained in:
aaronp64
2025-04-14 12:55:19 -04:00
parent 297650a912
commit ecf63dd079

View File

@@ -801,47 +801,45 @@ Variant Array::pop_at(int p_pos) {
} }
Variant Array::min() const { Variant Array::min() const {
Variant minval; int array_size = size();
for (int i = 0; i < size(); i++) { if (array_size == 0) {
if (i == 0) { return Variant();
minval = get(i); }
} else {
bool valid; int min_index = 0;
Variant ret; Variant is_less;
Variant test = get(i); for (int i = 1; i < array_size; i++) {
Variant::evaluate(Variant::OP_LESS, test, minval, ret, valid); bool valid;
if (!valid) { Variant::evaluate(Variant::OP_LESS, _p->array[i], _p->array[min_index], is_less, valid);
return Variant(); //not a valid comparison if (!valid) {
} return Variant(); //not a valid comparison
if (bool(ret)) { }
//is less if (bool(is_less)) {
minval = test; min_index = i;
}
} }
} }
return minval; return _p->array[min_index];
} }
Variant Array::max() const { Variant Array::max() const {
Variant maxval; int array_size = size();
for (int i = 0; i < size(); i++) { if (array_size == 0) {
if (i == 0) { return Variant();
maxval = get(i); }
} else {
bool valid; int max_index = 0;
Variant ret; Variant is_greater;
Variant test = get(i); for (int i = 1; i < array_size; i++) {
Variant::evaluate(Variant::OP_GREATER, test, maxval, ret, valid); bool valid;
if (!valid) { Variant::evaluate(Variant::OP_GREATER, _p->array[i], _p->array[max_index], is_greater, valid);
return Variant(); //not a valid comparison if (!valid) {
} return Variant(); //not a valid comparison
if (bool(ret)) { }
//is greater if (bool(is_greater)) {
maxval = test; max_index = i;
}
} }
} }
return maxval; return _p->array[max_index];
} }
const void *Array::id() const { const void *Array::id() const {