typedef struct LL_PREFIX_ll_item_s
{
	LL_DATA_TYPE data;
	struct LL_PREFIX_ll_item_s *next;
} LL_PREFIX_ll_item_t;

typedef struct LL_PREFIX_ll_items_s
{
	LL_PREFIX_ll_item_t *items;
	struct LL_PREFIX_ll_items_s *next;
} LL_PREFIX_ll_items_t;

typedef struct
{
	unsigned int initial;
	unsigned int increment;
	unsigned int item_count;
	LL_PREFIX_ll_item_t *head;
	LL_PREFIX_ll_item_t *tail;
	LL_PREFIX_ll_item_t *free_list;
	LL_PREFIX_ll_items_t *first_block;
	LL_PREFIX_ll_items_t *current_block;
} LL_PREFIX_ll_t;

LL_PREFIX_ll_t *LL_PREFIX_ll_init(unsigned int initial, unsigned int increment);
void LL_PREFIX_ll_free(LL_PREFIX_ll_t *list);
LL_PREFIX_ll_item_t *LL_PREFIX_ll_append(LL_PREFIX_ll_t *list,
                                         LL_DATA_TYPE *data);
LL_PREFIX_ll_t *LL_PREFIX_ll_append_list(LL_PREFIX_ll_t *dest,
                                         LL_PREFIX_ll_t *source);

#define LL_PREFIX_ll_head(l) (l->head)
#define LL_PREFIX_ll_tail(l) (l->tail)
#define LL_PREFIX_ll_size(l) (l->item_count)
#define LL_PREFIX_ll_next(i) (i->next)
#define LL_PREFIX_ll_data(i) (&(i->data))

