fix: list now correctly inserts elements being inserted at len-1
;-; pain
This commit is contained in:
parent
6f6cd9032f
commit
8c5aa78195
|
@ -89,7 +89,7 @@ size_t list_add(List* self, void* item) {
|
|||
.as_void = self->data
|
||||
};
|
||||
|
||||
uint8_t* into = data.as_byte + self->element_size * self->len;
|
||||
uint8_t* into = data.as_byte + (self->element_size * self->len);
|
||||
|
||||
memcpy(into, item, self->element_size);
|
||||
++self->len;
|
||||
|
@ -100,7 +100,7 @@ size_t list_add(List* self, void* item) {
|
|||
void list_insert(List* self, void* item, size_t at) {
|
||||
list_reserve(self, self->len + 1);
|
||||
|
||||
if(at == self->len - 1) {
|
||||
if(at >= self->len) {
|
||||
list_add(self, item);
|
||||
return;
|
||||
}
|
||||
|
@ -111,9 +111,9 @@ void list_insert(List* self, void* item, size_t at) {
|
|||
} data = {
|
||||
.as_void = self->data
|
||||
};
|
||||
uint8_t* from = data.as_byte + self->element_size * at;
|
||||
uint8_t* into = data.as_byte + self->element_size * (at + 1);
|
||||
uint8_t* end = data.as_byte + self->element_size * self->len;
|
||||
uint8_t* from = data.as_byte + (self->element_size * at);
|
||||
uint8_t* into = data.as_byte + (self->element_size * (at + 1));
|
||||
uint8_t* end = data.as_byte + (self->element_size * self->len);
|
||||
memmove(into, from, end - from);
|
||||
memcpy(from, item, self->element_size);
|
||||
++self->len;
|
||||
|
|
Loading…
Reference in a new issue