mirror of
https://github.com/godotengine/godot.git
synced 2025-10-19 16:03:29 +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:
parent
297650a912
commit
ecf63dd079
1 changed files with 32 additions and 34 deletions
|
@ -801,47 +801,45 @@ Variant Array::pop_at(int p_pos) {
|
|||
}
|
||||
|
||||
Variant Array::min() const {
|
||||
Variant minval;
|
||||
for (int i = 0; i < size(); i++) {
|
||||
if (i == 0) {
|
||||
minval = get(i);
|
||||
} else {
|
||||
bool valid;
|
||||
Variant ret;
|
||||
Variant test = get(i);
|
||||
Variant::evaluate(Variant::OP_LESS, test, minval, ret, valid);
|
||||
if (!valid) {
|
||||
return Variant(); //not a valid comparison
|
||||
}
|
||||
if (bool(ret)) {
|
||||
//is less
|
||||
minval = test;
|
||||
}
|
||||
int array_size = size();
|
||||
if (array_size == 0) {
|
||||
return Variant();
|
||||
}
|
||||
|
||||
int min_index = 0;
|
||||
Variant is_less;
|
||||
for (int i = 1; i < array_size; i++) {
|
||||
bool valid;
|
||||
Variant::evaluate(Variant::OP_LESS, _p->array[i], _p->array[min_index], is_less, valid);
|
||||
if (!valid) {
|
||||
return Variant(); //not a valid comparison
|
||||
}
|
||||
if (bool(is_less)) {
|
||||
min_index = i;
|
||||
}
|
||||
}
|
||||
return minval;
|
||||
return _p->array[min_index];
|
||||
}
|
||||
|
||||
Variant Array::max() const {
|
||||
Variant maxval;
|
||||
for (int i = 0; i < size(); i++) {
|
||||
if (i == 0) {
|
||||
maxval = get(i);
|
||||
} else {
|
||||
bool valid;
|
||||
Variant ret;
|
||||
Variant test = get(i);
|
||||
Variant::evaluate(Variant::OP_GREATER, test, maxval, ret, valid);
|
||||
if (!valid) {
|
||||
return Variant(); //not a valid comparison
|
||||
}
|
||||
if (bool(ret)) {
|
||||
//is greater
|
||||
maxval = test;
|
||||
}
|
||||
int array_size = size();
|
||||
if (array_size == 0) {
|
||||
return Variant();
|
||||
}
|
||||
|
||||
int max_index = 0;
|
||||
Variant is_greater;
|
||||
for (int i = 1; i < array_size; i++) {
|
||||
bool valid;
|
||||
Variant::evaluate(Variant::OP_GREATER, _p->array[i], _p->array[max_index], is_greater, valid);
|
||||
if (!valid) {
|
||||
return Variant(); //not a valid comparison
|
||||
}
|
||||
if (bool(is_greater)) {
|
||||
max_index = i;
|
||||
}
|
||||
}
|
||||
return maxval;
|
||||
return _p->array[max_index];
|
||||
}
|
||||
|
||||
const void *Array::id() const {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue