Simple ArrayList and FIFO for C projects
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

#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