Use memmove for Vector_take

Doing a quick check with callgrind this gives
an average reduction from 1804 cycles/call
down to 491 cycles/call on my test system.

The average was taken over about 40k calls.
This commit is contained in:
Benny Baumann 2020-10-06 17:10:23 +02:00 committed by cgzones
parent 769df604b2
commit 1704c29b90
1 changed files with 3 additions and 2 deletions

View File

@ -204,8 +204,9 @@ Object* Vector_take(Vector* this, int idx) {
Object* removed = this->array[idx];
//assert (removed != NULL);
this->items--;
for (int i = idx; i < this->items; i++)
this->array[i] = this->array[i+1];
if(idx < this->items) {
memmove(&this->array[idx], &this->array[idx + 1], (this->items - idx) * sizeof(this->array[0]));
}
//this->array[this->items] = NULL;
assert(Vector_isConsistent(this));
return removed;