void list_push_front(list_t *l, void *elem) { if(l->capacity == l->size) { list_double_capacity(l); } memmove(l->data + l->elem_size, l->data, l->elem_size * l->size); memcpy(l->data, elem, l->elem_size); l->size++; }
void list_push_back(list_t *l,void *elem) { assert(l != NULL && elem != NULL); if(l->capacity == l->size) { list_double_capacity(l); } memcpy(l->data + l->size * l->elem_size,elem,l->elem_size); l->size++; }
caValue* list_append(ListData** dataPtr) { if (*dataPtr == NULL) { *dataPtr = allocate_empty_list(1); } else { *dataPtr = list_touch(*dataPtr); if ((*dataPtr)->count == (*dataPtr)->capacity) *dataPtr = list_double_capacity(*dataPtr); } ListData* data = *dataPtr; data->count++; return &data->items[data->count - 1]; }
void list_insert(list_t *l, int index, void *elem) { if(index < 0 || index >= l->size) { fprintf(stderr, "index out of bounds %s:%d\n", __FILE__, __LINE__); abort(); } if(l->capacity == l->size) { list_double_capacity(l); } memmove(l->data + l->elem_size * (index + 1), l->data + l->elem_size * index, l->elem_size * (l->size - index)); memcpy(l->data + index * l->elem_size, elem, l->elem_size); l->size++; }