
3 changed files with 0 additions and 109 deletions
@ -1,85 +0,0 @@ |
|||
#include <stdio.h> |
|||
#include <stdlib.h> |
|||
#include <string.h> |
|||
|
|||
#include "list.h" |
|||
|
|||
void list_init(struct list *list) { |
|||
list->capacity = 10; |
|||
list->length = 0; |
|||
list->items = malloc(sizeof(void *) * list->capacity); |
|||
} |
|||
|
|||
static void list_resize(struct list *list) { |
|||
if (list->length == list->capacity) { |
|||
list->capacity *= 2; |
|||
list->items = realloc(list->items, sizeof(void *) * list->capacity); |
|||
} |
|||
} |
|||
|
|||
void list_free(struct list *list) { |
|||
list->capacity = 0; |
|||
list->length = 0; |
|||
free(list->items); |
|||
} |
|||
|
|||
void list_add(struct list *list, void *item) { |
|||
list_resize(list); |
|||
list->items[list->length++] = item; |
|||
} |
|||
|
|||
void list_insert(struct list *list, size_t index, void *item) { |
|||
list_resize(list); |
|||
memmove(&list->items[index + 1], &list->items[index], |
|||
sizeof(void *) * (list->length - index)); |
|||
list->length++; |
|||
list->items[index] = item; |
|||
} |
|||
|
|||
void list_del(struct list *list, size_t index) { |
|||
list->length--; |
|||
memmove(&list->items[index], &list->items[index + 1], |
|||
sizeof(void *) * (list->length - index)); |
|||
} |
|||
|
|||
size_t list_find(struct list *list, const void *item) { |
|||
for (size_t i = 0; i < list->length; i++) { |
|||
if (list->items[i] == item) { |
|||
return i; |
|||
} |
|||
} |
|||
return -1; |
|||
} |
|||
|
|||
void list_concat(struct list *list, const struct list *source) { |
|||
if (list->length + source->length > list->capacity) { |
|||
while (list->length + source->length > list->capacity) { |
|||
list->capacity *= 2; |
|||
} |
|||
list->items = realloc(list->items, sizeof(void *) * list->capacity); |
|||
} |
|||
memmove(&list->items[list->length], source->items, sizeof(void *) * (source->length)); |
|||
list->length += source->length; |
|||
} |
|||
|
|||
void list_truncate(struct list *list) { |
|||
list->length = 0; |
|||
} |
|||
|
|||
void *list_pop_front(struct list *list) { |
|||
if (list->length == 0) { |
|||
return NULL; |
|||
} |
|||
void *item = list->items[0]; |
|||
list_del(list, 0); |
|||
return item; |
|||
} |
|||
|
|||
void *list_pop_back(struct list *list) { |
|||
if (list->length == 0) { |
|||
return NULL; |
|||
} |
|||
void *item = list->items[list->length - 1]; |
|||
list->length -= 1; |
|||
return item; |
|||
} |
@ -1,23 +0,0 @@ |
|||
#ifndef _SEATD_LIST_H |
|||
#define _SEATD_LIST_H |
|||
|
|||
#include <stddef.h> |
|||
|
|||
struct list { |
|||
size_t capacity; |
|||
size_t length; |
|||
void **items; |
|||
}; |
|||
|
|||
void list_init(struct list *); |
|||
void list_free(struct list *list); |
|||
void list_add(struct list *list, void *item); |
|||
void list_insert(struct list *list, size_t index, void *item); |
|||
void list_del(struct list *list, size_t index); |
|||
void list_concat(struct list *list, const struct list *source); |
|||
void list_truncate(struct list *list); |
|||
void *list_pop_front(struct list *list); |
|||
void *list_pop_back(struct list *list); |
|||
size_t list_find(struct list *list, const void *item); |
|||
|
|||
#endif |
Loading…
Reference in new issue