You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
1.4 KiB
61 lines
1.4 KiB
#ifndef DTYPE_H |
|
#define DTYPE_H |
|
|
|
#include <stdlib.h> |
|
|
|
enum { |
|
D_SHRINK_THRESHOLD = 50, // percentage of capacity |
|
// 0 = never shrink |
|
// 100 = always shrink |
|
D_GROW_AMOUNT = 50, // percentage of size |
|
// 0 = 1 = grow by 1 on every add |
|
// 100 = double size whenever space runs out |
|
D_MAX_QUEUE_LEN = 400 // maximum num of items allowed in a fifo |
|
}; |
|
|
|
struct array_list { |
|
size_t size; |
|
size_t capacity; |
|
|
|
void **items; |
|
void (*free)(void *ptr); // free function |
|
}; |
|
|
|
struct list_fifo { |
|
struct array_list inner; |
|
size_t fifo_head; |
|
size_t *size; |
|
}; |
|
|
|
typedef struct array_list ArrayList; |
|
typedef struct list_fifo ListFiFo; |
|
|
|
/* FIFOs */ |
|
|
|
ListFiFo new_fifo(int start_size); |
|
int fifo_add(ListFiFo *l, void *i); |
|
void *fifo_get(ListFiFo *l); |
|
|
|
/* Stacks */ |
|
|
|
int arlst_push(ArrayList *l, void *item); |
|
void * arlst_pop(ArrayList *l); |
|
|
|
/* Array Lists */ |
|
|
|
// constructors |
|
ArrayList new_arlst_from_array(void *array, size_t elem_size, int length); |
|
ArrayList new_arlst_using_array_wfree(void **, int, void (*)(void *)); |
|
ArrayList new_arlst_using_array(void **array, int length); |
|
ArrayList new_arlst_wfree(int num_elems, void (*nfree)(void *ptr)); |
|
ArrayList new_arlst(int num_elems); |
|
|
|
// destructors |
|
int arlst_destroy(ArrayList *l); |
|
void * arlst_del(ArrayList *l, int id); |
|
|
|
// functions |
|
int arlst_add(ArrayList *l, void *item); |
|
void *arlst_get(ArrayList *l, int id); |
|
|
|
#endif
|
|
|