Blame converter/other/fiasco/lib/list.h

Packit 78deda
/*
Packit 78deda
 *  list.h
Packit 78deda
 *
Packit 78deda
 *  Written by:		Ullrich Hafner
Packit 78deda
 *		
Packit 78deda
 *  This file is part of FIASCO (Fractal Image And Sequence COdec)
Packit 78deda
 *  Copyright (C) 1994-2000 Ullrich Hafner
Packit 78deda
 */
Packit 78deda
Packit 78deda
/*
Packit 78deda
 *  $Date: 2000/06/14 20:49:37 $
Packit 78deda
 *  $Author: hafner $
Packit 78deda
 *  $Revision: 5.1 $
Packit 78deda
 *  $State: Exp $
Packit 78deda
 */
Packit 78deda
Packit 78deda
#ifndef _LIST_H
Packit 78deda
#define _LIST_H
Packit 78deda
Packit 78deda
#include <stdio.h>
Packit 78deda
#include <stddef.h>
Packit 78deda
Packit 78deda
typedef struct node
Packit 78deda
{
Packit 78deda
   struct node *prev;			/* pointer to prev list element */
Packit 78deda
   struct node *next;			/* pointer to next list element */
Packit 78deda
   void	       *value;			/* pointer to value of node */
Packit 78deda
} node_t;
Packit 78deda
Packit 78deda
typedef struct list
Packit 78deda
{
Packit 78deda
   node_t *head;
Packit 78deda
   node_t *tail;
Packit 78deda
   size_t  size_of_element;		/* number of bytes to store value */
Packit 78deda
} list_t;
Packit 78deda
Packit 78deda
typedef enum {TAIL, HEAD} pos_e;
Packit 78deda
Packit 78deda
/*
Packit 78deda
 *  Alias definitions for queue and stack
Packit 78deda
 */
Packit 78deda
Packit 78deda
typedef list_t lqueue_t ;
Packit 78deda
#define alloc_queue		alloc_list
Packit 78deda
#define free_queue		free_list		
Packit 78deda
#define queue_append(q, d)	(list_insert ((q), TAIL, (d)))
Packit 78deda
#define queue_remove(q, d)	(list_remove ((q), HEAD, (d)))
Packit 78deda
Packit 78deda
typedef list_t lstack_t ;
Packit 78deda
#define alloc_stack		alloc_list
Packit 78deda
#define free_stack		free_list
Packit 78deda
#define stack_push(q, d)	(list_insert ((q), TAIL, (d)))
Packit 78deda
#define stack_pop(q, d)		(list_remove ((q), TAIL, (d)))
Packit 78deda
Packit 78deda
list_t *
Packit 78deda
alloc_list (size_t size_of_element);
Packit 78deda
void 
Packit 78deda
free_list (list_t *list);
Packit 78deda
bool_t
Packit 78deda
list_element_n (const list_t *list, pos_e pos, unsigned n, void *data);
Packit 78deda
void
Packit 78deda
list_foreach (const list_t *list, void (*function)(void *, void *),
Packit 78deda
	      void *data);
Packit 78deda
void
Packit 78deda
list_insert (list_t *list, pos_e pos, const void *data);
Packit 78deda
bool_t
Packit 78deda
list_remove (list_t *list, pos_e pos, void *data);
Packit 78deda
unsigned
Packit 78deda
list_sizeof (const list_t *list);
Packit 78deda
Packit 78deda
#endif /* not _LIST_H */
Packit 78deda