improve _add_PtkList performance
This commit is contained in:
parent
e2e486a215
commit
04ff88c4e6
1 changed files with 8 additions and 15 deletions
|
@ -22,24 +22,17 @@ bool _grow_PtkList(void **data, uint32_t *allocated, size_t element_size) {
|
|||
}
|
||||
|
||||
bool _add_PtkList(void **data, uint32_t *size, uint32_t *allocated, void *elements, size_t element_count, size_t element_size) {
|
||||
size_t elements_added = 0;
|
||||
|
||||
for (size_t i = 0; i < element_count; ++i) {
|
||||
if (*size == *allocated) {
|
||||
if (!_grow_PtkList(data, allocated, element_size)) {
|
||||
break;
|
||||
}
|
||||
while (*allocated < *size + element_count) {
|
||||
if (!_grow_PtkList(data, allocated, element_size)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
uint8_t *element = ((uint8_t *)elements) + (i * element_size);
|
||||
|
||||
uint8_t *target = ((uint8_t *)*data) + (*size * element_size);
|
||||
memcpy(target, element, element_size);
|
||||
elements_added += 1;
|
||||
*size += 1;
|
||||
}
|
||||
|
||||
return elements_added == element_count;
|
||||
uint8_t *target = ((uint8_t *)*data) + (*size * element_size);
|
||||
memcpy(target, (uint8_t *)elements, element_size * element_count);
|
||||
*size += element_count;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool _remove_PtkList(void *data, uint32_t *size, void *elements, size_t element_count, size_t element_size) {
|
||||
|
|
Loading…
Reference in a new issue